Hacker News new | ask | show | jobs
by sn41 2054 days ago
I teach programming. What prevents students from colluding over their tablets/mobiles/laptops while taking the exam from another device? Can't the student mirror the screen elsewhere, leading to interesting possibilities for cheating?

Proctoring is not a solution that I am comfortable with. I do not want to peer into the private lives of students and their home environments. Not every student is well-off, and has a private space all to their own for 3 hours.

I think taking tests from home does not really work with any of the models I have seen discussed this year. Cheating is real. It has nothing to do with rote learning. I am out of ideas which are foolproof.

5 comments

The main problem, of course, is that receiving a credential and receiving an education are very different things that we do at the same time out of tradition and convenience. When testing was easy, it made sense to lump it in with teaching, but now that testing is impossible, I say we ditch it for the time being.
Could you make your class project based and give everyone different, but equally difficult, projects of their choosing. Each check in into master would then be merged after a code review with you where you ask questions about why implementations are done specific ways to solve the problem/refactor. Code is only merged when it hits a quality marker you set. Students are graded by percentage of deliverable hit from original project specs.

Ex: student is to implement a K&R C compiler + code generator in 1 semester. Help them break up the project into manageable chunks (tokenize, AST, register allocation, etc). Each feature includes tests, comments, docs, and is presented to you by X date. Code review and cycle as many times as needed as long as it gets in by X date. By the end of the class the student hit 100% of their deadlines but only pass 70% of some test C files you create so they get a 70% (or higher if their code was consistently good and did not need cleanup) in the class or something.

It would never work because "you need to have a final exam" but it's the ideal I think we should strive for if you are "teaching programming" since this is how most work I've done in the real world has gone.

This will never work because it absolutely fails to scale, at a time when we have a complete lack of computing educators. Customized projects for each student? I have 159 students in my CS1 this semester, and I can barely keep track of them with the massive amounts of data I collect. The idea of making individualized assignments is beautiful but unrealistic.
Most code reviews I've done at work take between 5 minutes to 10 minutes. To assume the worst possible case of 200 students, 20 deliverable per student, and a 10 minutes meeting per MR you'd be at ~28 days (~84 8hr-days). Get 1 TA and you now have 42 days of the semester dedicated to 1:1 time (35%) and the remainder of the semester dedicated to producing learning content. Learning content (lecture videos, etc) can be produced ahead of time and in this case you can replace this with more 1:1 tutoring time effectively allowing you to give each student ~10hr (10 min * 20 sessions * 1/.35) direct 1:1 time over the course.

From the students perspective all they need to do is:

1. Write a "project proposal" where they define a project, define goals, schedule a checkin with you to see if that project is large enough (1/20th the grade of the class)

2. Watch lecture videos and go through exercises on their own time.

3. Write code and bring it in to teacher. (18/20th of their grade)

4. Demo their finished project to professor (1/20th their grade)

This does work for later classes. I never had the ability to test this workflow out for earlier (100-level) classes as all of those classes I TA'd for followed the same model you're talking about.

The 200+ level classes that followed the model I'm talking about had ~10% to 30% pass rate which was in line (~2x) with the pass rate of similarly leveled courses from our college's Math and Physics department which was used as a sanity check.

edit: that's not to say you're incorrect that it would be difficult to do at scale, this is just the way I've seen it done at moderate scale (20 to 40 students).

It's easy (even a bit fun) to grade and give feedback for good students. Meanwhile it's a huge pain to do for the weak students. You need to first figure out what they heck they're trying to do before you can tell them how to fix it, which may take a lot. I suspect code reviews for professionals is much more like the good student category.

If you're asking the students to define unique projects themselves, you run into new problems as students dig up the most obscure blogs they can find on the internet to download and give you. It's a never-ending adversarial struggle.

You'll be surprised at what "weak" code you'll see in the real world and have to explain to someone it's not maintainable or clean or whatever.

This is especially true of junior data scientists (in my anecdotal experience so far)

Code reviews I have done for unrelated bits of code often take me 90 minutes. And that's for code that fits into the idea of my product space, but not super familiar to my everyday life. I don't think 5-10 minutes is anywhere close to reasonable.
The hard part is giving the student meaningful feedback. Especially to those who don't understand something important. It takes time to understand what they do and don't understand, and explain it at their level.
I teach classes of ~500 students and classes of ~100 students.

