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.
SI 413: Programming Languages
Fall 2013, Fall 2012, Fall 2011.
A fourth-year course introducing functional programming, general principles of programming language design, interpreters, and compilers.
SD 212: Data Science & Programming II
Second programming course for Data Science majors, building independence and depth in Python programming with propular packages such as pandas and numpy, as well as introducing regular expressions, error handling, and basic multithreading. The usage of the bash shell and standard command-line utilities for file manipulation and data cleaning is also introduced.
SD 211: Intro to Data Science and Programming
Intro course for the Data Science major, teaching the foundation of computer programming alongside basic data science concepts and skills needed to process and analyze structured and unstructured digital data.
SI 486M: Randomness and Computation
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.
SI 204: Introduction to Computer Science
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
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.
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.
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
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 136: Elementary Algorithm Design and Data Abstraction
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.
CISC 181: Introduction to Computer Science
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
First-semester intro computer science course taught in C.
MATH 245: An Introduction to Proof Spring '06, Fall '05