CS247: Software Engineering Principles | Spring 2024 | 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: 93%

Stimulating student interest: 88%

Overall instructor effectiveness: 91%

Click here for full data

My Thoughts

This term was a challenging one. Minus the anomalous CS136L lab I taught, this is the lowest instructor effectiveness I’ve had for any section I’ve taught so far.

There was an inauspicious start to the term: namely, that I had no intention to teach whatsoever this summer. After teaching in the first four terms of my Master’s, and finishing my thesis/attending conferences in the fifth term, I was getting pretty tired. I planned to just work as a research assistant for my Master’s supervisor before I started my PhD in the Fall. But, things didn’t work out with the sessional the school originally hired, and as a result I acquired the contract a week before classes were set to begin.

I’ve started to feel pretty burnt out. Teaching itself is still a passion of mine, but it’s difficult to fully enjoy it when my priority needs to be research. In the past 2 years I’ve had a teaching load that is as high as other full-time lecturers while also completing my thesis and getting paid a fraction as much. This is the reality of the situation in academia - one doesn’t just become a full-time lecturer without first acquiring research experience, but in the meantime I need to strike a balance that’s easier on myself.

With regards to the course offering: I had barely any students in my office hours this term, which I found very disappointing. It was especially disheartening after I moved my office hours to another time slot to ensure there were no conflicts in the students’ schedules. As much as I enjoy lecturing, one of my favourite parts of the job is connecting with students one-on-one in office hours and helping them dive deeper into the course concepts, which I didn’t get to experience much of this term.

The student reviews this term mention the disorganization of the uploaded notes, and my handwriting. Maybe I need to clarify more explicitly that for this course, students are expected to attend lecture and take their own notes, and that my uploaded notes should be used solely as a refersher instead of as a main study resource. This is clear if all notes are written on the board as in CS246, but maybe for this course it would be better for me to lay out expectations.

The other major complaints are with regards to the course content. It is true, as some students have mentioned, that I am not as passionate about teaching design patterns as I am about teaching programming languages content. Some students mentioned portions of the course content as being uninspired and unmotivated; it would be nice to know whether these students attended lectures or not. Since the notes are just meant to be used in a supplementary fashion, I rarely bothered writing motivation down on the board, and instead just opted to speak it out loud in lecture. Furthermore, some students stated that the course felt like review from one of their earlier courses, CS138.

Teaching this course for the SE cohort is difficult. CS138, which is this course’s spiritual predecessor, teaches a number of disparate C++ topics at varying levels of depth. Unlike CS246 where there is the guiding narrative of introducing OOP for the first time, in CS247, one has to decide which topics are worth covering at a higher level of detail. For example, CS138 covers copy constructors, copy assignment operators, and destructors, but not move constructors/move assignment operators. CS138 covers the use of iterators, but not how to build them. Getting to these topics so that they can be expanded upon does require some amount of review, which is unfortunate, but necessary. There is a wide breadth of student abilities in SE: some students are competent C++ programmers, whereas others may have forgotten or never fully grasped the content in their prior C++ courses. Pair the breadth of abilities with the fact that they take CS247 a year after finshing CS138, and it results in a difficult group to teach to. But, if the pre-midterm content is all unnecessary CS138 review, then I would expect a higher midterm average rather than the 70% I’ve seen in my two offerings of CS247. And, there are some student reviews which prefer the pre-midterm content, and think that the pacing of the lecture material is slightly too fast. In fact, in my last offering of CS247, there were complaints on Piazza that the first lecture was paced too quickly when essentially all I did was introduce a Rational class to represent fractions. Teaching CS247 really forces me to confront the idea that one can’t please everybody.

I leave this term wishing I could have tried a little harder for my students. I left some of my lectures knowing I could have done a better job with more preparation, but with my increased focus on research I did not have the time or energy to prepare more. I think ultimately I did the best I could with the energy I could muster, but I nevertheless am saddened. I got the acute feeling this term that this batch of students were not enjoying the course as much as in previous terms I have taught.

I am going to take a break from teaching for the next while as I start my PhD, and I’m hoping that will allow me to return to the next class I teach with an increased vigour, energy, and performance.