86 comments

[ 3.4 ms ] story [ 247 ms ] thread
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.
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.)
(comment deleted)
+1 for Lua. It seems to be the most "different" language I keep coming across.
Please post results.
Yes, planning to.
very much look forward to your results. good survey!
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.
For exactly the same reason I learned OCaml some time ago.
+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.
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.
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.
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.
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.

Agda. Just for shits and giggles.
agda, coq, epigram, ATS (dependently typed languages)are mentioned regularly by haskellers.
Erlang, just for fun. I really want to learn Haskell even better but for a new language I'd pick Erlang for the moment.
Erlang is definitely the most fun language I've learned in many years. It will make you think very differently then most other languages and at least slightly change the way you think about everyday programming.
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 :)

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.
Forth, still. Written a few bits but want to get serious.
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)
I've done that bit :) I bought Loeliger and wrote the TIL from that in AVR assembler.
No more new languages for a little while. New algorithms and problem domains instead.
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.
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...

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.

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.

How would you go about doing this? Are there good books?
The Good Books depends upon which specific field you go into. The first step is to pick a field that you're interested in. This is often the hardest step, because from a 10,000-foot level, you often can't tell what will be interesting, and whichever field you dive into will shut off various other opportunity costs.

Then, go to your favorite graduate school website. I'm partial to Stanford and MIT, because both put up fairly complete syllabi on the web, including textbooks and often homework assignments. Pick out a couple courses, just as if you were back in college, and note down the textbooks.

Then go to Amazon.com (or Amazon.co.uk, when I was in college Europe had much better textbook prices, I dunno if they've closed that loophole) and search for those textbooks. And when it pops up "Related books" with good ratings, add those to your cart as well. Buy them.

Read, rinse, and repeat. Many textbooks have generous citation indexes that you can use to find further books or papers to check out.

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.

Why are you leery of doing anything practical with Erlang and Haskell? #haskell on freenode is filled with people doing practical things in Haskell and Ericsson has bet most of its infrastructure on Erlang...
Scala may be a way to get many of the benefits of Erlang and Haskell while also using a platform that is very successful and well-understood. And if I need to calculate what day of the week it is in 10 days in German, I know some library will exist for this. Scala could be snake oil, but it looks interesting.

I have to come to terms with my own ignorance. I'm not saying there isn't a good date library in Haskell. I'm saying I don't know if there is one, and as long as I'm learning a new language, I might as well choose something where I know at least some of those issues are definitely solved. This may cause some partisans to rage, but when choosing a language for a project, personal comfort is really the #1 issue.

> 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.

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?
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.

I've already dabbled a bit in Erlang and Haskell. I think they are great languages.

Anyway, this was just an expression of interest that Scala might be a better all-around language for getting things done. I have no Scala experience. I could totally be wrong about this.

I should note that I have a particular project in mind that has a web-facing component and multiple nodes on the backend. It's not 100% clear to me that Haskell is the right tool for that job. Erlang could definitely do that sort of thing. But Scala might be more convenient than either.

Erlang comes from industry and design has been driven by use... that's pretty practical.

Your point about the JVM is solid, but it would be a mistake to dismiss a language wholesale with a cheap dig because you hear that "string handling sucks". :)

None. The language situation is absurd as it is. The only languages I learn nowadays are ones I have invented.
I plan to stick to python, but learn its functional programming features.
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

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. ;)

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).

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.

It's strange but after Python I don't feel like I need/want to learn sth new.
Same here. It's a local maximum.

However, I am forcing myself to learn Clojure. There must be other maxima in this space.

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).

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.
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.

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.

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].

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

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.

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.
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.
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.

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).

Javascript
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.
F# - I want to develop my skills toward declarative style of programming.
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...
Ruby and Rails are largely independent entities (in my opinion)

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