Teaching
I teach in the Applied Computer Science Post-Baccalaureate program at the University of Colorado Boulder. My courses sit at the intersection of core computer science, professional development, and artificial intelligence. At the moment that includes Data Structures, Software Development Methods and Tools, Professional Development in Computer Science, and Natural Language Processing.
My approach to teaching is fairly simple. I try to make expectations clear, keep the path through the course visible, and give students enough structure and support that they can make real progress on difficult material. Computer science is not easy, especially for students who are entering the field from another background, but students usually do their best work when standards are high and the route to meeting them is concrete.
Courses at CU Boulder
CSPB 2270
Data Structures
Core data structures and algorithms with an emphasis on implementation, analysis, testing, and good engineering habits.
CSPB 3308
Software Development Methods and Tools
Version control, collaboration, testing, documentation, and the practical workflows students need for modern software development.
CSPB 3112
Professional Development in Computer Science
Career preparation, project communication, resumes, portfolios, networking, and the broader professional side of computing.
CSPB 3832
Natural Language Processing
Hands-on work with text processing, modern NLP methods, and language models, with attention to both capabilities and limits.
How I Teach
I want students to learn by doing. In practice that means writing code, testing ideas, revising drafts, debugging, reflecting on what went wrong, and then trying again. Most assignments are designed so that students show not just a final answer, but also the process of getting there.
I also try to design courses that are consistent from week to week. A predictable structure helps students focus on the work rather than on figuring out the course interface. In online teaching, that matters a great deal. I use a Start Here module, clear weekly objectives, concise tool guides, and short orientation materials so students know where to begin and what to do next.
Mentorship and Presence
One thing I care about a great deal is being present in the course. Students should know how to reach me, how quickly they can expect a reply, and what kind of help they can ask for. I use office hours, Canvas, and Piazza heavily, and I try to respond quickly enough that feedback is still useful when students receive it.
That presence is not just about answering questions. It is also about helping students build confidence. In a technical course, students can lose momentum quickly if they feel stuck for too long. My goal is to lower unnecessary anxiety while still keeping standards high.
Discussion, Reflection, and Professional Growth
Discussion is an important part of how I teach. Even in technical courses, students learn a great deal by asking questions, explaining tradeoffs, and seeing how other people approached the same problem. I require substantive participation and try to create an environment where students can contribute in different ways, including anonymous posting when that lowers the barrier to entry.
I also ask students to reflect on their process. In some courses that means short reflections on challenges, debugging, and mistakes. In others it means project updates, proposal documents, or short presentations. These smaller artifacts help me see where students are struggling, and they also help students develop habits that matter beyond the classroom.
Across my courses, I try to connect technical work to things students can carry forward into internships, graduate applications, and job searches. A clean GitHub repository, clear documentation, a thoughtful README, and a short demo video are not just course artifacts. They are useful professional signals.
Teaching in the Age of AI
The rise of large language models has changed how computing is practiced, but it has not changed the need for strong foundations. I want students to be able to use AI tools thoughtfully, not depend on them uncritically. That means understanding algorithms, data structures, testing, tradeoffs, and evaluation well enough to judge whether a generated solution is correct, appropriate, and maintainable.
In that sense, AI raises the importance of a strong computer science education rather than reducing it. Students still need to know how systems work, how to define success, how to verify output, and how to explain their choices.
More
If you would like a broader picture of my background, you can visit the About page. For a fuller record of courses, roles, and experience, see my CV.