While having individual projects is very nice and it works for smaller classes, it does not scale to average students.

I have once used individual projects to grade the ~100-student class and the amount of effort it takes is unbelievable.

For example, just your number "1." point, write a project proposal, is not so easy. It takes hours to write a good proposal and several back-and-forths between instructor and student to agree on a reasonable (not too advanced/not too basic) project.

10 to 30% pass rate? And that was very high compared to other departments?

Do you mind sharing roughly where this was (country and quality of university)? I thought we were in an era of grade inflation where everyone gets an A.

This was course a 300-level test course compared to a 300-level test course from these other departments. The hope is that when they become "real" courses the pass rate is higher. I think this counts people who are re-taking the course or who dropped it as failing. We had ~50% of our class drop within the first month.

Part of it was related to their expectations of the course: "you mean I have to write code and the class is based off of that and not memorizing test answers? I'm out"

I think it can be automated in the more basic courses at least. But wouldn't solve the problem of students getting someone else to do the project for them anyway.
So much this: cs61a at Berkeley for example has almost 2000 students in a single class, the idea of personalized anything with that many students is total unfeasible.
I thought in the US people paid money for going to university, so that classes are well-funded enough... /sarcasm
Berkeley is a public university, so many students qualify for federal aid and wind up paying very little or nothing at all,the full cost of in state tuition to those who can afford it is about $6000 per semester.
This is ridiculous. Why do Americans pay thousands of dollars for a bit fancier version of MOOC? When I studied we had 200 people on a course sitting on lectures, 30 on practical sessions and everyone could have a personal session during the professor’s office hours.

There is some kind of a massive waste of money going on.

I'm genuinely curious to learn your option on cheating - does it actually matter?

What I mean is - certainly you don't want to harm the reputation of your school, and you want your students to have actually learned the material and be prepared for whatever they do in life that requires that knowledge... but what I'm wondering is... if there's presumably some tiny percentage of a class that is going to actually cheat or act in ethically questionable ways, are we in fact putting more effort into the prevention of that cheating than is warranted?

One third of the students on my last exam cheated (at least, these were the ones that gave an identical answer to one of the problems, including identical minor typos). I was using the tools described in the article, but apparently I was being too lax about enforcing the 360 degree views or something as they clearly colluded to find a way to share answers anyway.
I feel like this hits the real problem, figure out a better way to prevent cheating and a better cheat will be made.

It should instead be worked on making cheat resistant material

(unfortunately I don't know how to do it but I feel like the later is where the energy/brainstorming should be spent)

> presumably some tiny percentage of a class that is going to actually cheat or act in ethically questionable ways

According to the International Centre for Academic Integrity, from 71,000+ US students surveyed between 2002 and 2015 at least 68% of students admitted cheating in some way.

https://www.academicintegrity.org/statistics/

Other 32% lied /s
Of course it matters. In a class where cheating is permitted, the students who choose to cheat will perform better than they otherwise would have. That will give them an advantage over the students who choose to not cheat.

I personally experienced this in undergraduate with a professor who chose to ignore obvious cheating and I think it negatively impacted the motivation of students to learn the material.

Probably out of scope due to time constrains, but having students explain solutions and code should give a glimpse about how well they understood the principle. So if you have some time to kill...
How about actually treating them like respectable adults and using the honor system? If you start treating people like dogs, don't be surprised when they bite you. Woof.

Stop giving bullshit tests with bullshit restrictions, which is usually what drives people to cheat in the first place. Have you considered asking: what can I change so my students are able to successfully learn the material such that they won't feel compelled to cheat? Recognize that cheating students are a reflection of your apathetic educational strategy and ineffective testing model.

Here's an example of a bullshit test which exemplifies a few of the issues with apathetic educators: single-try tests. Students are only given a single attempt to demonstrate they've learned the material, with the result ultimately reflected in the final grade. The apathetic educator is unbothered by having failed to adequately prepare his students, despite his knowledge of their inability to accurately self-asses in an unknown topic. A caring educator would provide a way for students to diagnose and fix any gaps in their understanding in addition to as a path for them to raise their grade to an A if they demonstrate an understanding of all relevant course topics.