
Which programming language do you want to learn next? - edd_dumbill
http://edd.me/proglangs
======
strlen
Haskell. I know Scala and occasionally use it work (although my main project
is still in Java: it's often difficult to mix languages _at the same level_ in
a project and for many reasons, I'd like to keep as few external dependencies
for my project as possible) and great enjoy it. I also know OCaml and am doing
some hobby projects in it. I've been a Lisp weenie for a long time now
(Scheme, Common Lisp, recently Clojure both at work and in hobby projects).

So, why Haskell if I already know lots of other functional languages (both
statically and dynamically typed ones)? Due to type classes and
lazyness/purity by default. I still find myself thinking imperatively, or
thinking at a lower functional level (e.g., just tail recursion and
folds/map). I'd like to learn to think in a a lazy and purely functional way
and Haskell seems to be a way to get there. Additionally, both Scala (with
implicits and higher kindred types) and OCaml (since 3.12 with first class
modules) do support type classes, but Haskell seems to be a good way to learn
to use them. I've been thinking a great deal about type systems and type safe
DSLs, presently working my way through TAPL. One particular field that
interests me is the intersection of programming languages and systems: can we
do user level systems programing in languages other than C; how can we safely
"hint" a garbage collector to avoid memory pressure issues that happen
frequently in memory intensive applications written in high level languages;
can we use the type systems to ensure application-level code can sustain loss
of consistency or availability (Google for CALM Conjecture for a dynamically
typed Ruby DSL approach to this)?

Finally, Haskell is a great language in terms of _forcing_ myself to think
before I code (Yes, I should already be doing that): you may have a solution
that may be short in terms of lines of code but takes hours to come up with.
Why is this important? That's a great way of improving myself in other areas
of programming: seeing which classes of algorithms solve a particular program,
finding the simplest solution vs. one that comes to mind first.

[EDIT: Forgot to say that _fun_ also plays a huge part of it. It's the reason
I chose on the site (was the best one of those listed there: Haskell won't get
you a job nor is there always a guarantee you'll be more productive with it,
especially right away) and a perfectly legitimate one].

------
cageface
No more new languages for a little while. New algorithms and problem domains
instead.

~~~
nostrademons
Yeah, I went through the learn-every-programming-language-possible stage in
late college and the couple years afterwards. I eventually decided that no
language is going to boost your effectiveness as much as knowing your problem
domain very, very thoroughly. There's a lot of depth in specialized algorithms
that isn't visible to someone in college or a web shop, yet many of the most
lucrative startups come from specialized algorithmic knowledge.

~~~
strlen
In violent agreement with you. Specialized knowledge is how you make your way
out of the enterprise/web ghetto and onto much more fascinating problems,
including in the greater enterprise/web industry: you can think of most of
what Amazon does as enterprise software, yet they've used e.g., distributed
systems expertise to their advantage; where most saw "class ShoppingCart
extends StatefulSessionBean" (and a big fat check for WebLogic and Coherence)
they saw
[http://www.allthingsdistributed.com/2007/10/amazons_dynamo.h...](http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html)

However, I remember a comment you've posted once on this site (don't have the
URL) saying there are no shortcuts to being a programmer: i.e., you _should_
learn several programming languages _and_ you should be a competent algorist.
Some languages also force you to think differently about algorithm design
(e.g., purely functional data structures), which is always a good thing.

~~~
nostrademons
Another interesting thing: virtually all the really high-level programmers I
know have either a PL or OS background. Jeff Dean worked on Cecil. Urs Hoezle
worked on Self. Lars Bak worked on Beta, Self, and HotSpot. Peter Norvig
worked on Lisp. Many of the other senior guys at Google - the ones who
actually understand how all the search engine works, that people go to when
there's a tough problem - worked on languages like Dylan, Python, and HotSpot.

Most of them aren't working on languages _now_ , but there's this blip in the
past of a surprisingly large number of them. I wonder if it's causation or
correlation.

------
neilk
Scala.

I want the power of types and functional programming and Actor concurrency,
but am leery of doing anything practical with languages like Erlang or
Haskell.

Plus, Scala runs on the JVM and is thus compatible with all of Java's
libraries. The day I have to read a UTF8 string backwards I want to use some
standard library, not get creative with a linked list of ints.

Plus plus, the Lift framework looks pretty great.

~~~
strlen
> doing anything practical with languages like Erlang or Haskell

Why do learn it for a specific reason? Why not learn a language to expand your
mind? Scala is awesome, but Haskell will help you make use of some of its more
powerful features. By all means, learn both.

