There was an interesting analogy that compared the art of computer programming with carpentry which highlights the problem many people make when discussing knowledge of different computer languages.
“If a carpenter goes to a job interview they are never asked – how good are you at working with spruce pine, it says on your CV you worked with Table Mountain pine, but without knowledge of spruce I don’t think we can employ you”. This anecdote is to highlight that the computer language is not important – it is the mindset of the programmer.
There are 3 principle classes of computer program language: procedural, object orientated and functional programming. It is not important here what the definitions are, only that a computer programmer must have knowledge of these and the ability to work in a language type that matches the type of software to be written, and that the writing style is used for the task in hand.
There are multiple different programming languages; ranging from machine code, through C to the high-level languages like Python. The choice of language to use should be made on the bases of the task at hand, can it be maintained, how “mission-critical” is the process and complexity/size of the data. There are of course many other aspects to programming that define the language and style of programming and I have 15 aspects that I consider when interviewing. Notice here I don’t include the idea of what language the programmer knows, except maybe understanding the differences of the three principle language types, and when to use them.
So, what makes a good programmer?
This is the $64,000 question. Universally, programming is about logic and algebra. You are describing an action by a symbolic language; this is mathematics and requires the ability to construct an algorithm which contains a mathematical numerical solution to a problem which is robust and performs well. The next biggest universal requirement is not necessarily understanding what should happen with perfect data, but what happens when the user gives you wrong data – i.e., don’t crash. Next comes performance and how that scales with the size of the data (big O) and these concepts tie in closely both with the computer language and the ability to think outside the box. Other criteria include the subject – the domain of the data; Dotmatics is a life-science company involved with analytics, big data, data management and process management. Finally, there is the “mission-critical” component.
One thing I think is important for the special case of big data, particularly considering biology data, is that a good programmer needs to understand the principle of machine code, micro code and hardware. This allows them to understand the best way to manage memory, address data and move that data around a computer to avoid bottlenecks in a calculation; how many times have we seen that an algorithm performs well until you reach a certain data size – that is why!
What makes a brilliant programmer is the ability to think outside the box – to redesign an algorithm from the ground up, to second guess the customers requirement when they realise “oh – we did not quite mean that”; keeping one step ahead of the customer.
The computer language you know – not really that important is it; or maybe it is, watch this space...