- Which texts will we use?
I will use only one text,
Principles of Programming Languages by Krishnamurthi and Felleisenand supplement it with our own lecture notes.
- Where do I find it?
Principles is available on the Web.
- What are good sources of information on garbage collection?
The classic reference is a survey by Paul Wilson, a leading researcher in the field. Visit his research group's publications page and look for the survey entitled Uniprocessor Garbage Collection Techniques near the bottom. You may want the extended version, which is also newer.
Also, look at the on-line garbage collection FAQ and at the memory management FAQ.
- Can you suggest supplementary texts on Scheme?
I recommend four.
The first is
How to Design Programs by Felleisen, Findler, Flatt and KrishnamurthiThis is a full-blown text, in a traditional format but with content unusual for an introductory programming text. It lays out the design philosophy I have been discussing in class.
The second is
The Little Schemer by Friedman and FelleisenWarning: This book is idiosyncratic! It'll force you to think, and will leave your desk covered in peanut butter and jelly stains. (Read it, you'll understand.) If you can concentrate through it, it's probably the best introduction you will find on recursive, functional programming and thinking. Has a superb follow-up,
The Seasoned Schemer by Felleisen and Friedmanwhich uses the same style to lay bare the heart of Scheme's more advanced features.
The third is a classic that all computer scientists should read, regardless of their linguistic leanings:
The Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Jay Sussman with Julie SussmanThis book set the standard for all future writing about programming and languages, and has deep, deep nuggets of wisdom embedded even its footnotes (though it may take you years to comprehend them).
The fourth is, for a Scheme tome, the most curious:
Teach Yourself Scheme in Fixnum Days by Dorai SitaramIt's organized to be a rapid introduction to Scheme for those who are familiar with more traditional languages and design styles, and succeeds superbly at this. I have a few quibbles with the content for instance, if you read the material in section 5 that precedes section 5.1, your skin will rot and your hooves cleave but that's not to detract from the splendid work overall.
- Any other books I ought to read?
I strongly recommend two. The first will make you a much more effective writer. Lyn Dupre has shepherded many of the classic computer science books through Addison-Wesley press; she understands writing in the context of computer science better than just about anyone. She has distilled her experience into a very readable and practical book with the ugly title
BUGS in WritingDon't read it all at once. Indeed, ignore most of it. Just follow the advice on active speech and you'll become a better writer.
Doug Hofstadter's classic
Gödel, Escher, Bach: An Eternal Golden Braidis deep, thought-provoking and funny. He deals with many issues of language and shifting levels of interpretation, often in surprising contexts (such as DNA sequences) that we don't examine in this course. When I read it at age 15, this book changed my life and made me want to become a computer scientist (who, I thought, all thought about these issues now I know better).