I've recently been feeling the desire to learn a new programming language. The last language I learned on my own (not directly for school or work) was Python, and that was 7 years ago! In that time, I've learned Common Lisp for my Artificial Intelligence class, Torque Script -- the scripting language for the Torque Game Engine -- for my last job, and Java for my latest job. I do feel some desire to get back to Lisp, but I'm also drawn to other languages.
Looking back, I think there were a few factors that lead me to learn and stick with Python:
Between a well-designed language and a great standard library, I was able to produce something that was useful within my first afternoon of learning Python. It's an entry for another day, but suffice to say, in that first afternoon I wrote the first iteration of a small utility that I used every day for 3 or 4 years.
A great community. I had some questions and I found #python (which was on irc.efnet.org at the time) and there were a lot of very helpful people there that helped me with my silly questions.
From that, some of my main interests in learning a language or program ultimately boil down to these two things:
- Is there sufficient power and ability to do something that is ultimately useful to me?
- Is there an active community behind and supporting the language or program?
That said, it sometimes goes against something Alan Perlis (from Perlisisms) said:
"A language that doesn't affect the way you think about programming, is not worth knowing."
In congruence with this, Eric Raymond, in How To Become A Hacker, said this:
LISP is worth learning for a different reason -- the profound enlightenment experience you will have when you finally get it. That experience will make you a better programmer for the rest of your days, even if you never actually use LISP itself a lot.
I do love learning new things that make me look at problems differently. But, unfortunately, my laziness as a programmer has made me ultimately follow what Eric Raymond has said -- I learned Lisp, I got it, I loved it -- but I never use it.
So I'm conflicted. On one hand, I have projects that I want to do -- useful things I want to write for my use. On the other hand, I want to learn something new, something elegant. So there is that conflict between utility and beauty.
That said, I'm trying to start to learn something new. I'm looking at two languages now, each with an active, helpful, and intelligent community behind it: Haskell and Factor. Each has an active channel on the IRC network irc.freenode.net (#haskell and #concatenative respectively). I've started reading the tutorials and writing a little bit of code. Haskell is a pure functional language. Factor is stack-based. Neither paradigm is something that I've done anything extensively with, so there is a bit of a learning curve.
Now all I have to do is come up with something useful to write so I can meet my first criteria above. I'll probably be writing more about what I learn of each of these languages.