Erlang is interesting and is quite practical too (albeit Scala tends to be
practical in more kinds of problems: there many times where you want an easier
way to deal state shared between processes than ETS/Amnesia). Knowing Erlang
you can make a better decision when to use Scala's own actor facilities and
when not to.

~~~
vedang
I don't have an opinion about erlang or scala, but I agree with the poster
that it is important to do something practical with a language. How will you
learn the concepts that a language tries to teach you without actually
building something non-trivial in it?

~~~
strlen
Oh you can certainly build non-trivial things in the language. It's just you
may not be able to use it for a work project (for different reasons). This is
what I meant by practical: software that you build at work and that operations
will deploy or sales will sell.

There's tons of practical applications built in both Haskell and Erlang:
erlang has rabbit mq (I have some criticisms of it, but they're not related to
the language it's built in), Haskell has XMonad (the window manager I use on a
daily basis). Both are very practical.

------
JeremyBanks
Clojure. I've found my code in other languages looking more and more like
Lispy as time goes on, and my shame at not actually having learnt to use one
well has grown too strong.

------
jcromartie
Smalltalk.

Yes, really. I think the potential for a really sexy open source Smalltalk is
there with Pharo; it just needs a lot of work. But building web apps in
Seaside has really convinced me of the productivity you can gain by tossing
out certain ideas and embracing a very focused and principled environment like
Smalltalk (focused in the sense that it's the only place I've seen OOP taken
seriously; i.e. it's not "OOP, but...").

I'm a big big fan of functional languages, especially Clojure, but the fact is
that UIs are stateful and OO design really works there, and users need UIs.

~~~
jhancock
I've just been writing a small app in pharo the last few days. I haven't used
Smalltalk in 15 years and its coming back very quickly. Pharo is nice but it
still needs polish to get to the Smalltalk I had in 1994.

For this new app, I am using Iliad framework <http://www.iliadproject.org/>
instead of Seaside. I started out playing with Seaside but the code base is so
large I felt I couldn't understand the internals of the framework without a
lot of time invested. The trade off is that iliad has almost no docs and you
have to read the source.

~~~
jcromartie
Neat. So, Iliad is like "Seaside Lite" or something?

------
joshes
Haskell. I feel as though it is a language that I would really enjoy,
regardless of whether or not it fits a niche with my research interests. Some
languages just have that _feel_ about them, I suppose.

~~~
codefisher
Haskell was my answer too, mainly because it is rather different from other
languages I know, so it forces you to think out side the box, and try new
things. Which you then bring back to other languages.

------
gsivil
Common Lisp. I have just started scratching the surface of the language(one-
two weeks so far). The high opinion that many HNers have for the language
played definitely a role in my choice.

~~~
arethuza
I have been contemplating re-learning Common Lisp - I wrote Lisp (along with
some C and PostScript) at work from about '89 to '95. Although I also did web
development from about '93 the two areas never overlapped and when I co-
founded a startup in '95 we were a Java shop - which was my language of choice
for the next 6 years or so.

Inevitably I've spent a significant amount of time over the last 15 years
telling people how wonderful Lisp is without actually using it for anything -
so I'm pretty keen to jump back into using Lisp for Web projects.

------
Figs
At this point, I'm tired of learning programming languages, and would rather
learn how to be more effective with the dozen or so that I've already learned.

------
petercooper
JavaScript. But _properly_. Yegge was right, I believe. It's going to be the
language that defines thks decade, for sure.

~~~
larrywright
I absolutely agree - do you know of any good resources for learning JavaScript
as a language? Most books are targeted at using it to add whiz-bang stuff to
web sites.

~~~
petercooper
I've found that
[http://www.reddit.com/r/javascript/comments/e54i9/what_is_cu...](http://www.reddit.com/r/javascript/comments/e54i9/what_is_currently_the_best_book_for_learning/)
is worth a read for book recommendations. Most of them are on Safari too :-)

Rebecca Murphey's jQuery Fundamentals is awesome (and free!) too once you get
onto jQuery: <http://jqfundamentals.com/book/book.html>

And I know you already know about this, but posting for the benefit of others,
but.. <http://javascriptweekly.com/> ;-)

------
aerique
Qi / Shen.

Having settled on Common Lisp a good few years ago I haven't explored a new
programming language for a looong time (having gone through the phase of
trying out a lot of them before that). However, recently I've felt the need to
broaden my horizons again and did dabble a little in Haskell.

------
aboodman
Go - It's a little thing, but I'm enchanted by its implicit interfaces. Seems
like it'd be very nice for testing and for decoupling components.

~~~
ftrain
Agreed, although I recently realized I likely need a better understanding of C
to fully understand where Go is going. (I'd also like to spend time with Lua--
it keeps showing up in interesting places.)

------
robin_reala
Ruby, from a pragmatic point of view. As a front-end developer in a Rails
agency I want to be able to debug the interface of my Javascript and my
colleagues’ Ruby better.

------
thibaut_barrere
No new programming language for me (at least this won't be my main learning
point in the coming year).

Instead I'll focus on: market/product (customer dev, shippping, charging) +
data techniques (nlp).

------
lawn
Erlang, just for fun. I really want to learn Haskell even better but for a new
language I'd pick Erlang for the moment.

~~~
chops
I'd second Erlang. It's a lot of fun first learning. I know when I went
through Armstrong's book on it, the first 5-6 chapters were mostly just "okay,
so an intro to the syntax and functional programming", then when the meat of
the language hit, it was a big fat "whoa...this is crazy."

I'm glad HN had that crazy "Erlang Day" a few years ago, as that was Erlang's
first blip on my radar. Thanks HN :)

