Resources
Here are some general books and guides we recommend to help you as you go through the course. This list will be updated throughout the semester.
PL Textbooks
Here are books you may be interested in if you want to go into much more depth on some of the class material, and in many cases beyond it. None of these is required for the class. The books with boldfaced titles are particularly good.
(Required) Programming Languages: Principles and Practice, by Kenneth C. Louden
(Required) "The Haverford Educational RISC Architecture" by David Wonnacott. This booklet is available with a nice cover at the Haverford book store (the lulu.com version, but with the shipping cost shared among all students) or you can print your own for free (without the cool cover) from the HERA web site
We will assign various web-based readings throughout the term
Books / guides C++
C++ is a very large langauge, and one major problem is finding good material that covers the feature you want without delving into hundreds of others. Ask when you get confused, and we’ll figure it out together.
cppreference.com is one resource I frequently use. But it’s definitely a reference, and not organized in a way friendly to new users.
Quora Q&A: What are some good resources for learning C++11 (note that we’ll be using features from C++1y as well).
Books and guides on Racket
All of the following are free and quite useful.
How to Design Programs is a general introduction to computer science using Racket
Structure and Interpretation of Computer Programs is another introduction (although more challenging than HtDP) to CS using Racket, whose outline mirrors CMSC245 in a way.
Quick: An Introduction to Racket with Pictures is a (very) quick introduction to Racket.
The Raket Guide, which is quite comprehensive and concise, but assumes you have some experience programming in Racket before you read it.
Beautiful Racket teaches you how to build your own languages on top of Racket using Racket’s powerful macro system.
Other PL textbooks
Some of which go far beyond the scope of this class.
Felleisen, Findler, and Flatt, Semantics Engineering with PLT Redex
Mitchell, Foundations for Programming Languages
Pierce, Types and Programming Languages (TAPL)