CS247: Software Engineering Principles | Spring 2025 | Sessional Lecturer, 1 section, Sole Instructor

Course Description

CS 247: Software Engineering Principles

Systematic methods for designing, coding, testing, and documenting medium-sized programs. Major topics include abstraction, modularity, software modeling, object-oriented programming and design, generic programming, testing and debugging.

Student Course Perceptions

Explanations of course concepts: 93%

Creating a supportive learning environment: 96%

Stimulating student interest: 91%

Overall instructor effectiveness: 93%

Click here for full data

My Thoughts

The previous entry from my last time teaching mentioned feeling burnt out and needing a break. This term was my first time as an instructor since that post, and also my first time teaching as a PhD student instead of as a Master’s student. It also marks the longest gap in teaching (2 terms “off”) since my first time as an instructor in the Fall 2022 term. In reality, these 2 terms off did not constitute much of a break; my first 8 months as a PhD student was peppered with a variety of challenging circumstances in both my academic and personal life which honestly left me more exhausted going into this position than I would have liked. Nevertheless, the term has concluded, with mostly positive results.

Throughout this term, I balanced being the sole instructor for this course with submitting a paper for a project I’ve been working on for the first year of my PhD. I think this term was helpful to prove to both myself (and hopefully my supervisor) that I can effectively balance teaching with my responsibilities as a researcher.

With all of this being said, I do not feel particularly inclined to teach CS247 again in the near future. My reasoning is as follows:

  1. Being the sole instructor for a course is a lot of responsibility. As I have mentioned previously, it does impart significantly more stress knowing that I am ultimately in charge of all decision making. I am often reminded that any missteps I may make will reflect poorly on me, and could potentially impact my career negatively in the long run. This is in contrast to teaching with co-instructors where I can rely on more experienced professors to help with group decision making. Furthermore, in CS247 I am required to update each assignment and design new questions for the midterm and final exams, whereas with co-instructors this burden is shared. Finally, sessional pay is calculated per-section, so even though CS247 has consistently required significantly more work than other teaching positions I have held, it pays the same basic rate of $9000 for the term.
  2. From a resume perspective, I don’t think I have much further to gain from teaching CS247 again. This year marks the third time proving that I can manage the logistics of running a course by myself, and that I can teach effectively at the 2B level. Friends and colleagues involved in teaching at the school have suggested that the best way to strengthen my teaching resume at this point would be to teach something other than CS246 and CS247.
  3. I don’t love the way the course content is set up for CS247. As previously mentioned, there is no standard set of course notes for CS247 maintained by a dedicated professor. As a result, the course picks up bits and pieces from their prior course CS138 and tries to build a structured narrative around this, but it is difficult to do so with the wide range of abilities found in the SE cohort.
  4. SE cohorts can be difficult to teach to. The students have a tendency to be very vocal when they are displeased, and since it is impossible to please everyone in a course, every term there are students who write long Piazza posts expressing their displeasure with the course. Despite other teaching faculty’s advice that not every concern needs a response, I struggle with leaving complaints unanswered, which results in me engaging with these posts even when the arguments aren’t being made in the best faith. As an example, a student complained about the relevance of the course material, while requesting that we spend time learning about C++ reflection, a set of language features that were only ratified by the C++ committee halfway into the term, and likely won’t have full compiler support for a number of years into the future. Multiple times with SE students I have had to intervene when students have written rude emails to the course ISA over handmarking decisions that are worth fractions of percentage points towards their final grade; I have never had to make such interventions in other courses. I do not wish to make it seem as if all SE students behave like this; the vast majority are pleasant and easy to work with. Nevertheless, the near-guarantee that there will be a subset of challenging students only adds to the difficulty and stress of managing the course’s workload.

Changes From Last Term

There were a couple of changes in CS247 from my last offering.

  1. In previous offerings of CS247, students had noted that they felt unprepared for multiple choice, true/false, and short answer questions on the midterm. In an attempt to help prepare students better, I started the term by creating Blookets (essentially a similar product to Kahoot with less expensive licensing) with examples of such questions. We would start the class by playing the Blooket (with no marks associated) just as a fun activity to refresh their memory and give them an extra resource to prepare with. Multiple students mentioned them in their course review, so I would say these were successful. I unfortunately stopped creating these halfway through the term; the creation of extra questions for each lecture was increasing my workload significantly and I found it difficult to keep up as I neared the paper deadline for my research. In addition, the only feedback I received on Piazza was that the Blooket had further convinced a student of the irrelevance of the course material, which significantly impacted my motivation to keep developing them. Perhaps a good lesson for myself to ignore the vocal minority on Piazza and instead to follow my gut and do what I think is right.
  2. Previous offerings of CS247 had my handwritten notes posted after each lecture. The same is true for this offering, though my ISA Robyn also made an unprompted offer to type up notes during each lecture. Students left a lot of positive feedback about notes being available in this format, so this may be something I ask of ISAs in the future.
  3. Finally, I did more preparation for my lectures when we covered design patterns. I think this helped reduce some of the complaints from the previous year about design patterns feeling unmotivated: many of the students from this term indicated design patterns as one of the most useful things they learned in the course.

What would I change

Although the course content for CS247 picks up in a little bit of an awkward place, I do believe it is genuinely useful. For the most part, I try to avoid covering C++ topics which are needlessly complex. The topics that we cover are motivated mainly by necessity to understand efficient and scalable low-level programming. Nevertheless, I think some of the criticisms made by students are valid, although not within my jurisdiction or ability to remedy.

The course itself is billed as “Software Engineering Principles,” but exclusively covers C++ (and some associated tooling), and largely focuses on OOP as a methodology for structuring “medium-sized programs” as written in the course description. I do think there is some more room for language agnostic design discussion. With that being said, my understanding of the SE course curriculum is that CS 445 covers design of large software systems from a strictly language agnostic perspective. Given that the 2B students continue to broadly struggle on the midterm with programming iterators or classes that perform memory management, I do think there is value in performing more challenging programming practice before moving to solely high-level design.

Ideally in the future, a professor with real software engineering research experience could take over this course and update the curriculum. Although I have sufficiently deep C++ knowledge to teach this course, my theoretical SE knowledge does not extend significantly beyond what I teach in CS247; everything else I am drawing on is purely from personal experience having programmed projects for roughly 15 years at this point. SE was never a particular interest of mine as an undergrad, nor is it my research speciality now as a grad student. I believe that a teaching professor has been slated to teach this course for the past few years, so hopefully they will get the chance to modernize and broaden some of the contents soon.

profQUOTES

As quoted in mathNEWS.

Volume 158, Issue 3, June 13th, 2025