Skip to content

Programming Languages

I developed this simple clasification of programming languages that is of no much use I guess. Perhaps it is inspired from the toothbrush clasification (hard, medium, soft):

  1. Hard languages: C and C++
  2. Medium languages: Java and C#
  3. Soft languages: Perl, Python, Ruby
  4. Exotic languages: Lisp, ML

The Hard languages are the oldest. They can reliably be used for any task, and are best suited for the largest programming projects. These are the languages in which are written Operating Systems and Database Servers. They use static typing. Many checks are done at compile-time (not at run-time). The advantages of C over C++ are lightweight-ness, portability, and easy bindings from any other language. The advantages of C++ over C are: classes (OOP), STL, Templates. For new projects one should generally choose C++, except for low-level libraries (like SQLite, Apache httpd, zlib, etc) which may benefit from C. On the down side, Hard languages are difficult to master and have the lowest productivity.

The Medium languages are very close to the Hard languages; maybe they can even be considered the ‘third-generation’ hard languages (C++ being the ‘second-generation’ hard language). They also use static typing like the Hard languages, and they do many checks at compile-time. They can handle large programming projects. New relative to the Hard languages, they bring: Garbage Collection (GC) and Reflection. Java doesn’t have macros and Templates, and is controlled by Sun. C# is strongly linked to .Net and is controlled by Microsoft. They are more accessible then C++ (because it’s harder to make programming mistakes) and are a little bit more productive (mainly because of GC).

The Soft languages have dynamic typing, meaning that the type checks are done at run-time (not at compile-time). They are very productive. They are best suited for small-to-medium projects; their dificulty with large-projects stems mainly from the lack of compile-time checks. They allow new programming techniques and idioms that are impossible in the Hard languages (e.g. adding methods to a class or to an object at runtime, defining classes at runtime, etc). They are usually interpreted, and typically they have slower run-time performance than the Hard languages.

The Exotic languages offer interesting programming techniques. They are useful for developing one’s mental flexibility, and offer a deeper understanding of various programming concepts. So their role is mainly educative and explorative.

Post a Comment

Your email is never published nor shared. Required fields are marked *