Courses Taught

I have had the pleasure of teaching at almost every level of the curriculum. I taught freshman in CS160 (Introductory Programming, now CS163/4), sophmores in CS253 (Software Engineering in C++), and seniors in CS410 (Computer Graphics) and CS440 (Artificial Intelligence). I even taught CS420 (Algorithms) once. At the graduate level I teach CS510 (Image Computation) and the old CS612 (Computer Vision) which is now CS793 (Research Seminar, topic Computer Vision).

Current Teaching

In Fall 2017 I am teaching CS253 : Software Engineering in C++. This is a fun but challenging course to teach. The students have already had two or three semesters of programming. They know Java, the basics of object oriented programming, and data structures. They have also had a course in computer architecture (CS270). But the gap in their understanding between high-level Java and the registers, stack frames and caches of computer architecture is huge. It is the job of CS253 to fill it in, to teach them how objects and methods become executable programs.

CS253 has another role, too: to make them more sophisticated programmers. Prior to CS253, they have worked on mostly small assignments, where much of the high-level design at the level of objects was done for them. In CS253 they have to build a large program from scratch, including its design, implementation, testing and debugging. The assignments build on each other, so the code they write in August is what they are expanding on in December. They quickly find that clean, well-designed and well-documented code is its own reward. We also give them the tools (debuggers, profilers, etc.) needed to develop these programs. The idea is that CS253 builds up their individual skills, and then CS314 teaches them to work and program in teams.

Unfortunately, there is no good textbook for this material; we use Weiss’ C++ for Java Programmers, but its badly dated. So I have developed not only PowerPoint slides but also written notes and code examples to supplement the text (click here and go to the progress page to see this semester’s version). The most innovative aspect of the course are the exams. Students are given code written by the instructor prior to the exam to take home and study and execute. This code implements the concepts stressed in the lectures. When they come in for the exam, they are given the same code (this time with a main function) and asked a series of questions about it. This motivates students to read and understand the code and reinforces the concepts introduced through lectures and homeworks.

If student feedback is any measure, students find CS253 challenging but worthwhile. The comments I receive are almost always positive (albeit often preceded by “I had to work so hard…”), and despite being a large lower-division class the ASCSU professor recommendations have ranged from 4.48 (Fall 2014) to 4.89 (Fall 2016)..

ASCSU Student Surveys

Every year, students fill out class surveys, rating the professor, the textbook, online materials, the classroom, etc. Students should know that we take these surveys seriously, and use them to improve our classes. Signed comments are particularly useful and therefore particularly appreciated. These surveys also have a second purpose, however; they provide information to students about professors to help the students pick their courses. One question in particular was desigend for this purpose: it asks students how they would rate their professor. Since 2011, this information for all CSU professors has been available here, although there are obvious gaps and errors in the record. In my case, Spring 2016 is missing and the 2015 GTA recitation evaluations are somehow included as mine. What follows below is a cleaned up record of average student responses to this question for courses I have taught since 2011.

Students should use ASCSU survey results with caution. There are many factors that go into the student experience and impact the scores that may have nothing to do with the professor. For example, graduate courses in general tend to get higher scores than undergraduate courses (across all instructors), and large classes get lower scores than small ones. Long-term trends across many courses and semesters are probably meaningful, as are large differences in scores (say a full point or more). Small differences generally do not matter.

The format given is course and semester, followed by the average score to question 23 (How would you rate this instructor) and the number of responses in parentheses. If you click on a class/semester, you will see the student’s written comments for that semester.

  • CS510 Spring 2017 : Avg. 4.94 (17)
  • CS253 Fall 2016 : Avg 4.68 (53)
  • CS253 Spring 2016 : Avg 4.89 (57)
  • CS510 Spring 2016: Avg. 5.0 (9)
  • CS410 Fall 2015: Avg. 4.70 (23)
  • CS253 Spring 2015 : Avg. 4.67 (48)
  • CS253 Fall 2014: Avg. 4.48 (29)
  • CS510 Spring 2014: Avg. 5.0 (7)
  • CS253 Fall 2013: Avg. 4.62 (39)
  • CS510 Spring 2013: Avg. 5.0 (5)
  • CS253 Fall 2012: Avg. 4.64 (28)
  • CS612 Spring 2012: Avg. 4.8 (5)
  • CS410 Fall 2011: Avg. 4.76 (34)
  • CS510 Spring 2011: Avg. 5.0 (9)