Materials from past classes that I have taught.

Fall 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.**Artificial Intelligence and Pattern Recognition (CS 452/552).**Combination undergraduate and graduate course involving basic and advanced AI techniques.

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. **