Hunter Liu's Website

Thoughts on teaching PIC 10A

Date Written: December 21, 2023; Last Modified: December 21, 2023

My first quarter of teaching has just ended, and I have some distribution of thoughts about how the quarter went. I guess teaching came with a lot of surprises, some good and some bad.

If you are a former student or the instructor of the course, please do not take any of these comments personally — this is primarily a place for me to share my thoughts in a place I can come back to. I would like to look back at these comments to guide my own teaching in the future.

Did the students learn how to code?

I think to some extent, yes, the students did learn how to produce rudimentary code. However, I think the course put a disproportionate amount of emphasis on certain elements of code that aren’t relevant to the students in the class, most (maybe all?) of whom do not study computer science! As such, I honestly don’t think their grade reflects their ability to code in a non-sterile out-of-the-classroom setting (e.g. performing data analysis for psychology research or creating weather simulations).

In fact, I don’t think this is necessarily true for the coding class I happened to take. As someone who has taken AP Computer Science, has taken collegiate CS courses, and has tutored for such courses as well, I think this is a broad problem with how coding courses are administered in general.

Here are some specific things I take issue with:

I think the first and third are the most important, as it’s precisely those (missing) skills that we should be emphasising. These students want to learn code to pad their resumes apply those skills to their own fields of study, where they’ll encounter situations that demand good design principles, large-scale algorithmic thinking and code organisation, and maintainable coding habits! I feel awful in that this course missed all of those points, in my opinion.

I’m not sure if/when I’ll be teaching anything coding-related in the future. If I do, I’m hoping I’ll have more control over the class, and I’d like to address the above points. To be totally fair to the people already teaching code, these are difficult elements to address, and I don’t know if I have a good solution. Here is an idea I had, which I shall shamelessly espouse

Emphasise debugging and design in project/assignments! An idea I had was to assign a normal project, full with expected outputs and whatnot, but instead of asking students to write their own code, one could provide the students with buggy, poorly designed, and poorly documented code. The assignment would then be to clean up the code and make it work, which may involve refactoring, debugging, etc. The intention is to eliminate the “tedious” elements of implementing something while forcing students to think about design choices and the underlying logic.

Anyways, that’s the primary pedagogical problem plaguing prospective programmers.

The Students

To those students that are reading this, you were very great this quarter! Thank you all for the kind words and feedback throughout the quarter. I have some good things and some bad things (uhh…constructive criticism) to say about you, all of which came as a surprise to me.

Let’s start with some good things:

Oh yeah, you guys have good hygeine too. Thank you for showering consistently (as far as I could tell). Now for some less good things:

Oh, I guess that’s the only less good thing. There’s some stuff that sits in the middle, which are simultaneously understandable from a student’s perspective but still frustrating from an instructor’s perspective.

Bureaucracy and the Chain of Command

There were a lot of disagreeable administrative policies enacted throughout the course. These could have been changed very, very easily, but there were a lot of bureaucratic and systemic roadblocks, alongside the professor’s unwillingness to make certain changes.

Final Remarks and Further Reading

At the end of the day, the biggest thing that’s on my mind is: success and failure in this course aren’t anywhere close to indicating ability with C++. I think this is centrally an issue of how the course content was structured and the administrative decisions around grading.

But beyond just this class, it appears I’m not alone in this sentiment. Philip Greenspun, a computer scientist and educator (among other things), described several similar issues with undergraduate CS. Although he provides a perspective on computer science majors and their courses, which are geared towards industries like software engineering, a core point is reinforced: these classes focus all too much on a small subset of necessary skills that are needed in practise. Another article reiterates the mismatch between what’s taught in classes and what’s necessary in an actual job.

In addition, there some supply-and-demand effects that influence the quality of educator that some less motivated students (which are quite common in programming, I feel) receive. I’m not sure how qualified this quarter’s instructor was — his GitHub page (intentionally not linked) has very little C++ code on it, and half of it was written by ChatGPT. The other half had questionable naming conventions and limited documentation. Make of that what you will. But anyways, there’s a whole rabbit hole on CS education and teaching programming that I don’t want to jump into.

Not all programming teachers are awful! I have heard great things about several PIC professors at an anecdotal level. In any case, I do think this quarter has revealed some seemingly prevalent problems that many instructors don’t consider.