Pain points of teaching computer science
austinhenley.com
austinhenley.com
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.
That's questionable, even if it was intended as a joke. That joke may have landed 30 years ago, but not now. ;-)
It landed for me today, gave me a bit of a chuckle.
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.
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.
As for changing the culture, one necessary step would be that employers would have to stop looking at GPA.
Do you have data to back this up, or is it just lazy racial basis? Also Jared Kushner isn't a WASP.
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.
Aka the ignorance of youth/rejection of experience.
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.
"Having the same bugs" is one of the easier ways to confirm cheating, at that.
(I'm a CS professor.)
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.
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.
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.
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.
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.
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.
The department did nothing, and let them all re-do the assignment…
(No real point, I guess maybe that it's easy to go to far in the other direction also)
https://www.teamblind.com/post/My-friends-who-cheated-in-int...
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?
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.
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?
Unlikely they will suddenly change. This is troubling for companies.
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.
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.
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.
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.
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.
Why?
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.
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.
There’s:
- Stack Overflow
- GitHub copilot
- 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.
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?