Introduction to the Theory and Design of Programming Languages
Introduction to the theory and design of programming languages, covering procedural, object-oriented, functional, and logic paradigms, serial and concurrent programming, execution models, and formal specification techniques.
Summary
Past student reviews · Justin Hsu, Kaiser Pister
Programming projects were described as the hardest in a student's CS experience, while Kaiser Pister's homework was criticized for being complex and unprepared for due to surface-level lectures.
What you’ll be able to do
Read, write, and transform functional programs using key paradigms such as lazy evaluation, eager evaluation, and monads.
Apply lambda calculus as a formal foundation for understanding and reasoning about functional programming languages.
Reason about and analyze program behavior through type checking, type inference, and static analysis techniques.
Construct and reason about control flow in programs using techniques such as continuation-passing style (CPS) and monadic control structures.
Evaluate the role of type systems, polymorphism, and abstraction mechanisms in enforcing program correctness and expressiveness.
Analyze how programming language features influence program security, with a focus on reasoning about memory management and control flow vulnerabilities.
Apply formal reasoning techniques to construct correctness proofs of programs.
Source: UW Guide
Grade history
↗All recorded terms · compare terms & instructors
Prerequisites
Course mapE C E/COMP SCI 354 and (COMP SCI 367 or 400) or graduate/professional standing or declared in the Capstone Certificate in Computer Sciences for Professionals
- ECE/COMPSCI 354
- COMP SCI 367
- COMPSCI 400
- graduate/professional standing
- declared in the Capstone Certificate in Computer Sciences for Professionals
This is a best-effort interpretation; check the catalog requirements above.
Prerequisite text tree
- Any of
- All of
- ECE/COMPSCI 354
- Any of
- COMP SCI 367
- COMPSCI 400
- graduate/professional standing
- declared in the Capstone Certificate in Computer Sciences for Professionals
- All of
Professors
Spring 2027No instructors recorded for this selection.
Historical instructors & teaching patterns
JUSTIN HSU is recorded teaching in Spring 2019, Spring 2020. Recorded history may be incomplete and does not establish a future schedule.
KAISER PISTER is recorded teaching in Fall 2022, Spring 2023, Fall 2023, Spring 2024, Fall 2024, Spring 2025, Fall 2025, Spring 2026. Recorded history may be incomplete and does not establish a future schedule.
Recorded history may be incomplete and does not establish a future schedule.
Calendar & sections
Spring 2027Schedule loads here as you scroll.
| Section | Mode | Enrolled / capacity | Waitlist |
|---|
Times are Central. Select a meeting for details; export includes recorded dates for the selected sections.
Meeting source records
Student experience
the class
Past student reviews · Justin Hsu
Students found the content on programming languages and paradigms interesting and valuable for software engineering, with Justin Hsu described as helpful and caring.
Recent recorded grades — Spring 2025: 2.96 GPA, 40.5% A/AB (n=42 letter grades); Fall 2025: 3.43 GPA, 76.3% A/AB (n=38 letter grades); Spring 2026: 2.97 GPA, 37.5% A/AB (n=16 letter grades).
difficulty & workload
Past student reviews · Justin Hsu, Kaiser Pister
Programming projects were described as the hardest in a student's CS experience, while Kaiser Pister's homework was criticized for being complex and unprepared for due to surface-level lectures.
Past student reviews · Kaiser Pister
Kaiser Pister was considered engaging and understanding, with exams resembling practice tests and helpful office hours available for difficult homework assignments.
Topics
- Programming language paradigms (procedural, object-oriented, functional, logic)
- Serial and concurrent programming
- Execution models and formal specification techniques
- Lambda calculus and functional programming foundations
Skills
- Analyze programming language paradigms including procedural, object-oriented, functional, and logic approaches.
- Write and transform functional programs using lazy evaluation, eager evaluation, and monads.
- Analyze program behavior via type checking, type inference, and static analysis.
- Construct correctness proofs of programs using formal reasoning techniques.
Grades
Latest available · Spring 2026— not enough history to project Spring 2027.
Grade distribution · % of letter grades
Grades over time
Through Spring 2026
More grade details Grade mix, volume & source data
Not enough comparable courses for Spring 2027 in UW–Madison.
Sources & history
Catalog & offerings
Descriptions, prerequisites, and recorded course offerings.
Catalog observation history
Observations at scan time; dates do not imply when a catalog change took effect.
Selected offering source records
No offering records for the selected term.
Raw records
[]
Student reviews
Original comments behind the course and instructor summaries.
Read original reviews
Grade history
Recorded grade distributions by term, section, and instructor.
Explore recorded gradesRecorded 2026-10-14
Model outputs & technical records
LLM outputs across runs
Full model traces
Recorded model configuration, reasoning, and tool conversations.
Model & dataset provenance
{
"model": "Qwen/Qwen3.8-27B",
"model_revision": "1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0",
"task_version": "17",
"output_id": "a55cec337d91cec63c5eb6b3199b7287cc8f9201d75ca14b8fabe1ea000f6e35",
"requirements_status": "needs_review",
"dataset_revision": "fc1811fa52e581ea57a35c0cf3343f8740a8ffbf",
"observed_at": "2026-10-14 17:50:09.728220+00:00"
}