Wade Fagen-Ulmschneider

Teaching Professor, Computer Science

Follow: profwade · wadefagen · @profwade_

Teaching Overview

I believe that world-class education is education that is worth creating and worth sharing. Education should be creative, exploratory, and fun — all of my courses contain projects with significant “creative components” where you create something original and unique that you can share with others.

Additionally, I believe in free, open-access to educational materials. You will find all of my course websites to be public and open to all, and a collection of course notes and videos below when they’re available for each course. If you find any of it useful, feel free to use it (and, optionally, let me know so I can know it’s useful to keep doing it).


Courses Taught

Introduction to Computer Systems (CS 340)

Basics of computer systems. Number representations, assembly/machine language, abstract models of processors (fetch/execute, memory hierarchy), processes/process control, simple memory management, file I/O and directories, network programming, usage of cloud services. Credit: 3 hours.

Introduction to Computer Systems is a modern approach to computer systems and one of the newest courses in the CS core curriculum, teaching students the foundational of computer architecture, systems progrmaming, and cloud computing. CS students can either take a dedicated architecture course (CS 233) and a dedicated systems course (CS 340) or take CS 340 to fulfill both requirements. (CS 340 is a replacement of CS 240, moving the course to an upper-level core course.)


Data Science Discovery (STAT 107 / CS 107 / IS 107)

Data Science Discovery is the intersection of statistics, computation, and real-world relevance. As a project-driven course, students perform hands-on-analysis of real-world datasets to analyze and discover the impact of the data. Throughout each experience, students reflect on the social issues surrounding data analysis such as privacy and design. Credit: 4 hours.

Data Science Discovery is the first course in the Data Science program at The University of Illinois, teaching students introductory data science skills including foundational statistics, Python programming (with a heavy emphasis on pandas), and the social impact of data. I developed this course with Statistics professor Karle Flanagan specifically for students with no existing background in data science. The course has no course prerequisites, and serves as a quantitative reasoning gened at Illinois. We piloted the course in Spring 2019 to 20 students from 20 different majors and now this course reaches nearly 500 Illini each year.


Introduction to Computer Systems (CS 240)

Basics of computer systems. Number representations, assembly/machine language, abstract models of processors (fetch/execute, memory hierarchy), processes/process control, simple memory management, file I/O and directories, network programming, usage of cloud services. Credit: 3 hours.

Introduction to Computer Systems is a modern approach to computer systems and one of the newest courses in the CS core curriculum, teaching students the foundational of computer architecture, systems progrmaming, and cloud computing. CS students can either take a dedicated architecture course (CS 233) and a dedicated systems course (CS 241) or take CS 240 to fulfill both requirements.


Accelerated Computer Science Fundamentals Specialization (Online MOOCs with Coursera)

Data Structures and Algorithms in C++. Learn fundamentals of computer science while implementing efficient data structures in C++. Credit: Illinois-Coursera Certificate.

Accelerated Computer Science Fundamentals is a Coursera Specialization comprised of three individual MOOCs that provide learners foundational skills in data structures, algorithms, and algorithmic analysis. Initially developed as a “leveling” course for incoming students in Illinois’ Online Masters of Computer Science program, this course was later refactored into three MOOCs and offered to the world to learn computer science fundamentals. Nearly 100,000 learners have enrolled in it to date, and all three MOOCs are ranked as the top MOOCs offered by Computer Science at Illinois.


Courses for International Scholars Studying at Illinois

By invitation from Illinois International, I have had the privilege of teaching students from around the world as they come to study at The University of Illinois. To date, I have been invited to share the best of Illinois education with three different cohorts of international scholars:


Operating System Design (CS 423)

Organization and structure of modern operating systems and concurrent programming concepts. Deadlock, virtual memory, processor scheduling, and disk systems. Performance, security, and protection. Credit: 3 OR 4 hours.


Data Structures (CS 225)

Data abstractions: elementary data structures (lists, stacks, queues, and trees) and their implementation using an object-oriented programming language. Solutions to a variety of computational problems such as search on graphs and trees. Elementary analysis of algorithms. Credit: 4 hours.


Data Driven Discovery (CS 205/CS 305)

Introduction to techniques for data analytics and visualization through the use of weekly data sources from a wide selection of domains. Project-based course with multiple projects; each project requires the creation of a data visualization. Specific emphasis is placed on increasing programming fluency, understanding of computational foundations, and framing problems for a data-centric workflow. Credit: 4 hours.


Intro Computing: Non-Tech (CS 105)

Computing as an essential tool of academic and professional activities. Functions and interrelationships of computer system components: hardware, systems and applications software, and networks. Widely used application packages such as spreadsheets and databases. Concepts and practice of programming for the solution of simple problems in different application areas. Intended for non-science and non-engineering majors. Credit: 3 hours.


CS 241: System Programming

Basics of system programming, including POSIX processes, process control, inter-process communication, synchronization, signals, simple memory management, file I/O and directories, shell programming, socket network programming, RPC programming in distributed systems, basic security mechanisms, and standard tools for systems programming such as debugging tools.


Accolades