# Courses for Spring 2025
It's hard to believe, but courses for Spring 2025 have arrived. This includes a new Rust course with the challenge of implementing an interpreter--more details on that below.
- Write a Compiler, March 10-14, 2025.
- Advanced Programming with Python, March 17-21, 2025.
- Crusty Interpreter (new!), April 7-11, 2025.
- Rafting Trip, April 21-25, 2025.
- Structure and Interpretation of Computer Programs (SICP), December 15-19, 2025 (admittedly not quite spring)
Crusty Interpreter - A New Course
A new addition to the schedule is the "Crusty Interpreter" course. In short, this is where you get to test your wits by trying to implement the first part of the excellent Crafting Interpreters book in Rust.
There are a number of ways that one might view this course. First, the problem of implementing a programming language interpreter is a common project found in a traditional Programming Languages class. So, if you're interested in that topic, the course will definitely cover the fundamentals. Second, the course is a good way to learn more about Rust. Rust has a reputation for being rather difficult to learn and implementing an interpreter will definitely force you to confront a wide range of real-world programming problems in it. Finally, you'll have to confront your knowledge of programming languages that you already know--Crafting Interpreters is presented in Java so you'll have to read that code, understand it well enough to know what's going on, and devise a strategy for coding it in an entirely different language. It's not always easy!
Write a Compiler - An Evolved Course
Although I've offered my Write a Compiler course in various forms since 2012, the course has evolved a lot as a result of my recent teaching of programming languages at Brown University in 2023 and 2024.
If one looks at the challenge of making a new programming language, there are two approaches that you can take. The first approach is to write an interpreter that directly executes code for your new language. This is the central focus of the Crusty Interpreter course above. A second approach is to focus on program translation. Can you transform your new language into an already existing language? Or even a slightly simpler subset of your new language? This is the central problem of compilers.
Although writing an interpreter and compiler have many similarities (and I've often emphasized both in past versions of this course), the current compilers course has shifted almost entirely towards the greater problem of program translation as we take programs in a high-level language and translate them to LLVM through a series of about 15 steps. This shift in focus has also made the course much more oriented around data, types, functional programming, and other related topics. Plus, there is the extra challenge of trying to manage the complexity of it all.
The compilers course also continues the evolution of my courses towards a more language-agnostic approach. Although Python is still used for demonstration purposes, the project involves no dependencies or fancy Python coding tricks. As such, you can implement the project in any programming language that you wish. If you're trying to learn a new language, implementing a compiler in it will definitely give you a good workout!
Back to a Regular Schedule
Finally, with the conclusion of my brief sabbatical, I'm back to a regular teaching schedule in 2025. Thus, I'm expecting all of the above courses to be in regular rotation throughout 2025.
Cheers,
Dave