I like the simple approach taken by John Ousternhout on something that people fancily refer to as “Ousterhout’s Dichotomy”. In essence: high-level computer programming languages are separated into two groups: “system programming languages” and “scripting languages”.

The thing is that it is difficult to define something as a “script” – is C# or Java a scripting language?

On a correlated subject I came across a rather old post from Linus Torvalds in which, despite of the tone, some interesting points came through -

If you have to be concerned with numbers and numbers of abstraction layers, a language is not adequate as a system programming language. Even though abstraction layers simplify programmatic representation, they of course reduce traceability (why is this not working?) and performance. That would rule out C++ as a system programming language, and any other object-oriented ones. We could rewrite that and create our very own “Quick and Dirty Dichotomy”:

  • System programming languages: fast, real-time, strongly typed, natively compiled, features designed towards interaction with lower-level assembly and hardware drivers: C, Pascal, Fortran
  • Application programming languages: fast – although not real-time, just in time compilation, features designed towards productivity and code production in large scale, support abstraction enhancing features like object orientation and loose-typing: Java, Python, Ruby, C#

Where exactly does C++ fit in? — I hope that does not qualify me as a dinosaur…