Hacker News new | ask | show | jobs
by zenshade 4568 days ago
After programming for 30 years (and upwards of 20 languages) I've come to believe that you really only "need" to learn 4 languages to complete your Jedi programming skills and become a master. You need one each from the following categories:

"Machine" language - this is anything turing complete that's close to the hardware, ie that forces you to think about and understand the underlying circuitry. Candidates: Assembler, C.

Static/Imperative "Object" language - put this one off for as long as you can, for it is easy but not simple, and will ensnare your mind with the belief that you are special because you are among the elite priesthood of programmers who can grasp levels of complexity mere mortals dare not even dream of. Down this path lies years of frustration, all in service of the darkside. Chances are that this category will be forced upon you first, by naive, shortsighted fools who little realize the evil they are spreading. Learn only what you need to disable the tractor beam and escape with the Deathstar layout, so that when the time is right a well planned rebel assault may remove this abomination from the universe.

Candidates: there are no candidates here, as that implies choice. One of these languages will be heaved upon you whether you like it or not - C++, Java or Visual Basic (if the darkside is particularly strong in you).

Dynamic "scripting" language - this is for that category of problems where most of the needed abstractions are well understood and well tested. Using them should involve as few words as possible.

Candidates: Ruby, Python, Perl, Lua, bash (or any bourne shell derivative).

And finally, what should be every programmer's last language,

A "language" language - these are usually known as Lisps, but I think both Alan Kay's original bootstrapping Smalltalk and Forth are acceptable here. The key feature is having a small core of concepts that can be infinitely composed into higher abstraction commands that are treated no differently from the compiler's perspective. Once you have this power, all of the interesting behaviours of languages like Haskell, Erlang, Prolog, etc, are available to you.

Candidates: Scheme/Racket, Common Lisp, Clojure, Smalltalk, Lisp.