I have been working slowly through Abelman & Sussman's Structure and Interpretation of Computer Programming (SICP) and exercises, the MIT classic "introductory" text, but would like to share the experience. The great thing about SICP is that it is free online, as are accompanying video lectures -- the first was inspirational, but subsequently I have relied on the text. The tools are available online and free. The language used is Scheme (a teaching/research Lisp), but it's the ideas that come through.
There are other books out there which promise to capture exciting ideas using various f.p.-ish languages as vehicles:
- Hudak, The Haskell School of Expression
- Armstrong, Programming in Erlang
- Siebel, Practical Common Lisp (text available online)
Haskell: Lazy evaluation, monadic computation, mathematical modelling, and more ...
Erlang: Practical, reliable, massive parallelism, ...
Lisps: Code-data duality
I am also interested in F# (as the .NET representative of the ML / OCAML) family, but am waiting on the publication and review of more books. [Forgive me for leaving Smalltalk, Forth, plus the various languages du jour off my list: There may well be too many already.]
Other probably books worth looking into:
- Graham, On Lisp
- Norvig et al, PAIP and AI: A modern approach
- Kiczales, The Art of the Meta-Object Protocol
- Sussman and Wisdom, Structure and Interpretation of Classical Mechanics (text available online)
- Doets and van Eijck, The Haskell Road to Logic, Maths and Programming
- Okasaki, Purely Functional Data Structures
It's all about the joy of new and ongoing learning; with the bonus of becoming more skillful, productive, and having a chance of successfully working with the coming generation of massively multi-core machines.
I would be interested in hearing expressions of interest, suggestions for format plus any experiences and tips from anyone involved in such groups.