Teaching

I have a great passion for teaching computer science, mathematics, and combinations thereof. Here are some courses I've been involved with along with a few artifacts.

United States Naval Academy

SI 413: Programming Languages Fall 2018, Fall 2013, Fall 2012, Fall 2011.
A fourth-year course introducing functional programming, general principles of programming language design, interpreters, and compilers.

IC 210: Introduction to Computing Fall 2018, Fall 2016.
Introductory computer programming class for computer science and information technology majors.

SI 204: Introduction to Computer Science Spring 2017.
Introductory computer programming class in C for computer and electrical engineers (mostly) as well as some computer science and information technology majors.

SY 301: Data Structures for Cyber Operations Fall 2016.
Third-year course on classic data structures, also incorporating object-oriented programming, some algorithm analysis, and a little cryptography, with a special focus on computer security applications.

SI 335: Computer Algorithms Spring 2016, Spring 2015, Spring 2014, Spring 2013, Spring 2012.
Third-year course on algorithm design and analysis.

SI 486H: Randomness and Computation Spring 2016, Spring 2013.
This elective course looks at the role random numbers play in improving computational processes. Covered topics range from random number generation to randomized data structures and algorithms as well as randomized complexity theory.

IC 312: Data Structures Fall 2015, Fall 2014.
Third-year course on classic data structures and basic algorithm analysis.

SI 110: Introduction to Cyber Security Spring 2015, Spring 2014.
A required course for all first-year USNA students introducing the technical foundations of computers, programs, wired and wireless networks, and the web, and the challenges in securing these systems from malicious attackers.

IC 220: Computer Architecture and Organization Spring 2012.
Second-year course introducing logic design, memory hierarchy, assembly language, and the like.

University of Waterloo

CS 240: Data Structures and Data Management Instructor, Winter 2010 and Spring 2011.
Second-year course for computer science majors covering the "greatest hits" of data structures and algorithms, along with basic complexity analysis.
I co-taught this course with Reza Dorrigiv.
Some course materials I produced: lecture modules and assignments.

CS 135: Designing Functional Programs Instructor, Fall 2008.
First-year course for computer science majors and keen mathematics students covering introductory programming techniques using Scheme.
Co-taught with 4 other instructors/professors in the department.

CS 341: Algorithms Teaching Assistant, Winter 2009.
Third-year course for computer science students on advanced topics in algorithms, focusing especially on graph algorithms, recursive analysis, and introductory complexity theory.

CS 487/687: Introduction to Symbolic Computation Teaching Assistant, Winter 2008.
Undergrad/grad course covering the algorithms for the main problems in the field: arithmetic on polynomials and integers, "fast" methods, primality testing, polynomial factorization, dense and sparse linear algebra, etc.
My tutorial on using Maple.
Two lectures on multivariate polynomials (PDF) (from 2009).

CS 135: Designing Functional Programs Instructional Apprentice, Fall 2007.
Fall 2007
First-semester intro computer science course taught in Scheme.
CS 135 Tutorials designed by me.

CS 136: Elementary Algorithm Design and Data Abstraction Instructional Apprentice, Spring 2007
Second-semester intro computer science course taught in Scheme and Java.
CS 136 Tutorials designed by me.

CS 134: Principles of Computer Science Instructional Apprentice in Winter 2007, Teaching Assistant in Fall 2006.
Second-semester intro computer science course taught in Java.

University of Delaware

CISC 181: Introduction to Computer Science Honors section: Spring '06
Second-semester intro computer science course taught in C++. Two labs I wrote: on computing factorials and on exceptions in C++ (cached)

CISC 105: General Computer Science Honors section: Fall '05
First-semester intro computer science course taught in C.

MATH 245: An Introduction to Proof Spring '06, Fall '05