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

This term was my first time as an instructor since my previous offering of CS247, and also my first time teaching as a PhD student instead of as a Master’s student. It also marks the longest gap in my teaching (2 terms “off”) since my first time as an instructor in the Fall 2022 term.

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.

This was my third time teaching CS247 as the sole instructor. Being the only instructor is a lot of responsibility: all of the decision making rides on me, and each term I update every assignment and write new questions for the midterm and final. After three offerings I feel comfortable running a course on my own, so next I’d like to try teaching something other than CS246 and CS247.

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. Next time, I’d like to write a bank of questions before the term starts so that I can keep them going for the whole term.
  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 they’re more about the curriculum as a whole than anything I can change in a single term.

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.

As previously mentioned, there is no standard set of course notes for CS247 maintained by a dedicated professor, so the course picks up bits and pieces from its prior course CS138 and tries to build a structured narrative around them. I think a maintained set of notes would help the course a lot, and I believe that a teaching professor has been slated to teach this course for the past few years, so hopefully they’ll get the chance to write them and modernize the course soon.