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