These notes are rather sketchy and mainly to myself to remember.
For your convenience there is the video, so you may either listen or read below it.
To be useful computer language should be popular, productive and do its job.
There is however contradiction between the productivity and ability to do every job.
For example, to work with hardware directly, we should sacrifice the garbage collection.
However in the developing the large application the garbage collection drastically speeds up the development because more programmers are able to develop reliably in the presence of the garbage collection.
Another requirement for the computer language hierarchy is that the same person should be able to switch easy between the languages depending on the kind of the application he/she develops. It means that languages should be as similar by the syntax as possible and should be specially designed to work together.
So what we have now.
- For the raw hardware related development it is of course C. However it is very difficult to develop the large application with C because it does not have the classes.
- So the second level is the large applications that interact from one side with C and from other with the interface. Here we have C++, Java and Python. The advantage of C++ is that C is its subset. Now wonder that C++ domains are now the operation systems and embedded software, where this feature is the most important. However, the absence of the garbage collection can kill C++ because the programmers who really can develop reliable large C++ software are rare and expensive. Java is less compatible with C than C++ and Python but has more elaborate classes than Python and better interacts with the interface. So now Java is more suited for the developing large and inexpensive application for the end users. Both Python and Java have the garbage collection.
2.1. There is also the class of the utility applications that don’t need beautiful interface and are not large. Here Python is the obvious champion by productivity. It actually more close to C and C ++ than Java. Java by the way is misleading for C (and C++) programmer because its “.” is actually “->” in C. So from the C point of view Java uses mainly pointers and not the references. Python is also specially design to interact with C and C++.
- Now we come to the interface and here I really don’t know what language is the leader. In view of the drift to the cloud computing however we may assume that the future interface will be built with the browsers that interact with the applications via the web servers. If it is so we have PHP and Java Script. Java Script has the advantages that it is the language of choice to interact with the browsers. As for the data, it seems may use Ajax. As for the web page generation, Java Script also works.
I noticed that my choice of languages coincides with the languages allowed in Google for its developers (C, C++, Python, Java and Java Script). But at least I hope that now I understand why they select them.
And what is future? May be D. D may be good because I trust people that develop it and they are experts in C++. However it depends whether D ever become popular. It may happen because its multicore applications ability. But who knows, may be C++ is still able to add the garbage collection and multicore?