Here is a list with brief descriptions of the courses I’ve taught at the University of Michigan. Course descriptions are taken from the CSE@UM website (see links).

ENGR 101. Introduction to Computers and Programming.
Engineering 101 focuses on the development of algorithms to solve problems of relevance in engineering practice and on the implementation of these algorithms using high-level computer languages. It is centered on quantitative and numerical problems that are suited to computational solutions. These often arise as part of larger, more complex problems in engineering practice. In addition to the problem-solving component, students who take Engineering 101 will learn aspects of the C++ programming languages and be exposed to the MATLAB programming language.
EECS 183. Elementary Programming Concepts.
Fundamental concepts and skills of programming in a high-level language. Flow of control: selection, iteration, subprograms. Data structures: strings, arrays, records, lists, tables. Algorithms using selection and iteration (decision making, finding maxima/minima, searching, sorting, simulation, etc.) Good program design, structure and style are emphasized. Testing and debugging.
EECS 280. Programming and Introductory Data Structures.
Techniques and algorithm development and effective programming, top-down analysis, structured programming, testing, and program correctness. Program language syntax and static and runtime semantics. Scope, procedure instantiation, recursion, abstract data types, and parameter passing methods. Structured data types, pointers, linked data structures, stacks, queues, arrays, records, and treesbr
EECS 281. Data Structures and Algorithms.
Introduction to algorithm analysis and O-notation; Fundamental data structures including lists, stacks, queues, priority queues, hash tables, binary trees, search trees, balanced trees and graphs; searching and sorting algorithms; recursive algorithms; basic graph algorithms; introduction to greedy algorithms and divide and conquer strategy.
EECS 282. Information Systems Design and Programming.
Techniques for algorithm development and programming. Learning a programming language, such as Java, which is suitable for designing enterprise-scale information systems; data structures including stacks, queues, trees, and dictionaries; recursion; program complexity; object-oriented design; handling exceptions, debugging, and testing; introduction to database design with JDBC and SQL.