Christopher Kauffman: Samples of CS Teaching Materials
Table of Contents
UMN CSCI 2021: Machine Architecture and Organization
A sophomore-level course primarily for compute science majors, CSCI 2021 is preceded by the intro programming sequence (CS 1&2) and serves a variety of purposes. It introduces the C programming language and associated machine features such as pointers, memory addresses, and allocation of data in the stack and heap. Bit representations of integers, characters, and floating point numbers is discussed. Assembly programming in x86-64 is discussed in some detail. Processor and memory system internals are discussed and related to program performance. The course ends with some discussion of virtual memory and the linker/loader regime that allows for dynamical linking of programs.
Link to most recent offering: https://www-users.cse.umn.edu/~kauffman/2021/
Lecture Materials
Week | Materials | Topic |
---|---|---|
1 | Slides Code | Introduction, C Basics |
2 | Slides Code | Pointers, Addresses, Allocation |
3 | Slides Code | Binary Data/Ints |
6 | Slides Code | Assembly Language Basics |
10 | Slides Code | Processor Arch, Pipelining |
11 | Slides Code | Memory, Cache-Aware Programming |
14 | Slides Code | Virtual Memory, Paging |
Assignments
Labs
Students work on weekly labs starting a 50-minute session led by teaching assistants. They may work in groups, are offered help, and may submit until the next lab. The emphasis is on skills building and practice to prepare for higher-stakes assignments like Projects and Exams.
Projects
Individual, large-scale projects usually lasting 8-13 days. Students apply what they have learned in labs and lecture in a practical setting.
Student Feedback and Evaluations
- Midterm Feedback Survey Results collected in week 5 after the first exam. This is used to adjust course policies and practices for the remainder of the course.
- Exit Survey Results are collected at the end of the course and used to adjust future offerings of the course. This survey asks for more tailored feedback than what is asked on the Official University evaluations.
- Official UMN Student Rating of Teaching (SRTs) are collected at the end of each semester. This the linked doc is a sample from one section of CSCI 2021 offered in Fall 2021.
UMN CSCI 2041: Advanced Programming Principles
A sophomore-level course for computer science majors, CSCI 2041 serves as a 3rd programming course as it follows traditional CS 1/2 courses but introduces a variety of topics useful the modern practitioner. The course is primarily taught in OCaml but has occasionally been offered in Clojure. It is intended to teach about functional programming, type systems, persistent and immutable data, along with introducing the techniques to create new languages such as lexing and parsing. Some offerings cover proof techniques about programs and logic programming as well.
Link to most recent offering: https://www-users.cse.umn.edu/~kauffman/2041/
Lecture Materials
Assignments
Labs
Students work on weekly labs starting a 50-minute session led by teaching assistants. They may work in groups, are offered help, and may submit until the next lab. The emphasis is on skills building and practice to prepare for higher-stakes assignments like Projects and Exams.
Programming Assignments
Individual, large-scale coding projects usually lasting 8-13 days. Students apply what they have learned in labs and lecture in a practical setting.
Student Feedback and Evaluations
- Midterm Feedback Survey Results collected in week 5 after the first exam. This is used to adjust course policies and practices for the remainder of the course.
- Exit Survey Results are collected at the end of the course and used to adjust future offerings of the course. This survey asks for more tailored feedback than what is asked on the Official University evaluations.
- Official UMN Student Rating of Teaching (SRTs) are collected at the end of each semester. This the linked doc is a sample from one section of CSCI 2041 offered in Fall 2018.
UMN CSCI 4061: Introduction to Operation Systems
A senior-level course taken by computer science and computer engineering students. The class covers common external facing OS interfaces with UNIX as the primary example. Topics include process management and creation, inter-process communication and coordination, file system basics, linking and INodes, thread creation and management, and a brief introduction to sockets for network programming.
Link to most recent offering: https://www-users.cse.umn.edu/~kauffman/4061/
Lecture Materials
Assignments
Labs
Students work on weekly labs starting a 50-minute session led by teaching assistants. They may work in groups, are offered help, and may submit until the next lab. The emphasis is on skills building and practice to prepare for higher-stakes assignments like Projects and Exams.
Programming Assignments
Individual, large-scale projects usually lasting 8-13 days. Students apply what they have learned in labs and lecture in a practical setting.
Student Feedback and Evaluations
- Midterm Feedback Survey Results collected in week 5 after the first exam. This is used to adjust course policies and practices for the remainder of the course.
- Exit Survey Results are collected at the end of the course and used to adjust future offerings of the course. This survey asks for more tailored feedback than what is asked on the Official University evaluations.
- Official UMN Student Rating of Teaching (SRTs) are collected at the end of each semester. This the linked doc is a sample from one section of CSCI 2021 offered in Fall 2021.
GMU CS 100: Principles of Computing
An introductory course for non-CS majors. Its goals are to educate students about basic computer concepts, programming, and the impacts that computing has had on society. It fulfills the GMU general education outcome for Information Technology.
Lecture Slides
Assignments
Feedback
Student Evaluations
CS 310: Data Structures
A third course in programming which covers basic data structures and algorithms using the Java language. Big-O complexity analysis is introduced early and applied to standard data structures including expandable arrays, linked lists, binary search trees, balanced BSTs such as AVL and Red-Black trees, hash tables, and binary heaps. A stated goal of the course is improve student programming capability on larger-scale programming projects.
Lectures Slides
Feedback
Student Evaluations
CS 499: Parallel Computing
A special topics course on parallel computing intended primarily for juniors and seniors. Various aspects of parallel computation are covered including parallel machine architecture, memory issues, algorithm design patterns, and evaluation metrics for parallel programs. Assignments explore the practicalities of programming in distributed memory machines with MPI, shared memory machines with OpenMP and PThreads, and inter-process parallelization with Unix IPC mechanisms.
Lecture Slides
Assignments
Student Evaluations
GMU Teaching Excellence Portfolio
In the 2016-2017 academic year, I applied for and received George Mason University's Teaching Excellence Award. GMU has over 1,000 faculty members and, with support from my department, I was one of 8 winners of the annual, University-wide award. As part of the application process, I constructed a teaching portfolio with various materials and accounts of my teaching.
The winners of the award each year are listed here: GMU Teaching Excellenc Award Winners
My full portfolio is linked here: GMU Teaching Excellence Portfolio