paper-machine comments on Programming Thread - Less Wrong

12 Post author: Viliam_Bur 06 December 2012 07:07PM

You are viewing a comment permalink. View the original post to see all comments and the full post content.

Comments (64)

You are viewing a single comment's thread.

Comment author: [deleted] 06 December 2012 10:30:14PM 1 point [-]

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

Comment author: Solvent 07 December 2012 02:27:40AM 1 point [-]

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.

Comment author: fubarobfusco 07 December 2012 07:27:44AM 0 points [-]

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.

Comment author: Crude_Dolorium 07 December 2012 01:41:30AM 1 point [-]

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.
Comment author: Bugmaster 07 December 2012 02:52:17AM 1 point [-]

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.

Comment author: Viliam_Bur 07 December 2012 02:35:33PM *  0 points [-]

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.
Comment author: [deleted] 07 December 2012 04:24:46PM *  0 points [-]

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.

Comment author: Daniel_Burfoot 07 December 2012 03:17:40AM 0 points [-]

Is MATLAB particularly employable? I wouldn't have guessed that.

Comment author: [deleted] 07 December 2012 05:24:20AM 1 point [-]

matlab is the new fortran

engineering.