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%
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 taught almost every term since starting my Master’s, and while teaching itself is still a passion of mine, it’s difficult to fully enjoy it when my priority needs to be research. 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 refresher 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. Some students mentioned portions of the course content, particularly design patterns, as being uninspired and unmotivated. It’s true that I enjoy teaching programming languages content more than design patterns, and since the notes are just meant to be used in a supplementary fashion, I rarely wrote motivation down on the board, and instead just opted to speak it out loud in lecture. Next time I’d like to spend more time preparing for the design patterns lectures. 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 challenging. 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 finishing CS138, and it’s hard to find a pace that works for everyone. 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 done more 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 as much time to prepare as I would have liked. I got the feeling this term that this batch of students were not enjoying the course as much as in previous terms I have taught, and that’s something I’d like to change the next time I teach it.
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.