The Future Of Programming?
One of the things I've been thinking about lately and in the past years is the direction programming is heading as a whole. I don't think I'm alone in thinking that the field has been getting more chaotic since its birth and the speed of this process is accelerating.

Computer science is a relatively new field of science and the modus operandi has almost exclusively been a sort of a cowboy, wild wild west way of doing things. The one who gets there first claims the prize and defends it. As computer science is half about doing real science and half about the art of applying that science, I won't be touching the former part. Science works and the scientific method is unquestionably valid. The more interesting and as I said chaotic part is the art of programming.

Chaotic is a strong word to use, but I really do think it describes best whats going on. I feel wrong every time I see a new serious programming language introduced or a new serious library being announced. Comments like 'this new tool is great for my purposes' or 'this new thing solves my problem better than the old thing' send shivers down my spine. What is wrong with new and better technology being put out to use? Nothing. The problem lies in the way the process is done. It doesn't matter if the new technology gets used or whether it shrivels away – it always introduces more negative diversity. At least in the case of programming.

The worst are new programming languages. Think of programming languages as a forest of trees that each represent a language. Each time someone plants a new tree (creates a new programming language), it leeches energy from all the other trees in the forest thus not allowing them to grow to their full potential. Each tree looks a bit different than the others, but they all still do the same thing in the end. One might have functional leaves, one might have object-oriented leaves. One has imperative branches and one has a declarative trunk. The big problem with this in my mind is that there is no cultural value attached to these languages, only practical value. Programming is not poetry, the end result is the same no matter what language you describe the solution with. The true problem comes down to the issue of verbosity vs. terseness of the languages (which is an interesting subject, but out of scope for this rant.)

Languages are a tool of communication. Natural languages and human communication is endlessly complex but programming languages are needlessly complex. Humans communicate emotions (which there are almost an infinite amount), computers communicate data (exactly two things: ones and zeros) and programming languages communicate exactly three things: algorithms, data structures and input-output processes. To top this off, programming is the only thing in the universe which us humans have created from nothing. Once we cross over from hardware to software, we enter a sort of a Matrix -style virtual world which is in our total and complete control. Why is it then that we solve the same problems over and over again?

Pretty much the same exact thing is happening with libraries. Think of any problem that can be solved by a library and you'll find in most all cases different implementations in different languages and usually many implementations in the same language. I think this is total madness. They all solve the same problem. The true differences are in the algorithms and data structures chosen but all other differences are just cosmetic. The forest analogy fits here as well as to the programming languages.

All this negative diversity creates incredible amounts of overhead and a huge necessity for plumber programming – making different inputs and outputs fit to other inputs and outputs. This plumbing is subject to the same problem as well; it's being done over and over again with different cosmetics. With all this overlapping programming going on, is the following really such an huge leap of faith? One programming language, one set of libraries and one operating system.

While that may sound like something Hitler would proudly say in a Nazi-rally, the positive implications are almost mind blowing. Jokingly I think it's the grand unified theory of programming, in a sense. Think about writing a program in this utopia: almost no need to worry about backwards compatibility, almost no need to write plumbing, excellent quality libraries to solve almost any problem in existence, almost all code looks the same and you are accustomed to reading it fluently, language and library updates are immediate and global, almost all bugs become really shallow as all programmers are using the same tools, anything new is easy and fast to learn as it follows the way everything else is written and the list goes on and on.

Now I know that there most definitely is no silver bullet solution to rule them all. This is not what I am talking about. I'm talking about unification and globalization of programming. Think of it as one huge global repository. It's not about discrimination either as there are pros and cons to every programming style and paradigm. One way might be better for a certain problem but many times worse for another. The point being that the one language should be a multi-paradigm language, combining the best ideas of all languages into a single language that doesn't force you to write code in a certain format. If you think I'm contradicting my earlier thoughts, think it from an interface viewpoint. The way a black box works on the inside doesn't matter if it works.

This system has positive anthropological effects too. Programmers would stop thinking about producing code that has their own personal stamp on it and start thinking about contributing to the programming world as a whole. Democracy over the best solution wouldn't be an argument over cosmetic differences anymore but a straightforward statement of facts and the problem of verbose vs. terse would balance itself to an equilibrium over time.

Life would be peachy for us programmers, but it's not without fault. The biggest problem is that all this needs something to base it on, like a constitution, and constructing this would be a massive undertaking. Maybe even an impossible one. The amount of ethical, moral, sociological, technical and political questions this constitution should answer is immense. Other issue is how to divide and bridge the computer science advances into this system. New experimental languages and ideas should be developed and encouraged, but kept out of this system until they are proven to have real value instead of being just what new programming languages mostly are.

These are bold suggestions and hard questions, but I'm certain that there are people who think the same way. I would love to hear some comments and criticism on my ideas and maybe even start some further discussion about it. I think its time to start thinking about the big issues more sensibly. The amount of software and code in the world is going to increase at a faster pace the more we advance and at some point I think what I'm proposing is going to be inevitable.