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.
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!
Disclaimer: 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.
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?
9 programming books I have read and somewhat liked…
C code juicer: detecting copied programming assignments
Cron, diff & wget: Watch changes in a webpage
8 reasons for re-inventing the wheel as a programmer
Approximating images with randomly placed translucent triangles