Hacker News new | past | comments | ask | show | jobs | submit login
Pain points of teaching computer science (austinhenley.com)
38 points by azhenley on May 9, 2023 | hide | past | favorite | 52 comments

This paper hardly touches on far and away the #1 pain point, and indeed only refers to it a single time. And that pain point is cheating.

In my institution -- and this is hardly unusual -- CS alone accounts for about half of all university-wide honor code violations. This isn't because CS students are evil. We know all the evil students are Finance majors. It's because of two factors. First, the medium of computer science, that is, program code, is trivially copied, forged, generated, and sold. It's much harder to get someone to build your breadboard circuit or sculpture. Second, CS programs are run by computer science professors, who among other professors are uniquely skilled at developing software to catch cheaters, and computer code is uniquely easily parsed, so we catch students more readily than, say, English professors with turnitin.com.

Distance learning, due to covid, greatly exacerbated this. Nobody still has any effective way of conducting exams remotely. Every software system we've tried has been highly invasive of privacy and easily circumvented. Cheating in online classes has been rampant.

And the amount of cheating among American students has risen from fairly low levels (when I was a student) to astonishingly high levels. My own theory behind this is the rise of helicopter parenting: before entering college, students were essentially never allowed to fail, and now when they fail they cannot handle it. It is an epidemic in CS academia.

I've been teaching intro CS for 20 years, but I totally disagree that this is the #1 pain point. The biggest paint point not discussed is that programming is challenging to learn and requires a lot of effort from students, but all the pain points in the article are real.

There is also an issue with “it doesn’t compile? That’s a 0.” So you have students that may have written 90% of the proper code but can’t figure out the bug in their makefile, Java build, etc.

In the students mind they’re going to ask “is it fair to get a 0 when I feel close?” Then they (might) cheat. Obviously there are ways around this, like going in to office hours for help, but some schools start kids with C++, which seems like a wrong first language.

My experience (I am a CS professor) is that, even when you attempt to provide partial credit for programs that do not compile (as I do), the code is almost always seriously flawed. We all know that attempting to write an entire program in one go is not a great idea. It’s hard to anticipate where a program might go wrong if you’re not developing it incrementally. So I don’t blame instructors who just decide to cut their losses. It may be painful for a student, but it stops that kind of behavior very quickly.

As long as you give bonus points for the most horrific part of software development... getting the goddamned IDE configured correctly or close enough to do work.

vim myprogram.c

gcc myprogram.c

That brings you 90% of where you need to go, especially for a CS course.

It's not obvious to students. The insight to simplify and simplify until things work and only then keep piling new things on top, that's a really powerful one and is underappreciated in teaching CS.

I certainly don’t blame professors for doing that - partial points are difficult. But you probably know students are asking for help from other students on how to get things to compile.

My teacher (TA) was nice in retrospect! I got -35 for being incomplete and -35 for not working!

The non-PEBKAC problem was that I was using Turbo Pascal 2.0 (1.0?) that couldn't identify I'd screwed up a method's parameter definition.

And you didn't notice before handing in your assignment?

Doing things last second that didn't give you any chance to fix issues before a deadline is a flaw in and of itself and should be a lesson.

Unfortunately many don't understand this and I have many colleagues who slack off until it's almost too late and then there is a huge scramble before a deadline.

Most exercises I have seen are made up from multiple parts building on each other. The first one is so trivial that frankly, anyone not being able to write a hello world in the language that was the subject of the whole semester should get a 0. You just submit every substep, and you get the mark for the highest you were able to reach.

Of course your mileage mag vary, but I think it was very fair, and most of my classes were already way too easy - many students are just terrible and lazy. My classmates who became teacher assistants told me also that they felt terrible but they had to fail some students because they didn’t even turn up to their one past the last retake exam at all.

I didn't get credit for the first few assignments in my first CS class because the automated grading tool couldn't find my code. Finally I figured out that the tool only worked if the code was in the default Java package, which I wasn't using because Eclipse told me I shouldn't.

And the mirroring issue with “computers are hard and some teachers can’t do it.”

I got a 60% one for an assignment that demonstrably implemented all required features including the “for extra credit” ones, and a few more besides. I can only think it was scored by grams of documentation.

