I am trying to decide what programming language to learn next. Couldn't think of a better place than HN to ask for recommendations and start discussions about programming languages.<p>I've worked on ruby/rails for over a year, so that's the language I'm most comfortable with, but these days I work on C and PL/SQL. I'm trying to pick up a language that's very different from the ones I've worked with. Here are the languages I'm considering:<p>Erlang/Haskell/Common Lisp: Understanding functional programming would be a challenge, coming from ruby's object oriented world and these languages seem the top contenders in that category.<p>Scala: It's has both object-oriented and functional features, so will it be easier to catch up with functional programming in Scala than with a purely functional language like Haskell?<p>Smalltalk: It would be fun to learn a language that's been around for over three decades and has had so much influence on the design of other languages.<p>Any other language? Clojure? Go? Brainf<i></i>k? ;-) Tell me what language you think would be most interesting to learn and why you recommend it?
I vote for haskell. There are a couple of great online resources for free[1], and if you are at all like me, you'll benefit immensely from it, even though you never use it directly. Basically it is so weird that you have to learn new ways to think. The cool thing is those weird things end up being applicable in boring ruby/python/c type situations. Also, you start wishing everything had a badass type system, because you start seeing problems that could easily be solved by codifying them to ADTs and letting the type system sort out the rest.<p>1. Learn you a haskell for Great Good -- <a href="http://learnyouahaskell.com/" rel="nofollow">http://learnyouahaskell.com/</a><p>Real World Haskell -- <a href="http://www.realworldhaskell.org/" rel="nofollow">http://www.realworldhaskell.org/</a>
If I decide to pick up a new language, it'll probably be Scala. My only real reasoning for that is because the language is younger, which just seems more exciting. Now, if I could just find time or a reason to start using Scala then that would be awesome. :)
I'd recommend Clojure for two reasons: You'll get experience with functional programming, and you'll be introduced to the JVM at the same time. If you learn Clojure and later want to learn another JVM language, you'll be halfway there.
I picked up Erlang a couple of years ago because I needed to hack on a Jabber server. Never mind the functional aspect; Erlang stands out for concurrency, distribution, and fault tolerance. Several of my Erlang projects have been running, at scale, trouble-free for months. I get a kick out of never getting service alerts.<p>Lisp is another good answer to your question. It's different. And the cliché is true: even if you never use it, your coding will improve if you understand Lisp. (Land of Lisp is a fine primer.)<p>However, with Erlang it has been much easier to find actual projects to do.
Factor, it is a stack based language that is fairly different from the rest of the stack based languages(it counts lisp as one of its major influences. ) It has a good standard library that includes both a web framework and a GUI framework.
Have you think about learning how to write your own programming language. It would give you a deep understanding in topics that would make you appreciate other languages.<p>If you do the exercises till the metacircular evaluator in SICP book it will teach you Lisp and about how to develop a naive lisp-1 interpreter. Its a great exercise.