EECS 390: Programming Paradigms

The University of Michigan
Winter 2025
Looking for Winter 2024?

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

We're glad you're here.

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

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 contents of this website are tentative and subject to change.

What's here is our current plan for next semester. It will likely evolve as we get closer to the start of the term.

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

People

Photo of Amir Kamil
Amir Kamil

akamil@umich.edu

1:30pm-3pm MW

1670 BEYSTER