Has that ever happened? Why wouldn't you ask your professor or TA or classmate help in that case?

My university had a hard rule on if your code didn’t compile you got a 0. So yes, but like I said they do have office hours, ACM help, etc.

Is it a factor that a CS degree is seen as a relatively easy path to a well-paying career (compared to doctor, lawyer, real engineer, etc.)?

When the goal for many is to make lots of money, maybe there are relatively fewer nerds who love the field and craft?

And perhaps a CS department is getting closer to the departments that (fairly or unfairly) once had a reputation for attracting more than their share of less-scrupulous students?

The cheating in CS courses carries through to cheating in job interviews. And the sad thing is that it works: the cheaters are winning.


That looks like the problem is Amazon's interview process. Amazon is a world-class cheater that sells counterfeir profits for profit, so cheating to get in is a positive signal.

I went to college way back in the era when you printed out your labs and handed them in physically to the prof. Even back then, there were students who would rummage thru bins looking to find "inspiration" (cough cough) from other peoples' discarded prints.

I have one even better, as a TA, twice I had students turn in 100% identical printouts of their code, with only a couple of variable name changes. Like someone grading them just wouldn’t notice. In one case it was 6 students who all turned in exactly the same program, printed out, on paper.

The department did nothing, and let them all re-do the assignment…

In a class where acknowledged group work was accepted, I had a TA question my homework because it came from the same printer as another couple of students. I have no idea if they looked at my work, but I didn't pull anything from them.

