Does anyone have experience with Erlang? It seems interesting, but I don’t know whether to spend time learning it, Haskell, or one of the more employable languages (C/C++/Java/MATLAB).
It depends on how much programming knowledge you currently have. If you want to just learn how to program, I recommend starting with Python, or Haskell if you really like math, or the particular language which lets you do something you want to be able to do (eg Java for making simple games, JavaScript for web stuff). Erlang is a cool language, but it’s an odd choice for a first language.
In my opinion as a CS student, Python and Haskell are glorious, C is interesting to learn but irritating to use too much, and Java is godawful but sometimes necessary. The other advantage of Python is that it has a massive user base, so finding help for it is easier than for Erlang.
If I were you, I’d read Learn Python the Hard Way or Learn You a Haskell For Great Good- the second of those is how I started learning Haskell.
For Haskell, I’d strongly suggest Hutton’s Programming in Haskell as an introductory text for folks with no functional-programming experience. First, it is slightly cheaper; and second, it has the word λ inscribed in large friendly letters (well, letter) on the cover. But seriously — it presents basic Haskell in a gentle but mathy way, without a lot of the gushing of some of the more recent texts. It’s written as a textbook, with topics presented sequentially; with academic exercises rather than pseudo-industrial ones. Rather impressively, it presents Parser and IO monads before introducing the Monad abstraction by name, so one actually has worked some examples of monads before trying to puzzle out what a monad is.
If you’re studying a language to learn from it, then the choice of language depends on what you want it to teach you.
Erlang and Haskell are similar languages, and mostly teach the same things: purely applicative (“functional”) programming and high-order (also called “functional”) programming. Erlang also teaches message-passing concurrency and live patching; Haskell also teaches laziness and modern static typing. I’ve found Haskell more educational than Erlang, possibly because more of the things it teaches were new to me, possibly because I’ve done more with it, and possibly because it has more to teach. (But it is more complex.) Haskell is also more popular and has more libraries. IIRC you’re a mathematician or at least math-inclined, so you’d be comfortable with Haskell’s very mathematical culture.
Of the “employable languages”:
C teaches low-level data representations and efficiency concerns, and how to deal with unsafe tools. These are all things a programmer needs to know, and C itself is very widely used, so it’s almost essential for a professional programmer to learn, but not for someone who only writes programs as an aid to other things. (Your blog suggests you already know some C.)
C++ is very complex, and most of what it teaches is C++-specific and not very enlightening, so I don’t recommend studying it unless you need to use it.
Java is simple (except for its libraries) and not very enlightening. If you know C and Haskell, you know 3⁄4 of the important parts.
I don’t know MATLAB. This is the second time I’ve heard it described as practically useful, so I suppose I should look into it.
Java is simple (except for its libraries) and not very enlightening.
Maybe not, but I still prefer its approach to inheritance and polymorphism than the approach some other languages take. For example, why Python is a great language overall, I dislike its entire OOP mechanism. IMO, Java is worth trying just because of that.
Does anyone have experience with Erlang? It seems interesting, but I don’t know whether to spend time learning it, Haskell, or one of the more employable languages (C/C++/Java/MATLAB).
It depends on how much programming knowledge you currently have. If you want to just learn how to program, I recommend starting with Python, or Haskell if you really like math, or the particular language which lets you do something you want to be able to do (eg Java for making simple games, JavaScript for web stuff). Erlang is a cool language, but it’s an odd choice for a first language.
In my opinion as a CS student, Python and Haskell are glorious, C is interesting to learn but irritating to use too much, and Java is godawful but sometimes necessary. The other advantage of Python is that it has a massive user base, so finding help for it is easier than for Erlang.
If I were you, I’d read Learn Python the Hard Way or Learn You a Haskell For Great Good- the second of those is how I started learning Haskell.
For Haskell, I’d strongly suggest Hutton’s Programming in Haskell as an introductory text for folks with no functional-programming experience. First, it is slightly cheaper; and second, it has the word λ inscribed in large friendly letters (well, letter) on the cover. But seriously — it presents basic Haskell in a gentle but mathy way, without a lot of the gushing of some of the more recent texts. It’s written as a textbook, with topics presented sequentially; with academic exercises rather than pseudo-industrial ones. Rather impressively, it presents Parser and IO monads before introducing the Monad abstraction by name, so one actually has worked some examples of monads before trying to puzzle out what a monad is.
If you’re studying a language to learn from it, then the choice of language depends on what you want it to teach you.
Erlang and Haskell are similar languages, and mostly teach the same things: purely applicative (“functional”) programming and high-order (also called “functional”) programming. Erlang also teaches message-passing concurrency and live patching; Haskell also teaches laziness and modern static typing. I’ve found Haskell more educational than Erlang, possibly because more of the things it teaches were new to me, possibly because I’ve done more with it, and possibly because it has more to teach. (But it is more complex.) Haskell is also more popular and has more libraries. IIRC you’re a mathematician or at least math-inclined, so you’d be comfortable with Haskell’s very mathematical culture.
Of the “employable languages”:
C teaches low-level data representations and efficiency concerns, and how to deal with unsafe tools. These are all things a programmer needs to know, and C itself is very widely used, so it’s almost essential for a professional programmer to learn, but not for someone who only writes programs as an aid to other things. (Your blog suggests you already know some C.)
C++ is very complex, and most of what it teaches is C++-specific and not very enlightening, so I don’t recommend studying it unless you need to use it.
Java is simple (except for its libraries) and not very enlightening. If you know C and Haskell, you know 3⁄4 of the important parts.
I don’t know MATLAB. This is the second time I’ve heard it described as practically useful, so I suppose I should look into it.
Maybe not, but I still prefer its approach to inheritance and polymorphism than the approach some other languages take. For example, why Python is a great language overall, I dislike its entire OOP mechanism. IMO, Java is worth trying just because of that.
Yes, Java makes the distinction between:
these classes do the same thing (but internally they can be completely different); and
this class is a copy of that class, with some added data and functionality.
Let me try again: has anyone had any experience e.g., building something with Erlang?
I don’t need a compare/contrast of feature sets or textbook recommendations; I want to know what it was like doing something with it.
Is MATLAB particularly employable? I wouldn’t have guessed that.
matlab is the new fortran
engineering.