Which programming language should I learn next?

I have a problem: I know quite a lot different programming languages (you can read my list of the best 9 books I have read about programming), but I am proficient only in two. I'd love to choose a few to concentrate and build my skills up, but I don't know which. Read on for background and possible candidates.

Since I discovered there were different programming languages, I've liked learning different ones. It is the same with languages, I love learning new languages.

But I have focus problems, and after a while I just give up and forget half of what I learnt. I can write in C and Lisp without much problems, except for looking some function up in the Lisp Hyperspec and a recurring forgetting of how do is used. But my working knowledge quickly decreases:

Awk: wrote several scripts to solve some problems, but could not write anything out of the cold. Useful enough for what I do in awk.

Bash: wrote more than a few scripts. As bash is not hat deep I guess I know enough for my uses.

Forth: wrote a little to see how it goes, but not enough. I like stack based languages.

Java: I have a little working knowledge and a small cheat-sheet I wrote and used. I had a course on databases where we had to write a mail back-end (SQL) and write accessing user code in Java. Learnt enough to do it, no more as I had no time back then.

JavaScript: wrote several naïve scripts. They work, but are pretty amateurish.

PostScript: wrote a few programs and a small tutorial. Used too little to work from scratch, but enough for what I actually use it.

Python: wrote a few small programs and read a few times a book. Didn't code for long enough to write programs out from scratch.

I want to pick one language from this list or new (or a few, no more than 3) and really get into them, up to being able to write code out of the blue. If possible, not too amateurish code. In my free coding I usually do fun things... I have half a raytracer and half a SIRDS generator, both in Lisp. I also have an image approximator by triangles, stochastic, in C. These are slow programs, requiring quite a work of optimising. Now, I don't know which languages I should choose next, less in view of what I use them for. General usefulness is welcome (if I can get something out of a language I learn in my free time, the better). Here are the options I am considering, together with pro's and cons. If you think something is missing for your favourite language, please tell me so!

I consider being hyped as a pro feature, because it means it has a wide array of developers and documentation, not because I want to learn the top of the wave language right now.


Pros (Clojure): It is a Lisp based language, and this means that I have a great deal already learned. It is also being hyped and talked about. I have already written some kind of hello world program in it, in my post And 'e' appears from nowhere I approximated e using Clojure. Google Trends indicate the language is currently in a local decline from an increasing trend.

Cons (Clojure): But I know very little Java, thus I could not get the full power of the language straight out. Also, I don't know what I would use it for. How fast is Clojure? How does its memory management work?


Pros (Factor): Factor is a Forth like language with a deep set of libraries. It is currently being actively developed.
Cons (Factor): I feel like I don't know enough of he 'mother' language, Forth, to switch to a derivative. Not enough volume to show in Google Trends.


Pros (Go): Written by Google and actively developed. Much hyped. It is very much C-like.
Cons (Go): Google Wave was killed, it could also happen to Go. Also, I guess pure C would be faster for a C-like compiled language, thus I could use C instead. Google Trends doesn't seem to indicate it is very interesting. A big spike on anouncement and a bumpy constant curve afterwards.


Pros (Ruby): Hyped a lot. Looks like everyone around is using it for something. Steady constant curve in Google Trends.

Cons (Ruby): As of now, I don't even know if it is compiled or interpreted, or what it is good for.

JavaScript (in depth with jQuery and node.js)

Pros (JavaScript): I could write a few iPhone apps I have in mind in JS. I know a little JS already, and it is pretty much an interesting language.
Cons (JavaScript): Too much work for too little output, maybe. I don't even know if there are good references for in-depth Javascript, or for jQuery/node.js. Declining (heavily) in Google Trends, but jQuery and node.js are rising strongly.


Pros (Python): From what I already read and programmed, it feels like a wonderful language, very thought out. His creator even has a beard!
Cons (Python): I don't know what uses I could put it for. Speed would be an issue for a lot of programs I may write, but not for all of them, of course. Slight decline in Google Trends.

Thus, what do you suggest? If I was to choose right now, I would probably pick Python, Forth and Clojure (although I'm afraid of how much Java I need for it). Which one would you pick? Or which 2-3 languages do you suggest for me? Do you think 3 languages at the same (probably not same as in the same day or week) time are too many?

Written by Ruben Berenguel