(No real point, I guess maybe that it's easy to go to far in the other direction also)

This seems to be more blaming a symptom. Consider, if there were not increased stakes involved with getting high scores, there would be fewer cheaters.

Teaching anything has grown more difficult as you get fewer and fewer projects and tangible goals. This is all the more emergent as we pay attention to what people actually remember of their learning. You get some kids together to build a crappy little car, they are probably going to leave that class with a basic understanding of what did and did not work. Force those same kids to sit in a room and talk about building a rocket, and they are likely as not to leave with a really bad understanding of physics. Irrespective of how they score on any tests.

So, you want people to learn something? Give them something to do with it. If we don't have enough toy projects and general work, why do we think we will have enough outside of the class for them?

And now imagine what that means for their behavior in their first job. Will those not-anymore-students suddenly stop the cheating? Just copy some code from questionable sources on the web with unclear quality and licensing? Ignore FOSS licenses and just blatently violate them? Take competitors code if they can get their hands in it?

Unlikely they will suddenly change. This is troubling for companies.

My take is that there's some vicious cycle going on with cheating.

It's comparatively hard to cheat significantly in a pen-on-paper exam in a classroom proctored by vigilant humans. It's much easier to cheat on other forms of assessment. But exams are rather unpopular, not necessarily entirely for bad reasons. They don't really test what we care about in an ideal way, and exam-specific technique is too important. Also, students are _terrible_ at exams.

In my class I'm faced with two choices: make the grade highly contingent on exam success, deal with awful grades, angry students, and a department that wants my teaching to be modernized; or make the grade about homeworks, quizzes and project work that 10% of students cheat on _blatantly_ and an unknown percentage that I figure is 20-50% "cheat" in some way that significantly damages their learning because they lean so hard on Google, ChatGPT, Chegg, smart friends, ...

The vicious cycle is that more professors are moving away from exams so students aren't getting any practice at exams and hence flunk them ever harder. Anybody who still has an exam component is under significant pressure to reduce it, increasing the cheating-vulnerable surface area and hence the competitive advantage of cheating. Of course cheating increases! And as cheating increases, actual learning decreases, thus increasing the pressure on proffessors to avoid assessment that actually tests their students understand, because then there are unacceptable failure rates. The fact of the matter is that I simply cannot afford to fail 30% of my students. The school and department won't have it.

My response to some of the AI handwringing over things like "ChatGPT gets 100% on my intro to Python course" is to say that your stupid python course isn't testing understanding it's testing trivial syntax. But of course it's not testing understanding, doing so is weeded out by the pressure to avoid failing entire cohorts of incredibly weak students.

I wouldn't underestimate cultural changes too. The old American WASP culture that dominated the prestigious corners of the academy up until a generation or two ago was very big on honor codes and they were largely adhered to including for things like take home tests. Now it appears everybody, including the descendants of the people who used to take honor codes seriously, considers them to be for chumps and will take any angle that they can.

At the end of the day, cheating is a cultural problem and not a technological one. Technology might make cheating easier or help to expose it, but it will never prevent it. As you say, it just becomes a game when you try. Fortunately, people can be taught to change their culture for the better, so it's not as if it's hopeless.

"The old American WASP culture that dominated the prestigious corners of the academy up until a generation or two ago was very big on honor codes and they were largely adhered to including for things like take home tests. Now it appears everybody, including the descendants of the people who used to take honor codes seriously, considers them to be for chumps and will take any angle that they can."

I think that's very romanticized. The high crust was always doing what it took to get ahead. If cheating was the best way to get ahead, they would do that. Them following honor codes is just self-serving propaganda. Nowadays more people are realizing how f...ed up the system is and cheat too.

I agree that it is a cultural issue. When cheating is rampant in a class, it is often because an instructor either does not properly motivate the work, or assigns too much work, or both.

I work hard to motivate my students. The first point, that I think virtually every student would agree with, is that we all do not want to pay a lot of money to waste our time, right? Cheating is a waste of time and money.

I occasionally hear from students that they think a given class is merely an obstacle on their career path. E.g., “if I get a bad grade in this algorithms class then I can’t get that prestigious job.” I try to remind them that they will be expected to do certain things at prestigious jobs.

I think the second, and more important point about cheating is that it devalues yourself. We only live once. We should do it excellently, because by doing things excellently, we find the value in our lives. And, in case it isn’t clear, by “excellent” I do not mean “A+ work.” I mean, simply, striving to do our best. I have a lot of respect for a student who takes a challenging course and earns a low grade than one who prefers not to challenge themselves at all.

Still, I am not always successful, and students cheat in my class. I understand many of the reasons (time pressure, family pressure, etc), but it is my sincere wish that we could find a way past all of that. College can be—-and is for some—-an opportunity to elevate oneself. If you’ve ever had that before, it’s an experience that you hope others will be able to share.

The WASPs of a generation ago didn't need to cheat; as long as they could graduate they were almost assured of a good job. Now with more students going to college and employers being more selective in hiring the stakes seem higher. Cheating is never right, but I understand why more students are doing it.

As for changing the culture, one necessary step would be that employers would have to stop looking at GPA.

>The WASPs of a generation ago didn't need to cheat; as long as they could graduate they were almost assured of a good job.

Do you have data to back this up, or is it just lazy racial basis? Also Jared Kushner isn't a WASP.

> Now it appears everybody, including the descendants of the people who used to take honor codes seriously,

Aka the ignorance of youth/rejection of experience.

What about this makes it a pain point? Is it the amount of time that it takes to deal with cheating, the inability to effectively punish the behavior, the impact it has on the professors' (and perhaps some students') morale, or something else?

The course has to be designed with cheating prevention and detection in mind. So: some things you want to do are not possible. Takes significant extra time to develop course materials (cannot reuse previous years’, may need to shuffle questions and answers on tests, etc). Trying to make sure questions are not easy to google/GPT. Time spent dealing with cheating and consequences, e.g. determining if cheating happened, collecting evidence to present to honor council.

You nailed all three. But to be honest I think the time spent would be viewed as the worst.

I'm hesitant to ask, because I've had to deal with professors with the same sentiment on this topic, but given the sometimes insultingly mundane and easy first semester assignments, and the fact that _alot_ of lecturers reuse the same assignments over a decade, isn't there a point where you have seen pretty much every iteration of how an assignment can be reasonably solved?

I've seen first and second semester students being accused of copying code from the internet, because they were using features of the language that hadn't been taught in class yet.

You'd be surprised at the variation present in complex assignments implemented by non-expert students. It turns out that doing things in buggy and randomly wrong or nonstandard ways leads to things looking more unique than they would if you had a group of experts implement them.

"Having the same bugs" is one of the easier ways to confirm cheating, at that.