------
djhworld
I'm trying to toss up between learning Python or going completely functional
with something like Haskell or Clojure.

the thing is I've spent most of my time reading up on the languages rather
than doing it, I' think I'm suffering from language-analysis paralysis

My current language skillset is Java, Objective-C and a bit of Ruby although I
wouldn't call myself an expert in any of them

~~~
barnaby
I've been using Python for the last two years and I totally love it. While it
does support functional paradigms, it's not actually a functional programming
language.

Having said that, I would love to pick up Clojure next. Realistically though,
I'm going to dive deeper into Python.

------
hyperluz
Spark & Ada just to see if the language and associated tools and processes are
really practical (read fast development with low bug rates and easy to mantain
code) and secure.

Scheme to learn functional programming and see if this paradigm really implies
in good reuse of code.

Agda to learn about intuitionistic type theory.

------
hanula
It's strange but after Python I don't feel like I need/want to learn sth new.

~~~
dkersten
In my experience a lot of Python programmers move on to learning the
functional Python features and libraries and then after they get that down,
the eventually jump ship to a mainly-functional language (a lot of people seem
to move to Haskell, I personally moved to Clojure).

This is based on my own personal experience, that of Python Ireland members
and from things I've read or seen (here on HN and elsewhere).

~~~
jlv
Do you mind elaborating on what 'functional' libraries exist in python? I've
practiced a bit using the whole map-reduce paradigm in different ways in
python, but I'm not really sure what you mean beyond that.

~~~
stephen_mcd
itertools, functools.

I once read a quote that when you're using itertools frequently enough in your
Python code you're one step away from jumping to a language like Haskell.

~~~
dkersten
I've heard that the OReilly Haskell book was one of the most bought books at
PyCon.

My progression went similarly - I started using map, reduce, filter and list
comprehension _a lot_ , then moved on to itertools and functools and then
decided what I really wanted was a _functional by default_ language. That, the
great concurrency support and the desire to learn a lisp-based language
_properly_ [1] made me choose Clojure.

It seems that this progression is actually fairly common. I still use Python
for quick'n'dirty scripts (especially as a shell scripting alternative) and
for web development (for other people; I use Clojure for my own code).

[1] I already knew some Scheme, but never used it for any _real_ projects.

------
thevivekpandey
I plan to stick to python, but learn its functional programming features.

------
balakk
I'm learning making my own. This is the first time I'm seriously muddling
through parsing and lexing. I want to make at-least a toy-language
interpreter.

------
abp
Seven Languages in Seven Weeks :)

[http://pragprog.com/titles/btlang/seven-languages-in-
seven-w...](http://pragprog.com/titles/btlang/seven-languages-in-seven-weeks)

Also a little lisp: <http://nostarch.com/lisp.htm>

------
torial
Cobra - I've dabbled with it to see that it works nicely with my brain, but
not enough to really know and grok all it has to offer.

The initial draw is that it is a python-like language for .Net (important
since my day job is in .Net). And while I've dabbled with Boo and IronPython,
Cobra seems to have removed most of the syntactic worts that I found w/
Python, as well as a few other features.

In particular, as someone who hasn't really done automated unit testing or
contractual programming, I'm drawn to the fact that support for unit testing
and contracts is built in. I like the python-like syntax as I find it easiest
to learn new programming concepts in (which I can then generalize to my day-
to-day work).

------
kunjaan
Racket.

I have used Clojure for large projects and PLTScheme for a lot of academic
projects. But I have not tried to write a large application in Scheme. In
addition, I want to use all those libraries, typed/racket and mainly the
syntax/parse macro dsl.

------
silverlake
I wish people would focus more on PROGRAMMING rather than LANGUAGES. A better
question might be, what area of computer science do you want to learn next?

~~~
torial
Languages affect how you can express certain concepts. More expressive
languages can be useful in new programming concepts. A personal example: Many
years ago I had to program in VB.Net, and never understood polymorphism until
I dabbled in Python and played around with some projects in that language.
VB.Net lets you do Polymorphism, but it doesn't assist you in learning it (at
least for the way my brain is wired).

