Courses

Courses

Courses are where a lot of the public-facing story becomes concrete.

This page gives a cleaner overview of the kinds of courses I teach and the kinds of materials that can grow here over time: notes, prompts, reading lists, project pathways, and course-adjacent resources.

Programming sequence

Introductory programming and the move toward implementation confidence

These courses help students move from syntax anxiety toward structured problem solving, code reading, debugging, testing, and explanation.

Algorithms and structures

Data structures, algorithms, and the discipline of technical choices

This lane is where design decisions become more explicit: tradeoffs, complexity, representation, and why one implementation strategy is better than another.

Discrete and formal reasoning

Logic, proof, abstraction, and mathematical structure in computing

These courses help students write clearer arguments, inspect assumptions, and see why abstract structure matters in technical practice.

What can grow here

Over time this page can become a useful public layer for students, collaborators, and anyone trying to understand how I teach.

I do not want this to become a dumping ground. The goal is a clean set of well-scoped materials: course overviews, selected notes, project prompts, office-hours guidance, and links that help students get oriented without clutter.

  • Course maps and concise descriptions of what students practice.
  • Selective notes or reading lists when they are genuinely useful publicly.
  • Project prompts and independent-study entry points.
  • Practical guidance on office hours, advising, and how to start a conversation well.

Teaching themes that recur across courses

  • Clarity before cleverness.
  • Formal reasoning as part of technical practice.
  • Revision as a normal part of strong work.
  • Projects that end with something another person can read, inspect, or use.

Representative course areas

A table works well when the page needs to be concrete without turning into a CV dump.

Course areaExamplesWhat students practice
Programming foundationsIntroduction to Programming I and IIProblem decomposition, debugging, testing, and communication through code
Core CS structureData Structures and Algorithms, Discrete Structures in CSRepresentation, efficiency, proof, abstraction, and technical argument
Formal reasoningFoundations in Discrete and related proof-oriented workLogical precision, symbolic thinking, and the habit of justifying claims carefully
Interdisciplinary foundationsAnalytical Inquiry, mathematics background courses, cybersecurity-adjacent teachingBridging concepts across domains and helping students see structure clearly

Where to go next

If you want the philosophy behind the courses, go to Teaching. If you want the work that grows out of them, go to Projects.