September 06, 2019

Is Programming in general obsolete?


Many blogposts were written about certain programming language who are outdated. There are rants available about Java, the C++ language, Python and of course many rants were written against Forth which is an esoteric language used in microcontroller programming. It's some kind of sport to critize all these languages and especially it make sense to explain why the C language is no longer recommended.
The question remains open, if Python, C, C++ and Java is all obsolete. And if new developments like Go, Ruby or Javascript doesn't fulfill the needs of the programmer, what is the programming language of the future? Instead of an answer i'd like to formulate it as a hypothesis. Programming in general is outdated. That means, in a world in which operating systems, games and applications are already written and programming is some kind of mainstream, there is no reason why somebody should learn programming.
To explain this paradox situation we have to go some years back. In the late 1980s, programming was a must have and was equal to using a computer at all. In the early 1990s, programming has become more important because this was the time of commercial software development. It was the area of object oriented programming. Languages like C++ and Java were widespread used to create large amount of software. Today there is the situation, that all the software is written already, and many programming languages were invented. The problems which have to solved in the future doesn't have to do with programming.
This sounds a bit uncommon, because programming was the answer to everything in the past. Let me give an example. In the past, the users had a certain need for a game. This specification in the 1980s was, that the game should provide smooth scrolling and a fancy background sound. To solve the issue, the game was programmed in the C language and this solved the issue. In the 1990s the needs were slightly different. A typical need in the 1990s was, that no webserver was available to deliver html documents. The answer to the problem was again to write a webserver. This time the language changed to C++ and it solved the problem too.
Today we have the situation, that with modern languages like C++, C# or PHP it's very easy to create all sorts of software. No matter if the project is about a game, a webserver, the script of a website or a desktop application. There is always a best practice programming language which can solve the issue. From a technical point of view, the existing languages like C++ and other solve the programming problem better than ever. And at the same time, the need for programming software is no longer there.
Software programming was the core discipline of classical computer history. It was located within commercial companies like Microsoft and was discovered by amateurs quickly. With the Python language it has become within the reach of a programmer newbie to create his own Desktop application within 1 month. And if doesn't like to write the sourcecode by himself, he can buy all sorts of the software in the Windows app store which was created by experts. But how exactly are software and software programming tools able to help current needs of computer users? Or to formulate the question the question quite different. The computer world in the past was dominated by programmers who have written software for non programmers. In the current age, everybody is a programmer. But the programmers believe, that there is a knowledge gap.
Perhaps a small example make sense. Suppose somebody is fluent in 2 programming languages because he has realized a practical project. The languages are Java and Python which are both excellent languages. Now the person is attending a university and tries to utilize this knowledge in a teaching experience. He has to search for newbies who can't programming at all and who likes to learn at least one language. Does the programmer finds non programmers at the university? No, that is not possible because programming is part of the mainstream culture and become familiar with Java is not the exception but the normal case. That means, there are 100 computerstudents who are all Java programmers but nobody in the class likes to learn Java from somebody else. As a result, the knowledge gap is no longer there and the situation is different from the 1990s.
The answer to the problem is to search for a new kind of knowledge gap. Is there a discipline available in which the wisdom is located at a few wizards, while the mainstream is not familiar with new technology at all? Sure, such a discipline is available but it's not called programming. Programming has become very democratic, that means, everybody is able to answer questions at Stackoverflow. Using a compiler or an interpreted language is no longer an esoteric discipline which is teached seldom, but it has become the precondition for computer science.
The reason why is simple: At first, since the 1980s the education in the school and university has changed a lot. Today, it's normal that all students, even if they don't like computers very much, are forced to learn a programming language. That means, as default 100% of the students have programming experience. Mostly in Java, but sometimes with other languages too. Secondly, the amount of documentation and programming languages have grown. Youtube offers thousands of introductionary courses, so that even if somebody never attended a computer course in the school he will learn to program by the way. And last but not least, the OpenSource revolution has reduced the entry cost for a programmer downto zero. The lastest LLVM compiler and together with the Python environment is available for free download in the internet. In the sum, there are no longer obstacles available which prevent somebody to learn programming. The result is that the discipline has become democratic. That means, everybody is able to write a moderate complex program.
It is a bit funny to read introduction chapters in programming books. They are trying to motivate the people to learn a computer language under the assumption that the knowledge about how to use the C++ compiler is a secret. This was true in the early 1990s because in that time, the C++ costs thousands of US$ and only a few computer users had access to that technology. The situation today has changed. Or to explain it from a different point of view. A technology can only be invented once. Learning programming in the early 1990s was an advanture and was recommended strongly, today it has become the normal case. We have to search very intensive to find a student who is not familiar with programming at all. I would guess on a normal university all students are able to program because it's part of the normal curriculum similar to speak English.
To answer the question from the beginning. The question is not if C, Python or Java is the better programming language, but the idea is to ignore programming at all and search for something which is new and exciting. The best way in doing so is to search for an asymmetric knowledge distribution. In the early 1990s the typical situation was, that less then 5% of all computer users were able to program. In that time, programmers were able to do something which wasn't available for normal computer users. It make sense to search for this knowledge gap again.
The reason why programming was perceived as a powerful technique was because it utilized a computer in a certain way. A normal computer user can start only an existing program. Under Windows 95 he doubleclicks on an icon and the computer is doing something. In contrast, the programmer has more power. He defines, what the software is doing. He creates the user interface and writes all the messages on the screen. That means, the programmer has more rights in relationship to a computer. He knows a technique to use the computer in an elaborated way.
It's not very complicated to identify the follow up discipline after programming. We have to ask for some kind of technique which allows to use a computer in a modern way. Are there are wizards or hackers available who have more rights than normal programmers? Or to ask the other way around? Which kind of computer usage is outside the scope of a normal Java programmer? What behavior of a computer is not available for the expert C++ programmer? On the first look a programmer is equal to the master of the universe. He is able to force the computer to do anything. The programmer imagined a new kind of software, and after some keystrokes the program runs on the screen. This is equal to a great power. If a non programmer is trying to do the same he will fail. Even he imagine a new kind of game or a different application he has not enough wisdom to convert his imagination into reality. He needs somebody else who can program the project for him.
Let me give an example. A non programmer has a demand for a database searching algorithm. He needs a gui interface which takes a userinput and searches in the SQL database. The non programmer has no plan who to realize such a project. He didn't even know how java can help to realize such goal. In contrast, the programmer knows exactly how to create the needed application. He has written a Database search engine in the past, or he knows how to create such application with less effort. This is the reason why programming is a useful discipline because it extends the ability to solve problems.
The situation in the now is, that the described case of a non programmer who isn't aware of the Java language is no longer available in reality. It is a look back into the history of computing in which the distinction between programmers and normal users were bigger. In the now, the gap has reduced to a minimum. That means, in reality we wouldn't find a non programmer who doesn't know how to search in the database.
The reason why has to do with a widespread usage of computer technology in all areas. Desktop computers, smartphones, programming languages and courses which are teaching computer programming are widespread available. This is different from the 1990s in which computers were not available for a wider audience. This has changed the importance of programming too. The ability to create new software has become the normal case.