Programming Language Trench WarfareSun 12 October 2008 by Garry Bodsworth
Once more the Internet is abuzz with another set of articles denigrating C++. The original post by Eric Raymond was linked to from OSNews and had a very considered response here. Each language has its good and bad points, the same as anything on this planet. The ire should be pointed at bad programmers, bad education, bad communication and a lack of cold detachment.
The reason the workman quote came into my head wasn’t a reflection on the programmers making these statements (they are much more talented and prolific than I am). They have obviously been burnt by bad code that they feel could have been avoided if the language was better.
My feeling is that it is always easy to attack something and attempt to tear it down. For something that seems like a scientific field like programming there is virtually no scientific basis for these intuitions apart from anecdotal evidence which is pretty much worthless. All programming languages have good and bad points, some notionally target different domains and some attempt to solve other problems. Some of these problems can involve attempting to lower the cognitive barrier for entry or error rates in less able/interested programmers. A lot of arguments against could easily substitute other programming languages and the articles sound just as feasible.
Noone is ever pleased with the quality of their code, but some programmers use dangerous constructs and are simply not qualified to write code. This can colour your own experience of working with a programming language because the human brain is extremely adept at constructing relationships that are simply not there.
Education is important. Having a good basis in mathematics is always a good start, but also being taught the basis of programming in a language neutral form is extremely important. Also when you get to specific languages you are taught the concepts in a fashion that you can see why and how.
The most important aspect though is squarely on the shoulders of the programmer, it is their responsibility to carry on their own development, mainly due to a lack of professional bodies like what exists in other professions to keep their skills up to date. When these two elements align hopefully a programmer can think critically when given the time about the underlying basis of what they are doing.
Inability to articulate reasoning for decisions is obviously bad, but that isn’t the biggest problem. It is political communication where attempting to win an argument is done through negative methods. Whether it is true or not it is damaging anyway and obfuscates any real issues that could be addressed.
A lack of cold detachment
This is seriously difficult to do. We are all guilty of these and it takes a massive amount of effort to achieve. You have to ask yourself what are your goals? To seek out the truth or to win the argument at any cost.
I’ve programmed in a number of programming languages and they all have good and bad points. If someone says there is a bad point about one of them with good reasoning then I either find a workaround or no to avoid it. That is purely pragmatic and does not on its own make a bad language, and even a long list of these does not do so, because each one can have a list just as long. By removing your own personal gut feelings from the equation you can see that any argument is just wasting time from presenting good and solid solutions to problems.
Even statistics can be manipulated to say what you want by loading the test. I have seen massive differences in synthetic benchmarks when compared to real-world applications, which normally comes from creating the benchmark when you already know the result you want to see.
What would be good would be a programming wiki where people looked at the problems and then provide answers to make programming better. I guess this sounds to me like peer-reviewed papers so maybe a better way of accessing good quality papers and knowing their quality.
After all providing solutions is what programmers do, right?