Courses Taught

In the fall of 2017 I am teaching CS 4630: Defense Against the Dark Arts (github
octocat) and CS 4970: Capstone Practicum I (github

A full list of courses I have taught is below. Many of these courses have had different course numbers, including the CS 451 and 4501 numbering for special topics; only the current course numberings are listed here.

  • CS 1110: Introduction to Computing (5 semesters: spring '05, fall '05, spring '06, fall '06, spring '07)
  • CS 1111: Introduction to Computing, advanced section (1 semester: fall '04)
  • CS 2102: Discrete Math (3 semesters: fall '04, spring '05, spring '07)
  • CS 2150: Program and Data Representation (22 semesters: every fall and spring semester from fall '07 through spring '17, fall 2018, spring 2019)
  • CS 4102: Algorithms (2 semesters: fall '10, spring '11)
  • CS 4240: Object Oriented Design (3 semesters: spring '06, spring '08, fall '09)
  • CS 4501: Advanced Algorithms and Implementations (1 semester: fall '11)
  • CS 4501: Introduction to Cybersecurity (2 semesters: fall 2018, spring 2019)
  • CS 4610: Programming Languages (1 semester: fall '05)
  • CS 4630: Dark Arts (8 semesters: spring '09, summer '10, summer '11, spring '12, summer '12, summer '16, summer '17, fall '17)
  • CS 4730: Computer Game Design (3 semesters: fall '08, spring '10, fall '11)
  • CS 4810: Computer Graphics (3 semesters: fall '06, fall '07, summer '09)
  • CS 4970: Capstone Practicum I, a.k.a. Service Learning Practicum (7 semesters: spring '12, and each fall from 2012 to 2017)
  • CS 4971: Capstone Practicum II, a.k.a. Service Learning Practicum (5 semesters: each spring from 2013 to 2017)
  • ENGR 3580: The Science Of Beer Brewing (3 semesters: spring '08, spring '09, spring '10)
  • ENGR 3580: Wine Engineering (2 semesters: fall '07, fall '08)


I maintain the Computing undergraduate handbook, which contains all of the requirements for the three computing degrees: BS CS, BA CS, and BS CpE, as well as the minor.

I am the advisor of the local chapter of the Association for Computing Machinery (ACM), the coach for UVa's teams in the International Collegiate Programming Competition (ICPC), and the advisor for the UVa High School Programming Contest (HSPC). Our ICPC team has qualified for the world finals in 5 of the last 7 years, and our HSPC group will be hosting it's 5th annual High School Programming Contest this spring of 2015. Read more.

Teaching Portfolio

In the spring of 2005, I took part in a Teaching Resource Center workshop that focused on the creation of a teaching portfolio. The result is here. The course materials have generally not been updated since then, though.

Teaching Awards

I've won one or two. I have the list here somewhere...

Teaching Evaluations

I believe that who fills out a teaching evaluations should be kept anonymous, and then the entire evaulation made public, and I do so with mine. I aim to include all of my course evaluations, not just a few selected "good" ones. Occasionally, however, some students submitted comments that were not appropriate for public viewing (due to inappropriate language, or mentioning themselves or somebody else, evaluating a teaching assistant, etc.). These parts of the comments have been redacted, and clearly labeled as such. Any responses that are not about me are also redacted -- this is particularly true when, in my CS 2150 courses, I ask them to comment on the teaching assistants; all of those answers have been redacted. Some of my evaluations are awaiting redaction (I just haven't gotten around to it yet), which is why they are not available. They will be there eventually...

Course evaluations from fall 2009 and earlier can be found on my teaching portfolio page.