4 ms·
Well, I'm a little biased, but I would learn Haskell. It's the one I learned first--in fact, I learned it during my very first college CS course. (The course, c
by tikhonj 14y ago
Well, I'm a little biased, but I would learn Haskell. It's the one I learned first--in fact, I learned it during my very first college CS course. (The course, coincidentally, was in Scheme.) If I managed it as a freshman, it can't be all that difficult :P.
Haskell has a couple of very good freely available books: Learn You a Haskell[1] and Real World Haskell[2]. I also found Write Yourself a Scheme in 48 Hours[3] very helpful. When I was learning OCaml, I could not find any terribly good resources. That said, it wasn't much of an issue, so I didn't look too hard--learning OCaml after knowing Haskell is very easy. There is going to be a Real World OCaml book at some point, but I think it's still a work in progress.
[1]: http://learnyouahaskell.com/ http://learnyouahaskell.com/
[2]: http://book.realworldhaskell.org/ http://book.realworldhaskell.org/
[3]: http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_H...
I also think Haskell is good because it's more of a departure from languages you're probably used to. You can't sink back into your old habits, because everything is done completely differently. Of course, some people find it helpful to have less of a departure from what they're used to, so perhaps you might prefer OCaml because it's less different from normal languages.
I use Haskell for my own projects (and, this semester, for research), and I used OCaml for an internship this summer. I think that for most tasks, they're roughly equally suited. If you want to do multicore concurrent or parallel code, I think Haskell has the edge, but I have not really done much of that in either language.
OCaml has a very good JavaScript compiler called js_of_ocaml[4]. While Haskell does have some options for JavaScript as well like Fay[5] or UHC[6], I don't think it's quite as nice. I used js_of_ocaml during my internship and was very happy with it. So for web stuff, I'd probably go for OCaml. Both OCaml and Haskell have good backend web frameworks, but I haven't really used any of them.
[4]: http://ocsigen.org/js_of_ocaml/ http://ocsigen.org/js_of_ocaml/
[5]: http://fay-lang.org/ http://fay-lang.org/
[6]: http://www.cs.uu.nl/wiki/UHC http://www.cs.uu.nl/wiki/UHC
If you happen to be on windows, installing OCaml is a pain. Haskell, with the Haskell Platform[7] should be much easier, but I haven't tried it myself.
[7]: http://www.haskell.org/platform/ http://www.haskell.org/platform/
OCaml has a really good Emacs mode called typerex[8]. Haskell has some alternatives like ghc-mod[9] and scion[10], but I've never been able to get them to work. Admittedly, typerex was not easy to install either.
[8]: http://typerex.org/ http://typerex.org/
[9]: http://www.mew.org/~kazu/proj/ghc-mod/en/ http://www.mew.org/~kazu/proj/ghc-mod/en/
[10]: https://github.com/nominolo/scion https://github.com/nominolo/scion
Ultimately, you wouldn't go wrong with either one. Moreover, the core ideas are fairly transferable between the two: you'll find that learning OCaml after Haskell or Haskell after OCaml is relatively easy. I would lean towards Haskell, but it's not a big deal.
I just realized that I've written a whole bunch of paragraphs to say very little: either language is a great choice and I just happen to like Haskell more. Hopefully this is not too much of a deluge of information :P.
- pjmlp 14y agoFor Windows developers I would advice to use F# instead. Being a Microsoft language helps smuggle it into the work environment of the enterprise. It has become my scripting language for Windows tasks.
- graue 14y agoOK, I'm curious now. Wikipedia says[1] the reference implementation is open-source and cross-platform, which is great, but I never hear of anyone talking about F# outside the Microsoft world. The compiler has to be compiled from source[2] on Ubuntu, which seems to suggest hardly anyone is using it. Would there be any compelling reason to use F# if you're not working in a primarily Microsoft environment? What does the language itself offer over Ocaml or Haskell? [1]: https://en.wikipedia.org/wiki/F_Sharp_%28programming_language%29 https://en.wikipedia.org/wiki/F_Sharp_%28programming_languag... [2]: https://fsxplat.codeplex.com/wikipage?title=FSharpLinux https://fsxplat.codeplex.com/wikipage?title=FSharpLinux
- stonemetal 14y agoFrom what I understand F# works on mono and the F# MS team actually puts in effort to make sure it does. Though for whatever reason mono just isn't that good at running F# code. Maybe it is a weak GC or lack of ability to optimize the code patterns F# produces, I don't know. It is slower than F# on CLR. Given that, library access and ability to thread are the two big things it is going to have over Ocaml. Cleaner syntax when compared to Ocaml too. Haskell, not much.
- pjmlp 14y agoThe GC was not that great, but the new S-Gen is quite comparable to the CLR one.
- pjmlp 14y agoIf you're not on a Microsoft shop, then I think OCaml or Haskell might be a better option. Queries and type providers are nice features of F# 3.0, but not sure how much it would matter as feature.