Christopher Kauffman: Samples of CS Teaching Materials
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 211: Object-Oriented Programming
A second course on programming for CS majors and some other engineering disciplines. This course is preceded by CS 112: Introduction to Computer Programming which is taught in Python. It is meant to introduce the Java language, quickly review procedural programming techniques and cover object-oriented principles such as information hiding, inheritance, dynamic dispatch, exception handling, interface abstraction, and generics. It also touches on basic algorithm complexity for searching and sorting and introduces some basic data structures.
Lecture Slides
Assignments
Java Jeopardy
The attached ZIP file contains a Java source file and a data file. Compile and run with the commands
> javac JavaJeopardy.java > java JavaJeopardy final.dat
It will display a GUI Java board which is used in class to facilitate a review game. Students are provided the code and data file after class to guide their review prior to midterms and finals.
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.