[racket] Where to learn advanced programming skills?
On 07/21/2013 10:20 PM, Neil Van Dyke wrote:
> Ben Duan wrote at 07/21/2013 10:25 PM:
>> In this mailing list, I can always find some concepts which are not
>> familiar to me. For example `monad' and `parameterize'. I don't know
>> how to learn about these kind of advanced programming skills
>> systematically. So I'm asking for your suggestions on where I can go
>> next.
>
> "Monad" is a concept from pure functional programming that is almost
> never used in Racket (although people have implemented monads using
> Scheme and Racket). If and when you decide you want to learn pure
> functional programming, I suspect you'd take a detour from Racket at
> that time, and spend at least a couple months working through a book and
> language designed specifically for functional programming, like Haskell.
It's a bit of a shame they don't come up in Racket much, because they
can make such a fine translation target for language-defining macros.
(Doing this often cleanly separates the semantics of your language from
its syntax, which removes unnecessary complications from the
translation.) But Racket has more effects than just nontermination, so
there's little in day-to-day use that motivates having them.
If you try doing effectful computation in Haskell, though, you'll be
begging for something like monads within an hour. If you somehow don't
know about them, the pain will drive you to invent them yourself. You
*will* understand them, one way or another.
FWIW, the rest of your email is spot-on. Practice, practice, practice.
Find projects that hold your interest and seem just out of reach, and
learn whatever you need to get them done.
Neil ⊥