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 ⊥
____________________
Racket Users list:
http://lists.racket-lang.org/users