Saturday, August 3, 2013

So you think you can program?

A big mistake that I did when I began my internship a long time ago was to think that knowing a programming language, its syntax, and its standard libraries were suffice. How ingenious I was!  As soon as start talking to experienced programmers that something else was needed to grasp the "The Art of Computer Programming" (after all those years I cannot help to agree more with Donald Knuth that programming is an art).

A graduation course on Computing is focused in teaching on how to solve problems in  effectively and efficiently way.  It is going to teach you one or more programming languages in order to illustrate  the concepts and only for that reason. In my case Pascal was used to introduce Algorithms, C++ for OOP and Operating System Concepts, SQL for Databases, and Lisp and Prolog for functional and logic programming respectively.

But Programming in way that is readable to others, maintainable, efficiently and less prone to bugs is something that you learn in your  daily practice by failing  or by listening to more experienced programmers. Here is a list of books that I recommend reading. Most of them are on my pending list, but I hope to mend it soon as I finish my Masters. 

Programming Style and Attitude

Code Complete by Steve Mcconnell 

During graduation I was presented to the Software Engineering text books written by Pressman and Somerville. That make thought  that doing good software was a simple task. It was just a matter of having a good, well documented and dogmatic process and everything would be fine. This book showed me the light.  The success for a software project depend on the quality and attitude of the developer team. This books teaches about good code style and practices, truths about software development and programmer ethics.
This a mandatory reading  for sure!

Clean Code by Robert C Martin

It is on my queue. I've just read until the beginning of the 2nd chapter. But it is clearly a good book about coding style. It comes  with tons of code to be read. The author presents why it is wrong  and how would it be better rewritten. 

Object Oriented Programming

If you think OOP is just about inheritance, polymorphism and composition, you are very mistaken.  Design Patterns are clever solutions to common problems that appear during design. However, they are more than just recipes or how-to's. Learning the patterns really teaches you to efficiently use the power of OOP.

Refactoring by Martin Fowler

You create some good design. Then you code. It is wonderful. Then you see a bug, and fix it. Then you add one more feature. Then another bug fix. You code start deteriorating, "smelling"  Martin Fowler would say.  This book is about reverting the game.

Design of Algorithms

Introduction to Algorithms by Cormen et al.

This is the book about algorithms. If you had done any serious CS course you have already heard of it.

By the way,  Professor Leiserson's lectures, one of authors of the book are available on the MIT OpenCourseWare 

Effective Series

You must be able to solve a problem independently of the programming language. You must also be able to choose the language according to the problem. If you are doing kernel programming you are probably gonna use C. But you are gonna use Python or  Java for an user application.  Anyway, once you choose the language you ought to know how to use it efficiently 

1 comment: