I just got back my Spring 2019 teaching evaluations, so I wanted to do a second self-evaluation on how the CISC320 Algorithms course went.

I wrote the first draft of this blog post without referring to my previous self-evaluation. After re-reading that post, I went back and added a comment to each section highlighting comparisons from the previous semester.

What Went Well

Interpreting student feedback is a little tricky this semester. Many of the comments in my evaluation are contradictory - some students wanted more programming assignments, and some students wanted less. However, here are the things I am pleased about. No course is perfect, and there are always things to fix.


I thought my projects’ trajectory went well enough. I am concerned that some of them were more amusing to me than to my students - in particular, “Dungeons and Djikstra’s” (applying Djikstra’s algorithm to play a board game) was created almost entirely for my own amusement. However, the use of autograding greatly improved the delivery of these projects, from my perspective.

The Whiteboarding interviews went more smoothly this time, without the time constraints from last semester. Several students mentioned them positively in the end-of-semester evaluations. Certainly, it was my most popular lecture - some students came up and thanked me afterwards. This skill, however artificial and controversial, is such a valuable one. I am glad that I got to expose students to it.

I created a second “out there” assignment at the end of the semester to replace some dry lectures on NP-Complete problems. Students (either pairs or individuals) selected NP-Hard problems and had to create an Infographic about it. They were largely graded on the usefulness and correctness of their final product, but I was impressed by the high quality of many of the Infographics. I think that project deserves its own blog post or poster, once I get its IRB figured out.

Last semester: Clearly there was vast improvement from last semester, since students no longer complained about their difficulty. I’m glad I invested so much time redesigning the assignments, tying them to the lecture more heavily, and incorporating autograding.


I think the classroom experience was improved this semester. I had more time to develop interactive lectures, worksheets, and activities this Spring, and a few of the classes were dramatically better. I see some positive remarks from students in this regard. In particular, I was happy that students apparently thought I was humorous. It’s hard to say if your jokes are landing sometimes.

Some students correctly pointed out that a few of my lecture examples needed work - at least one specific criticisms aligns with a lecture that I didn’t have time to prepare for adequately (I blame SIGCSE). I was halfway through the explanation when I realized that the example utterly failed to demonstrate anything interesting about the algorithm, and I had no class time to create/deliver a new one. Even worse, this was right before break. I had hoped to go home and record a better explanation, but I ran out of time for even that. It’s frustrating to review that experience, and to see it from the students’ perspective. Still, sometimes you just have to accept that you had limited time and resources, and the outcomes flowed accordingly.

Last semester: A few specific cases aside, it seems like the lectures went much better this semester. I don’t recall having any “what does this slide mean?” moments this semester. I also didn’t walk away from 320 with the same sense of fatigue I had in the Fall.


Once again, getting students back grades and feedback was a bit of a struggle. There weren’t the same issues as last semester, but I don’t think I met my “less than two weeks” goal. Getting TAs to grade like autograders is hard, and I don’t know how much of this has to be adjusting my expectations vs. better TA support vs. something else. Clearly, however, there is room for improvement.

I do observe that one of my new reviews on RateMyProfessor is about my “harsh” grading, and one student wrote me a nice long paragraph in my course evaluation about the same subject (coincidence?). Based on the quantitative survey questions, the vast majority of the class disagreed. Of course, the only thing I really graded was the exams, which I redesigned heavily from previous semesters. In particular, I think I had significantly lower expectations than most previous versions of this course. If you think my exams were hard this semester, than you should be glad you weren’t taking the original versions!

The true reality here is that I am probably too light on my expectations. Ellie observed recently that I try and design courses such that everyone will pass. This speaks to my philosophies on connecting assessments directly to instruction and how difficulty should be balanced. Certainly, we have some students who are too far outside the bell curve to benefit, but I do believe that I set the bar a little low compared to some instructors. Not that my assessments are easy, but they could have more tough exam questions. Would I change my questions? I’m not sure, but it’s something I think I need to consider about my teaching philosophy.

Collaboration in Algorithms

Several students commented on my tough words against out-of-class collaboration. Some of this is merited, and suggests I need to work on how I communicate expectations about collaboration. However, I think there is a more fundamental dissonance that needs to be addressed. One student specifically criticized my policies that students should avoid discussing homework problems and projects outside of class, pointing out the value of collaboration on learning. Yet, I think that this course is somewhat exceptional in that it’s a critical time for students to struggle individually on complex algorithmic problems.

I refer to a “hazing” mindset when teachers want students to have bad experiences because they had bad experiences. I think this mindset is a negative one that reflects a lack of empathy. Things shouldn’t be bad for the sake of being bad, but struggle is not always a bad thing, and I don’t think I went into this course with a hazing mindset.

I wanted students to spend time without getting external help working on the problems. One of my most valuable learning experiences from 320 was a tough algorithmic problems for homework. Sitting down and tackling each question by myself was a struggle, but one of the experiences that really leveled me up as a Computer Scientist. Ideally, each puzzle should force you to think and consider new angles of attack.

Ultimately, I have no power over my students outside of class. If they want to go home and collaborate on questions, I cannot stop them. Sure, I can catch some students explicitly cheating - and we did, sadly. But just sharing of ideas isn’t something anyone can really track. Therefore, I believe it is my job to establish the atmosphere and communicate expectations on how they should interact. Perhaps I should have framed them as take-home quizzes instead of simple homework questions, to better articulate my vision.

The criticism has bigger point looming inside of it. If I thought that those algorithmic problem-solving questions were so important, why were they isolated homework questions? Collaboration has value, so why couldn’t there have been structured in-class discussion after questions were due, where students could talk about the answer AND their problem-solving strategies? I suppose in retrospect, the reason has to do with the slow-grading turn around. I typically avoid discussing assignments until they are graded. I think that, in a course like Algorithms, that impulse is not tenable. I also shy away from relying too much on class discussion, because of how difficult it is to keep students on task. But that’s a pedagogical tactics problem that I think will be fixed with more teaching experience.


In the end, I would say I did just fine teaching Algorithms this past year. The average on my assessments was satisfactory and my teaching evaluations were generally positive. I saw improvement from the Fall to the Spring, and if I taught again I see places I could make further improvements.

I am glad I taught the course. Forcing myself to move outside my introductory zone into a serious upper-division course has definitely broadened my perspective. Interacting with more mature CS majors was fun, and I would like to do so again. However, I think I would like to avoid teaching a Theory course again any time soon. I find it difficult to be motivated about the material, and having to do constant review is tiring. Hopefully, I get a chance to teach some more practical upper-division courses on Web Development or Data Science, at some point.