(I'm a CS professor.)

> Distance learning, due to covid, greatly exacerbated this.

It may have been a push, but it didn't create the desire of cheating. Those who cheat on code submissions will do that even if they are in person.

Of course it didn't create the desire to cheat. What it did was make it much easier to cheat and get away with it. That is, it removed disincentives.

I left teaching because I sick of that taking up all my time. no moral judgement, it was just a stupid game and I resented the students for wanting to play instead of learn

> This isn't because CS students are evil. We know all the evil students are Finance majors.

That's questionable, even if it was intended as a joke. That joke may have landed 30 years ago, but not now. ;-)

It was clearly intended as a joke. And why would it be any less relevant today than 30 years ago?

30 years ago, tech wasn't the money-making machine that it is today, so the pure greed motivation wasn't as prevalent among CS students back in the day. Moreover, tech and finance have virtually wedded today, as witnessed for example by cryptocurrency, as well as by countless startups that make no profit indefinitely but somehow continue to exist by financing only.

> That joke may have landed 30 years ago, but not now.

It landed for me today, gave me a bit of a chuckle.

I smiled. And I assumed it was tongue-in-cheek.

I've been teaching CS at the high school level for 15 years and the biggest pain point has been breaking kids out of the way they've been taught to approach learning. Since everything is so test focused, what they learn in most subjects is to get a decent grade they need to read, regurgitate and expand using a predefined set of keywords. Test questions are predictable and formulaic.

Then they get to CS where anything code based requires them to tackle a novel situation and to actually think things through logically, and they panic. They're not used to breaking down larger problems into sensible parts or taking those and creating new solutions. Basically, they don't understand how to iterate on their design and slowly suss out an answer. I usually spend the first months teaching Python and showing them the process of problem solving with code, walking through my thinking each time and how I'd use my resources to find what I need.

The only subject which comes close is math, and it's far more obvious what methods to apply and the steps are better defined.

> Flipped classroom. To better understand where students are struggling, instructors have switched to in-class activities while having recorded lectures for homework.

Hmmm. I never thought about this before, but it's kind of obvious once someone says it. It's still a bit annoying as AV is always a PITA, but it's probably effective. I'll have to think about this if I ever teach at a college level again.

> Automated grading. A long time dream of CS instructors has been to completely automate grading.

Sigh. It's almost 20 years since I actually implemented this for my CS class and and this STILL isn't the norm? Programming assignments should have online submission and testing. Period.

> Online IDEs and visualizers. To eliminate environment issues, increase engagement, and provide faster feedback, instructors leveraged online coding tools.

Suggestions that don't suck are welcome. However, generally anything less than a professional-grade IDE that you'd use for professional programming is a pile of garbage. I probably wouldn't use anything other than VSCode nowadays. Probably have to put it in a qemu container for people to run on different OSes.

> Interactive textbooks and exercises.

Yeah, no. Anything a textbook manufacturer wants to do other than be a set of dead tree leaves is a non-starter.

> Answering student questions. In contrast, instructors and TAs are overwhelmed with responding to questions and problems. These questions are often last minute, repetitive in nature, and require technical troubleshooting. For example, "Why does Python no longer exist?".

The problem is that there are two different types of questions: actual course questions and infrastructrue questions. I'm happy to deal with course questions. I LOATHE dealing with infrstructure questions.

I really dislike flipped classrooms. I've found as a student that it forces you to come to grips with the most difficult parts of the material yourself, rather than letting the professor help you get there.

Then when you actually get to lecture, there will always be some portion of students that haven't read/watched the class materials. So most of the professor's time is spent helping out those students who know nothing. Anyone who did actually struggle through the material is bored.

>The problem is that there are two different types of questions: actual course questions and infrastructrue questions. I'm happy to deal with course questions. I LOATHE dealing with infrstructure questions.

When I was doing my CS degree, the "infrastructure" type problems I faced were the worst. In fact, it was a huge discouragement for me, and actually led me to drop several courses.

I'm not sure what a solution to these things are, mind you.

I'm semi-flipped. The students have to do the reading on their own, but I spend 20 minutes on the highlights and pain points in class. Gives a chance for some discussion. If you've already read it, great, you can bring the more access questions up. If you haven't, now you have a little bit of framing for when you do.

Weekly quizzes and short answer homework goes beyond the "lecture", so the out of class work is required.

Then the rest of the class is lab time to work on the project.

> I probably wouldn't use anything other than VSCode nowadays.

We use VS Code in a couple of Java papers that I TA, and we have issues with the way the background incremental compilation works. When it works, it's fine. But we see lots of cases of it not picking up and reporting on compilation errors until you go to run the code, where it will then give you a compilation error at runtime. Or the compilation error highlighting being out of date, or it just not compiling classes, or it not copying resource files into the classpath. These tend to require a restart or clearing the workspace cache to fix.

>Anything a textbook manufacturer wants to do other than be a set of dead tree leaves is a non-starter.


Because anything other than being dead tree leaves is an attempt to increase the publisher's margins rather than improve my course pedagogy.

Online quizzes are one-shot and time limited--it's merely coincidence that they prevent you from reselling the book, right? Anything "online" is only "online" as long as the servers are being maintained (read: profitable). "Renting" a book means it can get pulled from your hands at any time. "Online" means you have to cough up (sometimes quite a lot) of personal information to register for access. I can go on and on.

On the other hand, several copies of dead tree leaves can be placed in the library on reserve. You can resell dead tree leaves, and you can buy used dead tree leaves (any of the books I require for class are classic books--they have reference value to others as well as for my class).

Sure, unencumbered PDFs would be as good as dead tree leaves (maybe better as they are more searchable). I just haven't seen a textbook publisher provide one--ever.

I think the focus on cheating is short sighted.


- Stack Overflow

- GitHub copilot

- Google

- ChatGPT

- etc

People use these tools frequently out in the real world.

If students use these tools exclusively on their homework and projects, they are very likely to fail my paper final exam and I tell them that.

You can structure your course such that cheaters don’t prosper.

I thought these pain points would be the concepts students found the most challenging and so would be the most challenging to teach. The pain points, so-to-speak.

I've taught CS1 for going on 6 years now, to almost 10K students. I'll admit I found this post depressing to read. Because many of these pain points have obvious solutions that have been in use at many institutions for years. (Some of these solutions are in the paper, but are not novel.)

When / where are students struggling? Assess them frequently and you'll find out! We run weekly quizzes in my class. So we know exactly who's struggling with exactly what, and quickly. That allows us to do individual outreach, and for students to catch up before they get too far behind. We also use daily homework, for the same reasons. But a lot of CS1 courses are still using the outdated midterm and final model, maybe with some homework sprinkled in.

Frequently a glut of repetitive student questions points to bad course materials or poor course design. Make things more clear and make it easier for students to find information and at least some of the repetitive question asking will diminish.

Grading and TA support are related. Graduate TA quality does vary greatly, and you need to design around this. For example: Never put students in a position to suffer for an entire semester at the hands of a bad TA. (Many courses do.) Undergraduates are almost always better at assisting with early CS courses, and usually cheaper. We've been shifting gradually toward more undergraduate support for our CS1 course, and it has been working out well. They frequently outperform graduate staff.

But no amount course staff will be sufficient if you have them spend all of their time on tedious tasks that computers can do better: Like grading code! It's 2023. If you can't deploy your own autograder, buy one. Staff time grading code should be minimized or eliminated altogether. Freeing staff time for student support allows you to provide students with more practice, and accelerates the overall learning process. But many early CS courses are stuck in a situation where staff grading is bottlenecking how many problems they can assign. That's insane, when autograding is a well-established option. (Even if you want to devote some staff time to grading code quality, autograding should always be used to establish correctness. And you can automate many aspects of code quality as well.)

In my experience, what's at the root of a lot of these problems is simply that many people teaching introductory CS can't build things. Maybe they can implement Quicksort (again), but they can't create and deploy more complex user-facing systems. I mean, you can create an autograder using a shell script! Not a great one, but still far superior to manual human grading. Part of this is because these jobs pay poorly. Part is how we hire people for them, because the ability to build things isn't typical a criteria. Part of it is that there's little support for this in academia. It took me years of inane meetings to get a small cluster of machines to run courseware on for my 1000+ student class that generates millions of dollars in revenue.

But there's also a degree to which the CS educational community has started to stigmatize expert knowledge. If you do enjoy creating software and are good at it, you get a lot of side eye from certain people. "You know that students don't learn well from experts, right?" And so on. Yes, there is a degree to which knowing how to do something is not the same as being able to teach someone how to do it. But would you take music lessons from someone who was not only a mediocre player, but didn't seem to like music that much at all?

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact