Scott James Remnant explains his view on C programming versus C# or Python programming. I’d like to comment on this topic too.
I feel that in theory he’s wrong: low-level programming is inefficient respect to high-level programming. But in practice I think he’s right: a software coded in a low-level language is better respect to high-level language.
What’s the difference between theory and practice? What is the variable that renders the theory inefficient in modeling the truth? My hypothesis is that the amount of skill that programmers have depends on the level of the language. In articular, a random low-level programmer is probably more skilled than a random high-level programmer. This depends highly on the entry-level amount of skill that a programmer must have in order to define himself a programmer of a particular language.
By “skill” here I mean programming expertise in general: the ability to write elegant and robust code, implement efficient software solutions to problems, and predict possible future obstacles. I hope that most programmers that worked with different languages agree that there’s a common ground, something that you learn and that can be applied to many (if not all) languages and technologies. A programmer needs time to achieve this experience.
In order to be able to write a medium-sized program in C, the amount of time that one must spend, starting from zero, is considerable. When you start programming in C#, maybe even with some visual tools to ease the design of your application, the amount of code you need to write is small, and the amount of time you need in order to create a complete program is small. So, if you have two programmers who can develop a program that opens a window, accepts user input, does some sorting and saves it on a file, the C# programmer spent less time coding, thus having less amount of general programming skill.
Be aware that I don’t mean that all C programmers are better than C# programmers, I mean that the distribution of skill in C# programmers has a tail of mediocre coders. When both C and C# programmers reach an “expert” status, having coded for years in their respective favorite language, the difference between them is that while the C guy spent a lot of time on memory leaks, portability issues and optimizations, the C# guy was busy reviewing class diagrams, adding support for extensions, fixing multi-threading issues. They simply raise different personal stats. One is a code warrior, the other is a code wizard. In most software groups you need both wizards and warriors. You need someone who has an abstract view of the problem and someone who sees implementation problems in advance. The correct balance of the group depends on the monster that must be vanquished. Large programs are best written in high-level language because high-level programmers are better at abstraction. Small crucial programs should be written in low-level language because you need to keep an eye on stability and performance.
In conclusion, once you have a good coder in your group, language doesn’t matter. But the sea of high-level language programmers is full of fishes and finding a good one is more difficult.