Course Description
CS 146: Elementary Algorithm Design and Data Abstraction (Advanced Level)
CS146 is an advanced-level version of CS136.
While CS136 introduces imperative programming solely through C, CS146 begins its exploration of imperative programming using both Racket and C. The course also covers various methods to understand and execute programming semantics, including stepping rules, compilers, and interpreters. CS146 presents interpreters in Haskell and invents toy languages SIMPL (a simple imperative language) and PRIMPL (an assembly-like language) to understand imperative semantics at a lower level. We briefly discuss what compilation and assembly looks like for these languages. Finally, students are exposed to MMIX as a method to briefly introduce binary encoding of instructions and data, and to understand how CPU architectures may practically impact instructions and timings.
Student Course Perceptions
Explanations of course concepts: 94%
Creating a supportive learning environment: 100%
Stimulating student interest: 94%
Overall instructor effectiveness: 96%
My Thoughts
TODO: Write reflection
profQUOTES
As quoted in mathNEWS.
Volume 160, Issue 1, January 16th, 2026
- You’d be better off going outside and touching grass.
- They’ll be like “Racket? What the fuck is that?”
Volume 160, Issue 2, January 30th, 2026
- The important thing about Among Us is that it was the first ever video game.
- Chat GPT? I don’t know what that is.