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.