Effective Scheming


I received an email from a former student who's caught the Scheme bug. He says:

I took 330 from you last year and I really enjoy coding in Scheme. I do any class project I can in Scheme -- even my Python code is riddled with lambda statements.

I have two questions I was hoping you could help me with
  1. What are the prospects for kids who like coding in Scheme/Lisp, and how does one locate/maximize those prospects?
  2. What are some key things I could do to become a really great Scheme/Lisp coder? That is, what are some concepts and capabilities I could focus on to become a truly outstanding Schemer?

These are questions I don't necessarily have good answers for. Here's my best ideas at the moment. If you have others, feel free to leave a comment below.

On prospects, if you're interested in graduate school, there are some places like Utah and Northwestern that have people actively doing research in Scheme. As for jobs, I'm not aware of any. I teach Scheme for pedagogical rather than pragmatic reasons, so I don't spend a lot of time worrying about whether it's practical or not. 98% of the other courses we teach use Java, so I figure students have gotten a healthy dose of practical.

On what concepts and capabilities to focus on, I'd say that macros are at the top of the list. The best book I've seen on this is Practical Common Lisp by Peter Seibel. By chapter 3, Peter has shown what macros are, how they differ from what are termed "macros" in other languages, and why they're important. The book is sprinkled with "practical" chapters that take the concepts just learned and apply them. It's one of the most effective programming language texts I've read and certainly the best one for Lisp.

In addition to learning about macros, learning Lisp is a good thing because there are features and ideas in Lisp that aren't present in Scheme and will expand your horizons. Obviously, Seibel is a good vehicle for doing that. As far as implementations, I've had good luck with OpenMCL. SLIME in Emacs is a great IDE.