Which programming language do you want to learn next?
edd.me
edd.me
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].
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.
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.
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.
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 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.
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.
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.
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". :)
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.
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.
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.
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.
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/ ;-)
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.
Instead I'll focus on: market/product (customer dev, shippping, charging) + data techniques (nlp).
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 :)
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
Having said that, I would love to pick up Clojure next. Realistically though, I'm going to dive deeper into Python.
Scheme to learn functional programming and see if this paradigm really implies in good reuse of code.
Agda to learn about intuitionistic type theory.
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).
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.
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.
However, I am forcing myself to learn Clojure. There must be other maxima in this space.
http://pragprog.com/titles/btlang/seven-languages-in-seven-w...
Also a little lisp: http://nostarch.com/lisp.htm
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).
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.
Learn Ruby first, Rails is a huge framework to start out ruby programming with.
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
Only small, single-paradigm languages can ever do things "right". With PHP you can do almost anything, in ways that are almost not wrong. ;)
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).
By "the right way" I mean idiomatic, maintainable, and taking advantage of its strengths.
http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2010-1...
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
The more I'm attracted to Lua. I'm not sure why.