I’m used to being the only person in the room with an angry CS Education rant, so I was pleasantly surprised today when my UTAs all launched into an impromptu discussion about what’s wrong with Computer Science Education. Although they were only able to frame their conversation about the CS program here at Virginia Tech, the things they were describing are almost universal. Their observations match up with research. In no particular order, some of the things they talked about were:

  • Many students find assignments decontextualized (inert) and not interesting or useful.
  • Students often feel they are learning too much at once, as a single assignment shoulders many learning objectives.
  • If a course only has a few projects, they don’t get the low-level skill practice they need before being thrust in a large-scale project.
  • Many of the courses are (intentionally or unintentionally) designed to be difficult, but student are not supported emotionally all the ways they need.
  • TAs don’t always have the training (either of content knowledge or pedagogical content knowledge) to help them.
  • Students aren’t satisfied with the curriculum to make them “Computer Scientists”, taking many classes on topics like system architecture when they really want to be thinking about User Experience Design.

This is not the entire list, but these are some of the big issues. They may not use the research terminology, but they know what’s wrong and they could point out specific examples from their own experiences. These are things that I’ve heard are problems everywhere, and there are many well-known ways of handling them in the literature. Very few are these “unsolvable”, although many of them are solvable only with trade-offs.

The Department Perspective

Of course, I’ve now seen the other side of this.

I’ve always found my colleagues in the department committed to improving things when they are able. Most professors want to help students succeed, but professors are humans. They have many expectations for research and service. I wouldn’t accuse any of my fellow instructors of being lazy. When most of the reward system is oriented around advancing their research and not the classroom, it’s a rational decision to work towards that. What incentives do professors have to “fix” their working curriculum (working, at least, according to all the measures they’ve seen used before)?

Fixing a course is hard. First, you need to be able to admit that things might be wrong with your course, and then you also need the knowledge of what to fix. You need to find the time to review and revise the material, which can be extensive. Developing new assignments, new lessons, new feedback for students… All of these things are hard. And of course, it will largely be wrong the first time, so you will need time to iterate on it after students encounter it. And don’t get me started if new technology is needed!

The Virginia Tech Computer Science department, in my opinion, does seem to want to fix things. They hired Mohammed Seyam and myself in this past year explicitly to work on undergraduate curriculum. There have been many committee meetings by people smarter and more experienced than myself about how to make improvements. My colleagues work hard to find ways to make more students succeed.The department gets a lot of support from the university and the college, and great organizations like TLOS and NLI. But institutional change is hard! You cannot flip a ship on a dime. These problems may be present at VT in one form or another, but I would bet money that we are still way better than many other research institutions.

I certainly don’t want to sound critical of such a great program like CS@VT. I would heartily recommend a Computer Science degree from Virginia Tech, and the students we graduate consistently prove to do amazing things. But I think it’s helpful to understand what students criticize, and think about what we are working on to improve things.

Improvements Start at Home

A dog laying down train tracks while riding a train

This UTA conversation launched from comparing 1064 (my Python course) with how this Python course was previously taught. Some good ideas were tossed around on how to fix things that are still wrong with 1064. In particular, the point was raised that although students are getting a great amount of practice, they are not getting the “bigger picture”. Right now, they’re writing 1x lines of code, and they need some more experience with 10x lines of code. One of my TAs asked whether I’m open to changing things during the semester - Yes, yes I am! The trick now is building those experiences so that everyone benefits and there’s not too much burden on the TAs.

Another point was that my feedback mechanisms were too picky given how vague they are - I put that down more to the fact that this curriculum has only been used once. I think that will improve with time and effort. Right now, I’m moving so fast to create the lessons for the next module, I don’t always give individual problems the time and attention they deserve. I know from experience that the more time spent writing clear problem descriptions and writing good immediate feedback, the fewer questions I get during office hours and the less stress students have. But I need to balance the quality over the entire semester, or the tracks will run out under the train. Still, it’s great to be getting feedback, and I have many mechanisms in place to record it - TAs have to fill out weekly feedback reports, and students get surveyed very regularly.


Overall, I am pleased with this conversation. The CS community has so much work ahead to fix the situation we’re in. But I’m so happy that these undergraduate teaching assistants were thinking and speaking on this matter at length, and of their own volition. I didn’t say almost anything the entire time! Hopefully more and more students will feel confident about wanting more out of their CS education, and help support our department’s efforts to improve ourselves. The UTAs are “on the front lines” in a way that I don’t think we are as faculty, so I think a lot of the grass roots change can start there. Now it’s a matter of a empowering TAs, professors, and other stakeholders with the tools, knowledge, and resources to be able to bring the change about.