EECS 390: Programming Paradigms

The University of Michigan
Winter 2022
Looking for Winter 2021?

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.

Welcome to EECS 390, Winter 2022!

We're glad you're here.

Lectures and labs will meet the first week of class (Jan. 5-7).

Lectures and labs will be in-person and recordings will be posted. We do not take attendance, and you do not need to attend to keep your spot in the class.

We are planning to hold exams in person. Check that you are able to take the midterm and final exams at the posted times, as we are unable to offer alternates for time conflicts with other courses.

If you are on the waitlist, make sure to follow along with the class and submit the assignments by the posted deadlines.

More details on the course format are in the syllabus.

Make sure to have a laptop and a reliable internet connection. More details in the syllabus.


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.

Open calendar in new window


Day # Topic and Readings in Notes Deadline
Mon 3 Jan No Class
Wed 5 Jan L01 Introduction 1 2
Mon 10 Jan L02 Basic Elements
Wed 12 Jan L03 Grammars
Mon 17 Jan No Class - MLK Day
Wed 19 Jan L04 Scheme
Project 1
Wed 1/19 8pm
Mon 24 Jan L05 Names and Environments
Wed 26 Jan L06 Control Flow
Wed 1/26 8pm
Functional Programming
Mon 31 Jan L07 Functions and Recursion 1 2
Wed 2 Feb L08 Higher-Order Functions
Project 2 Checkpoint
Wed 2/2 8pm
Mon 7 Feb L09 Lambdas
Wed 9 Feb L10 Continuations
Project 2
Wed 2/9 8pm
Data Abstraction
Mon 14 Feb L11 Memory Management
Wed 16 Feb L12 Functional Data Abstraction
Wed 2/16 8pm
Mon 21 Feb Midterm Exam
Mon 2/21 12pm
Data Abstraction
Wed 23 Feb L13 Object-Oriented Programming
Mon 28 Feb No Class - Spring Break
Wed 2 Mar No Class - Spring Break
Mon 7 Mar L14 Inheritance and Polymorphism
Wed 9 Mar L15 Static and Dynamic Typing 1 2
Project 3 Checkpoint
Wed 3/9 8pm
Mon 14 Mar L16 Generics
Project 3
Mon 3/14 8pm
Wed 16 Mar L17 Modules and Namespaces
Declarative Programming
Mon 21 Mar L18 Logic Programming
Wed 23 Mar L19 Logic Programming II
Project 4 Checkpoint
Wed 3/23 8pm
Mon 28 Mar L20 Logic Programming III
Wed 30 Mar L21 Constraints and Dependencies
Project 4
Wed 3/30 8pm
Mon 4 Apr L22 Macros and Code Generation
Wed 6 Apr L23 Template Metaprogramming
Wed 4/6 8pm
Mon 11 Apr L24 Template Metaprogramming II
Project 5 Checkpoint
Mon 4/11 8pm
Special Topics
Wed 13 Apr TBD
Mon 18 Apr TBD
Project 5
Mon 4/18 8pm
Final Exam
Wed 20 Apr No Class - End of Semester
Tue 26 Apr Final Exam
Tue 4/26 10:30am


Photo of Amir Kamil
Amir Kamil

12:00pm-1:30pm MW

1500 EECS

Photo of Alec Minchington
Alec Minchington

Photo of Franklin Volcic
Franklin Volcic

11:30am-12:30pm F

1690 Beyster

Photo of Norman Qining Wen
Norman Qining Wen

12:30pm-1:30pm F

1003 EECS