One of the common questions that comes up among students new to Computer Science and Programming is along the lines of “what is the best programming language?”. And the the brief answer to that is simple:
You’re doing it wrong.
This requires some elaboration. When one asks “what is the best programming language to learn?” or “what is the best programming language to build video games with?”, it seems that the intent is to get some experience with one specific technology, and stop there. That is a failure of an approach.
A programming language is a tool. Tools have specific purposes. Tools change. New tools, technologies, and techniques becomes available. It doesn’t make much sense to specialize in wielding a hammer over a screwdriver, if one lacks the core skill of following assembly instructions. However unlike this construction analogy, technological tools change rapidly.
“Java will guarantee a corporate job”; “PHP is required for web development”; “Ruby is growing at 400% per year”. A lot of people claim to have a solid idea of where the industry will be and are quick to offer advice, but this can’t possibly be the case. All of those languages — Java, PHP, Ruby, have first appeared in 1995. This means that all the hype that you are supposed to “know” right now, didn’t even exist just 13 years ago. So if you plan on sticking to your favourite high school programming language, chances are that by the time you graduate from a University, you’ll show up at the playfield with a wrong type of bat, so to speak.
Higurashi no Naku Koro ni (episode 9)
But then the question still stays: “what should one learn next?”. Algorithms, data structures, complexity, math… Learn the core abstracts, ideas, and skills that are language independent, and that transfer from one syntax to another. Learn the ability to learn. When a new opportunity with new technology comes along, you should be able to get over the learning curve fairly quickly.
So your “best language”; your “most important programming language to learn next” is the one that will help you do the above. As a tool. As a palette with which to express and explore your ideas. It might be one with the cleanest syntax, or the most documentation, or one that you are already familiar with the most.
It wouldn’t make sense to pick up a yet-another-programming-language just to be able to do what you already can, only with a somewhat different syntax. It’s useless to write the same basic sort in 12 different languages, if all of them are too slow to finish in a reasonable time. Worse yet if you don’t understand why this is so.
So lets drop this obsession with learning to say “hello world” (or some more complicated version of essentially the same) in every programming language one can name. Lets also drop the idea of finding “one language to rule them all; and retire”. Once we put the Science back in Computer Science, it wouldn’t matter which language you’ll end up using.