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

SD 212: Data Science & Programming II Spring 2024, Spring 2023.
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.

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

SD 211: Intro to Data Science and Programming Fall 2023, Fall 2022.
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.

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

SI 486I: Randomized and Blockchain Technology Spring 2022.
Upper-level elective course on how cryptocurrencies, blockchains, and smart contracts work, from a technical and economics perspective.

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

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

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

SM 242: Discrete Math and Probability Fall 2019.
Third-year course for computing majors introducing key concepts from set theory, logic, proofs, linear algebra, probability, and statistics.

SI 486M: Randomness and Computation Spring 2019, 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 221: Systems Programming Spring 2019.
Second-semester course on the foundations of Unix and interacting with the operating system via the shell (bash) and the system call API (in C).

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

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