Day: January 10, 2017

Everyone has preferences. Chocolate over vanilla, rock music over country music, and so on. Never is that any more apparent than in programmer’s preferences for programming languages. Often it is for the language that they learned first but then sometimes you find a programmer who has found another language that is so much better for the task at hand that they becoming a fanatic advocate for the new language.

I am a connoisseur of programming languages and after forty years of learning as many new languages as I could put my hands on I have finally had a revelation. Programming languages all have strengths and weaknesses. These vary greatly from language to language. Problems that programmers set out to solve have a wide variety of attributes. Some languages are better for solving some problems than others.

Now given any particular programmer, you have a fairly unique set of languages that they know and problems that they are comfortable solving. This influences their preferences for languages. They will, in fact, be more productive using a language that fits the problem they are trying to solve and is familiar to the programmer.

However, it is the mark of a master programmer to examine the problem at hand and pick the language to write the solution in based on the characteristics of the problem. This is particularly rare because many companies allow management, that have only a vague understanding of the issues involved in writing a significant piece of software, determine which programming language the programmer will be required to use.

I tried to come up with some pithy analogy to illustrate how wrong this is but it is so uniquely and totally wrong that I could think of no analogy that came close to illustrating my point.

The root of this problem stems from the mistaken belief that there is one language that is the best to program all problems with. I think that is fundamentally mistaken. If you read the work of Kurt Gödel he proved, somewhat paraphrased, that a formal system could either be consistent or complete. Programming languages are by definition consistent. Therefore, they can not be complete, which is to say, that no one computer language can express the solution to all problems.

Management means well. Most people do. They want to do their job to the best of their ability. They think that by insisting that their programmers use this or that language, they are reducing the risk of failure. In fact, they are not. They are increasing the risk of failure by limiting the domain from which solutions can be gleaned.

This is not to give the programmer carte blanche to use any language they like just because it is exciting or they are comfortable programming in it. Rather the programmer needs to be trained to recognize the relevant attributes of problems and how to evaluate programming languages to find an appropriate one to use to solve it. In short they need to be experienced professionals.

The situation is made even worse by the fact that, while we wouldn’t dream of having an automotive engineer design an airplane, we somehow have the idea that any joker can write software. It’s true. Anyone can write a program. The quality of the program that they write will vary greatly with their experience and aptitude though.

When I joined the company where I work some twenty five years ago, managers did not have computers. Anything with a keyboard was considered secretarial work and beneath their station. This has changed as the old school managers have retired one by one and been replaced by a spreadsheet wielding younger generation.

I think the next big paradigm shift that needs to happen is to realize that programming is an engineering discipline deserving the respect of any of the other engineering disciplines. Not only that but it needs to be understood that being trained in one of the other engineering disciplines doesn’t automatically make you a good programmer.

Sweet dreams, don’t forget to tell the ones you love that you love them, and most important of all, be kind.