Merely passing isn’t inconceivable, and we hope you will do more than pass—I hope you’re aiming above that too.

The most important thing you can do right is to attend every lecture and take vigorous notes. The vast majority of course content will come from in-class lecture. While we do supplement this with notes or textbook chapters available or distributed online, these are a next-best alterative. Therefore, attending lecture is of the utmost importance. We will often provide directly the answers to homework problems in lecture, and this course is made significantly more difficult by missing one or more lectures. We will at times distribute electronic transcripts of the in-class code, but this is no substitute for careful notes and understanding its development. I will not be taking attendance. Regular class attendance is a student’s obligation, as is responsibility for all the content of class meetings, including tests.

The other thing to bear in mind is that this is Programming Language Principles. Programming Language Implementation is actually the compilers course – not a whole lot easier, but they certainly do have you do work with the laptops. The code is there to show you can implement the ideas, but in some sense the code is second-fiddle to the ideas. Really and truly grok what we’re getting at, and the code is easy. But the grokking is hard. I’ll not fault the method – watching someone code an interpreter in class wouldn’t improve your coding any more than watching Bob Ross paint a landscape helps your art skills – but I’ll totally fault my implementation of that idea.

Take vigorous, vigorous notes. As a student, I wrote down in my notebook everything written on the blackboard in lecture, and as much of what the professor said as I could. When he erased, I struck out, and wrote what he wrote somewhere else, with an arrow to the original location. It made my notes chronological, rather than flat, structural. I had to go-back through the lecture in my mind as I was reading to understand them, but I didn’t miss anything.

If you haven’t started it by Saturday morning, I think at this point you’re behind.

To prepare for an exam, I’d make sure I could do all the old homeworks, as much of the brainteasers as I could get, and knew what I did wrong on the exam. Most things in this course (e.g. lexical scope, the call-by-XXs, and interpreters), will come back on exams and future homeworks. For those, there is no escape. So its important to make darn sure you have the foundation to keep going. In some sense, figuring out the earlier stuff while the class carries on is like trying to assemble an airplane while flying it – but far better than trying to fly one disassembled.

Updated: