Wednesday 9 November 2011

What makes a good programmer? (software developer)

The CEO of one of my former employers was interviewed on the radio recently and made a statement about programmers with which I fundamentally disagree. He stated that mathematics is “absolutely essential” for a programmer. Later in the interview they returned to the subject and he agreed with the suggestion that it should have “double points” for the leaving cert.

I have been working in software development for over 30 years and I have never found a significant use for the mathematics I learned in secondary school or in university.

He may have meant that that the people who are good at maths would also be good at programming (although this is not what he was saying). Even in this I would disagree. I was discussing this with one of the best developers I know and he said “he should take a look at my leaving cert maths results”.

I remember the MD of my first employer (there were no CEOs in those days) telling me that he believed that the best developers were the ones who had worked with punched cards. He believed that being able to see and touch the data gave the developer a more visceral understanding of it. He believed that seeing a card sorter in action gave the developer a deeper understanding than just being able to say “order by region, country, city”.

I disagree with him also.

The thing that makes is good developer is the ability to visualise how the code will run: effectively to have your own emulator in your head. You can hold a picture of the code in your head and step through it in your mind so that you can compare what you were trying to achieve with what is actually going to happen. The skill is to be able to juggle lots of “what if” ideas in your head at one time. It requires and orderly mind and intense powers of concentration. It requires the ability to constantly challenge assumptions. It appeals to problem solvers.

And because this ability to “imagine” the code is so critical, I don’t think we need to see physical cards holding data and you don’t need to see them being sorted by a machine.

The most experienced and skilled developers will sometimes be dissatisfied with a piece of code because it doesn’t feel right or because they judge it to be insufficiently elegant. This desire for elegance sets the best developers apart and can apply to everything from a single method to the architecture of an entire solution. There is a point at which programming is much closer to an art than a science.