Materials from past classes that I have taught.


Spring 2017
  • Software Design I (CS 120). The first undergraduate course in programming for CS majors and other interested students, using the Java language.
  • Competitive Programming (CS 227).  Lab-style class on techniques, strategies, and problem types for programming competition and interview preparation.
  • Computational Thinking (CT 100).  Undergraduate general education course on the fundamental ideas driving computer science.
Fall 2016
  • Software Design I (CS 120). The first undergraduate course in programming for CS majors and other interested students, using the Java language.
  • Software Design II (CS 220).  The second undergraduate course in programming for CS majors and other interested students, using the Java language. (Co-taught with Dr. Brad Shutters.)
  • Competitive Programming (CS 227).  Lab-style class on techniques, strategies, and problem types for programming competition and interview preparation.
  • Analysis of Algorithms (CS 353).  Mathematical foundations for the study of computational methods.
Summer 2016
  • Reinforcement Learning (SCUN/UWL Cohort 5). An introduction to the conceptual aspects and practical implementation of basic agent-based learning algorithms.
  • Advanced Java Data Structures (SCUN/UWL Cohort 6). Practical use of advanced Java data structures and techniques, including hashed structures, Comparator-based sorting, functional interfaces, method references, and lambda expressions.
Spring 2016
  • Software Design II (CS 220).  The second undergraduate course in programming for CS majors and other interested students, using the Java language.
  • Discrete Computational Structures (CS 225). Undergraduate course in logic and discrete math for CS majors.
  • Competitive Programming (CS 227).  Lab-style class on techniques, strategies, and problem types for programming competition and interview preparation.
  • Software Design III: Abstract Data Types (CS 340).  The third undergraduate course in programming for CS majors, with a focus on basic data structures and elementary algorithmic analysis. Taught in Java.
Fall 2015
  • Software Design I (CS 120). The first undergraduate course in programming for CS majors and other interested students, using the Java language.
  • Competitive Programming (CS 227).  Lab-style class on techniques, strategies, and problem types for programming competition and interview preparation.
  • Artificial Intelligence & Pattern Recognition (CS 452/552).  Combination undergraduate and graduate course involving basic and advanced AI techniques.
Spring 2015
  • Software Design II (CS 220).  The second undergraduate course in programming for CS majors and other interested students, using the Java language.
  • Discrete Computational Structures (CS 225). Undergraduate course in logic and discrete math for CS majors.
  • Competitive Programming (CS 227).  Lab-style class on techniques, strategies, and problem types for programming competition and interview preparation.
  • Software Design III: Abstract Data Types (CS 340).  The third undergraduate course in programming for CS majors, with a focus on basic data structures and elementary algorithmic analysis. Taught in Java.
Fall 2014
  • Software Design I (CS 120).  The first undergraduate course in programming for CS majors and other interested students, using the Java language.
  • Competitive Programming (CS 224).  Lab-style class on techniques, strategies, and problem types for programming competition and interview preparation.
  • Discrete Computational Structures (CS 225).  Undergraduate course in logic and discrete math for CS majors.
Spring 2014
  • Discrete Computational Structures (CS 225).  Undergraduate course in logic and discrete math for CS majors.
  • Software Design III: Abstract Data Types (CS 340).  The third undergraduate course in programming for CS majors, with a focus on basic data structures and elementary algorithmic analysis. Taught in Java.
  • Introduction to the Theory of Computation (CS 453/553).  Combination undergraduate and graduate course on automata, computability, and complexity theory.
Fall 2013
  • Software Design I (CS 120).  The first undergraduate course in programming for CS majors and other interested students, using the Java language.
  • Artificial Intelligence & Pattern Recognition (CS 452/552).  Combination undergraduate and graduate course involving basic and advanced AI techniques.
Spring 2013
  • Software Design II (CS 220).  The second undergraduate course in programming for CS majors and other interested students, using the Java language.
  • Software Design III:  Abstract Data Types (CS 340). The third undergraduate course in programming for CS majors, with a focus on basic data structures and elementary algorithmic analysis. Taught in Java.
  • Computational Thinking (CT 100).  Undergraduate general education course on the fundamental ideas driving computer science.
Fall 2012
  • Software Design I (CS 120).  The first undergraduate course in programming for CS majors and other interested students, using the Java language.
  • Analysis of Algorithms (CS 353).  Mathematical foundations for the study of computational methods.
  • Programming Language Concepts (CS 421/521).  Combination undergraduate and graduate course on the fundamentals of programming language design and implementation.
Summer 2012
  • More Advanced Java (SCUN/UWL Cohort 2).  Intermediate topics in Java programming. Taught as a 2-week seminar at the South-Central University for the Nationalities, Wuhan, China.
Spring 2012
  • Software Design II (CS 220).  The second undergraduate course in programming for CS majors and other interested students, using the Java language.
  • Software Design III:  Abstract Data Types (CS 340).  The third undergraduate course in programming for CS majors, with a focus on basic data structures and elementary algorithmic analysis. Taught in Java.
  • Introduction to the Theory of Computation (CS 453/553).  Combination undergraduate and graduate course on automata, computability, and complexity theory.
Fall 2011
  • Software Design I (CS 120).  The first undergraduate course in programming for CS majors and other interested students, using the Java language.
  • Programming Language Concepts (CS 421/521).  Combination undergraduate and graduate course on the fundamentals of programming language design and implementation.
  • Artificial Intelligence & Pattern Recognition (CS 452/552).  Combination undergraduate and graduate course involving basic and advanced AI techniques.
Spring 2011
  • Software Design II (CS 220).  The second undergraduate course in programming for CS majors and other interested students, using the Java language.
  • Programming Language Concepts (CS 421/521).  Combination undergraduate and graduate course on the fundamentals of programming language design and implementation.
Fall 2010
  • Software Design I (CS 120).  The first underegraduate course in programming for CS majors and other interested students, using the Java language.
  • Analysis of Algorithms (CS 353).  Mathematical foundations for the study of computational methods.
Spring 2010
  • Computational & Systems Biology (Connecticut College, BIO/CS 206):  A team-taught interdisciplinary course introducing students from biology and computer science to the biological concepts, programming techniques, and technical tools used in modern systems biology research.
  • Artificial Intelligence for Non-Majors (Wesleyan University, COMP 252):  A course for students with no real computer science background, introducing them to the technical and philosophical issues behind AI, past, present and future.
Fall 2009

Under construction.