Processing and Lua seem pretty exotic to me. How did you hear of them? If you know people who use a particular language, that’s a pretty good reason to choose it.
Even if you don’t have a goal in mind, I would recommend choosing a language with applications in mind to keep you motivated. For example, if (but only if) you play wow, I would recommend Lua; or if the graphical applications of Processing appeal to you, then I’d recommend it. If you play with web pages, javascript...
At least that’s my advice for one style of learning, a style suggested by your mention of those two languages, but almost opposite from your “Nevertheless, I want to start from the very beginning,” which suggests something like SICP. There are probably similar courses built around OCaml. The proliferation of monad tutorials suggests that the courses built around Haskell don’t work. That’s not to disagree with wnoise about the value of Haskell either practical or educational, but I’m skeptical about it as an introduction.
ETA: SICP is a textbook using Scheme (Lisp). Lisp or OCaml seems like a good stepping-stone to Haskell. Monads are like burritos.
Eh, monads are an extremely simple concept with a scary-sounding name, and not the only example of such in Haskell.
The problem is that Haskell encourages a degree of abstraction that would be absurd in most other languages, and tends to borrow mathematical terminology for those abstractions, instead of inventing arbitrary new jargon the way most other languages would.
So you end up with newcomers to Haskell trying to simultaneously:
Adjust to a degree of abstraction normally reserved for mathematicians and philosophers
Unlearn existing habits from other languages
Learn about intimidating math-y-sounding things
And the final blow is that the type of programming problem that the monad abstraction so elegantly captures is almost precisely the set of problems that look simple in most other languages.
But some people stick with it anyway, until eventually something clicks and they realize just how simple the whole monad thing is. Having at that point, in the throes of comprehension, already forgotten what it was to be confused, they promptly go write yet another “monad tutorial” filled with half-baked metaphors and misleading analogies to concrete concepts, perpetuating the idea that monads are some incredibly arcane, challenging concept.
The whole circus makes for an excellent demonstration of the sort of thing Eliezer complains about in regards to explaining things being hard.
I’m going through SICP now. I’m not getting as much out of it as I expected, because much of it I already know, is uninteresting to me since I expect lazy evaluation due to Haskell, or is just tedious (I got sick pretty quick with the authors’ hard-on for number theory).
SICP is nice if you’ve never seen a lambda abstraction before; its value decreases monotonically with increasing exposure to functional programming. You can probably safely skim the majority of it, at most do a handful of the exercises that don’t immediately make you yawn just by looking at them.
Scheme isn’t much more than an impure, strict untyped λ-calculus; it seems embarrassingly simple (which is also its charm!) from the perspective of someone comfortable working in a pure, non-strict bastardization of some fragment of System F-ω or whatever it is that GHC is these days.
Haskell does tend to ruin one for other languages, though lately I’ve been getting slightly frustrated with some of Haskell’s own limitations...
Processing and Lua seem pretty exotic to me. How did you hear of them? If you know people who use a particular language, that’s a pretty good reason to choose it.
Even if you don’t have a goal in mind, I would recommend choosing a language with applications in mind to keep you motivated. For example, if (but only if) you play wow, I would recommend Lua; or if the graphical applications of Processing appeal to you, then I’d recommend it. If you play with web pages, javascript...
At least that’s my advice for one style of learning, a style suggested by your mention of those two languages, but almost opposite from your “Nevertheless, I want to start from the very beginning,” which suggests something like SICP. There are probably similar courses built around OCaml. The proliferation of monad tutorials suggests that the courses built around Haskell don’t work. That’s not to disagree with wnoise about the value of Haskell either practical or educational, but I’m skeptical about it as an introduction.
ETA: SICP is a textbook using Scheme (Lisp). Lisp or OCaml seems like a good stepping-stone to Haskell. Monads are like burritos.
Eh, monads are an extremely simple concept with a scary-sounding name, and not the only example of such in Haskell.
The problem is that Haskell encourages a degree of abstraction that would be absurd in most other languages, and tends to borrow mathematical terminology for those abstractions, instead of inventing arbitrary new jargon the way most other languages would.
So you end up with newcomers to Haskell trying to simultaneously:
Adjust to a degree of abstraction normally reserved for mathematicians and philosophers
Unlearn existing habits from other languages
Learn about intimidating math-y-sounding things
And the final blow is that the type of programming problem that the monad abstraction so elegantly captures is almost precisely the set of problems that look simple in most other languages.
But some people stick with it anyway, until eventually something clicks and they realize just how simple the whole monad thing is. Having at that point, in the throes of comprehension, already forgotten what it was to be confused, they promptly go write yet another “monad tutorial” filled with half-baked metaphors and misleading analogies to concrete concepts, perpetuating the idea that monads are some incredibly arcane, challenging concept.
The whole circus makes for an excellent demonstration of the sort of thing Eliezer complains about in regards to explaining things being hard.
I learnt about Lua thru Metaplace, which is now dead. I heard about Processing via Anders Sandberg.
I’m always fascinated by data visualisation. I thought Processing might come in handy.
Thanks for mentioning SICP. I’ll check it out.
I’m going through SICP now. I’m not getting as much out of it as I expected, because much of it I already know, is uninteresting to me since I expect lazy evaluation due to Haskell, or is just tedious (I got sick pretty quick with the authors’ hard-on for number theory).
SICP is nice if you’ve never seen a lambda abstraction before; its value decreases monotonically with increasing exposure to functional programming. You can probably safely skim the majority of it, at most do a handful of the exercises that don’t immediately make you yawn just by looking at them.
Scheme isn’t much more than an impure, strict untyped λ-calculus; it seems embarrassingly simple (which is also its charm!) from the perspective of someone comfortable working in a pure, non-strict bastardization of some fragment of System F-ω or whatever it is that GHC is these days.
Haskell does tend to ruin one for other languages, though lately I’ve been getting slightly frustrated with some of Haskell’s own limitations...