------
bugsy
None. The language situation is absurd as it is. The only languages I learn
nowadays are ones I have invented.

------
vinc
Ruby. My favorite language is Python and I really like Django but I think I'm
missing something by not learning Ruby and Rails. Haskell is the other
language I want to learn, and probably more than Ruby but I'm currently
looking for a job and RoR is the better choice...

~~~
djhworld
Ruby and Rails are largely independent entities (in my opinion)

Learn Ruby first, Rails is a huge framework to start out ruby programming
with.

------
StudyAnimal
Javascript

~~~
fharper1961
Me too. Because now it's possible to use Javascript on the server as well as
the client. I think that for small teams doing Webapp development, being able
to use the same language on the client and the server is a big win.

------
baguasquirrel
Agda. Just for shits and giggles.

~~~
gtani
agda, coq, epigram, ATS (dependently typed languages)are mentioned regularly
by haskellers.

------
dmoney
There's a difference between "next" and "most".

Next: PHP because 94% of all CMSs, particularly WordPress, are written in it.*
I kinda know it but want to learn to do things the right way.

Most: Clojure because of its lispness and concurrency/mutability model.

* _made up statistic_

~~~
neilk
I'm boggling at the concept of doing PHP "the wrong way".

Only small, single-paradigm languages can ever do things "right". With PHP you
can do almost anything, in ways that are almost not wrong. ;)

~~~
roel_v
I guess the author means 'using php to for writing web apps that are not a
index.php file, a file called 'includes.php' and a couple of files called
'header.php', 'content.php' and 'footer.php' which then have functions called
'printHeader() { echo "<table>...</table>" etc. }'.

Basically, the way php application were written 10 years ago. I consider that
the 'wrong' way to use php, but it's how it's (necessarily) taught so many
people write their first couple of apps this way (and others never rise above
this stage).

~~~
dmoney
Exactly. What you describe sounds like the one PHP application I wrote, before
I had done much real programming.

By "the right way" I mean idiomatic, maintainable, and taking advantage of its
strengths.

------
3pt14159
Anic. So boss, I can't wait till this paradigm is more widespread.

------
gtani
all the ones mentioned by the panel(io, rebol, factor, forth, ...

[http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2010-1...](http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2010-10.html#e2010-10-16T09_09_15.htm)

I'm not actually going to learn any of them, i'm going to find some URLs that
say why they're different from the ruby/python/java/c* maelstrom

------
misterm
I'm going back to C. I've always wanted to learn it so I could contribute to
the FOSS that I use everyday. It's a great language.

------
didip
It's strange. The more I'm using Ruby and Python, in different projects,
everyday...

The more I'm attracted to Lua. I'm not sure why.

------
john2x
C or C++. Has been for a long time. Never got around to it. Maybe
OpenFrameworks will make things more interesting.

------
mishkovski
F# - I want to develop my skills toward declarative style of programming.

------
joubert
OCaml

------
slashcom
Please post results.

~~~
edd_dumbill
Yes, planning to.

~~~
harryh
very much look forward to your results. good survey!

------
luisns
Lisp, it looks really interesting

------
trezor
F#. It should let me get my mind around a somewhat different approach to
programming compared my main languages (C#, Javascript) while letting me still
work with a know platform.

~~~
HamletDRC
+1 for F#. it is a really great language and I learned a ton by spending about
250 hours with it. The book Expert F# is a really good resource. the first 200
pages are about the language (a complete guide) and the rest is just case
studies of .NET junk. I wish they had made 2 books not one... 1st 1/2 is
excellent though and worth buying.

------
konad
Forth, still. Written a few bits but want to get serious.

~~~
pdelgallego
You can go ahead and write your own forth interpreter (or maybe Cat
<http://cat-language.com>). Writing your own stack-based programming lang is a
lot of fun! (That is my toy project for december)

~~~
konad
I've done that bit :) I bought Loeliger and wrote the TIL from that in AVR
assembler.

