EECS 390: Programming Paradigms

The University of Michigan
Winter 2023
Looking for Winter 2022?

This is an archive of the Winter 2023 site. The current site is available here.

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.


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


Photo of Amir Kamil
Amir Kamil

1:30pm-3:00pm MW

2505 GGBL

Photo of Carter Galbus
Cartur Galbus

12:30pm-1:30pm F

1303 EECS

Photo of Nicole Lam
Nicole Lam
Photo of Michelle Liu
Michelle Liu

1:30pm-2:30pm F

3150 Dow

melting face emoji
Photo of Vanessa Su
Vanessa Su
Photo of Norman Qining Wen
Norman Qining Wen

11:30am-12:30pm F

2150 Dow