EECS 390: Programming Paradigms

The University of Michigan
Winter 2024
Looking for Winter 2023?

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 2024!

We're glad you're here.

Lectures and labs will meet the first week of class (Jan. 10-12).

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.

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.


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


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


Photo of Amir Kamil
Amir Kamil

12pm-1:30pm MW

1010 DOW

Photo of Carter Galbus
Carter Galbus

4:30pm-6:30pm Th

185 EWRE

1:30pm-3:30pm F

2166 DOW

Photo of Norman Qining Wen
Norman Qining Wen

11:30am-1:30pm F

1200 EECS

3:30pm-5:30pm F

2150 DOW