EECS 390: Programming Paradigms

The University of Michigan
Winter 2026
Looking for Winter 2025?

Survey of programming language features and paradigms, with a focus on how to effectively use them. Introduces common features for structuring program execution, data, and resource management. Exploration of programming paradigms including imperative, functional, object-oriented, and declarative paradigms, as well as advanced techniques such as metaprogramming. Students will gain programming experience in large projects that incorporate these paradigms and techniques.

See the syllabus for all the details.

Notes

The focus of EECS 390 is on how to effectively use programming languages and paradigms, while EECS 490 (Programming Languages) is focused on programming-language design and implementation. The two courses are not replacements for one another; rather, they are complementary, and we recommend students take both to gain a comprehensive understanding of programming languages. Both courses are distinct from EECS 483 (Compiler Construction), which is focused on building compilers (e.g. in-depth discussion of lexing and parsing, intermediate forms, dataflow analysis, optimization, and so on). Students can take all three courses for credit.

EECS 390 is not a survey of a bunch of different programming languages. It covers different language features and patterns, with the intent of giving you the background you need to learn and make effective use of new languages. But it does not give you direct experience with numerous languages.

Calendar   Open in Google Calendar Add to My Calendar

Schedule

Day # Topic and Readings in Notes Deadline
Foundations
Mon 5 Jan No Class
Wed 7 Jan L01 Introduction 1 2
Fri 9 Jan Lab 01 No Class - Lab 1 Asynchronous
Mon 12 Jan L02 Basic Elements
Wed 14 Jan L03 Scheme
Fri 16 Jan Lab 02 Python, Scheme, and Value/Reference Semantics
Mon 19 Jan No Class - MLK Day
Wed 21 Jan L04 Grammars
Project 1
Wed 1/21 8pm
Fri 23 Jan Lab 03 Scheme and Grammars
Mon 26 Jan L05 Names and Environments
Wed 28 Jan L06 Control Flow
HW1
Wed 1/28 8pm
Fri 30 Jan Lab 04 Scoping, Parsing in Scheme, and Exceptions
Functional Programming
Mon 2 Feb L07 Functions and Recursion 1 2
Wed 4 Feb L08 Higher-Order Functions
Project 2 Checkpoint
Wed 2/4 8pm
Fri 6 Feb Lab 05 Functions
Mon 9 Feb L09 Lambdas
Wed 11 Feb L10 Continuations
Project 2
Wed 2/11 8pm
Fri 13 Feb Lab 06 Generators and Lambdas
Data Abstraction
Mon 16 Feb L11 Memory Management
Wed 18 Feb L12 Functional Data Abstraction
HW2
Wed 2/18 8pm
Fri 20 Feb Lab 07 Functional Data Abstraction and Memory Management
Midterm
Mon 23 Feb Midterm Exam
Midterm
Mon 2/23 7pm
Special Topics
Wed 25 Feb Program Analysis
Fri 27 Feb No Class - Spring Break
Mon 2 Mar No Class - Spring Break
Wed 4 Mar No Class - Spring Break
Fri 6 Mar No Class - Spring Break
Data Abstraction
Mon 9 Mar L13 Object-Oriented Programming
Wed 11 Mar L14 Inheritance and Polymorphism
Project 3 Checkpoint
Wed 3/11 8pm
Fri 13 Mar Lab 08 Object-Oriented Programming and Vtables
Mon 16 Mar L15 Static and Dynamic Typing 1 2
Project 3
Mon 3/16 8pm
Wed 18 Mar L16 Generics and Modules 1 2
Fri 20 Mar Lab 09 Generics and Project 4 Overview
Mon 23 Mar L17 Modules and Design Patterns
Concurrent Programming
Wed 25 Mar L18 Parallel Computing
Project 4 Checkpoint
Wed 3/25 8pm
Fri 27 Mar Lab 10 Design Patterns and uC
Mon 30 Mar L19 Asynchronous Tasks
Metaprogramming
Wed 1 Apr L20 Macros and Code Generation
Project 4
Wed 4/1 8pm
Fri 3 Apr Lab 11 Asynchronous Tasks, Macros, and Project 5 Overview
Mon 6 Apr L21 Template Metaprogramming
Wed 8 Apr L22 Template Metaprogramming II
HW3
Wed 4/8 8pm
Fri 10 Apr Lab 12 Template Metaprogramming
Declarative Programming
Mon 13 Apr L23 Logic Programming
Project 5 Checkpoint
Mon 4/13 8pm
Wed 15 Apr L24 Constraints, Dependencies, and Matching 1 2
Fri 17 Apr Lab 13 Logic Programming and Exam Review
Special Topics
Mon 20 Apr TBD
Project 5
Mon 4/20 8pm
Final Exam
Wed 22 Apr No Class - End of Semester
Fri 24 Apr No Class - End of Semester
Mon 27 Apr Final Exam
Final
Mon 4/27 1:30pm

People

Photo of Amir Kamil
Amir Kamil

akamil@umich.edu

12pm-1:30pm MW
2166 DOW