Reminds me of when I was teaching and we were discussing test design. If 90% of your students fail your exam what have you learned?
I would argue that barring a conspiracy of some kind that the designer has made a mistake in either in the preparation of the exam or the preparation of the students. Others might argue that students may be lazy or aren't maximizing the use of their time. I hear similar arguments about users now that I'm in IT but I've always felt that it is the designer's problem if "no one can use it right."
> If 90% of your students fail your exam what have you learned?
It depends if I have corroborating information.
Normally, it means that they are lacking some very fundamental piece to their learning. The last class I taught that this happened in had a particularly poor Data Structures teacher and so didn't understand Hashes/Dicts/Associative Lists and how to use them.
Yeah, that assignment didn't go well for about 30% of the class. I had to back up and teach that piece.
However, my first assignment ALWAYS has 40+% failure rate. And my assignment is: "Here are the directions to: set up Eclipse, set up Mercurial, type in this program, compile it, run it, and check it in so I can run the automated tester on it."
I literally give people a document with every single step documented. I'm not joking. We're talking a single print statement that prints "Hello, World!".
40%+ always fail. It's almost invariant. Nothing I do can budge that number. I want to bang my head off the desk at the office hours just before and after that assignment.
I tutored CS in college and I’ve seen this effect as well.
On assignments where literally every step was documented, my students would still often not know what to do, because they had missed something small but crucial.
After reading “The Design of Everyday Things”, I’ve come to design things based on the assumption that people don’t read. Even when their sole task is to read, they just don’t.
I write compilers, and producing good error messages is a crucial part. But as it turns out, the best predictor of a programmer’s ability to notice and correct an error is not good error-message text—it’s accurate and precise source locations.
"But as it turns out, the best predictor of a programmer’s ability to notice and correct an error is not good error-message text—it’s accurate and precise source locations."
I believe a part of this is training not to read the error message text, by years of error message text not worth reading.
I certainly wouldn't go so far as to say that this accounts for all (or even most) of the effect, though.
I thought "that's silly". Then I thought what I do when I get a compiler error. Most of the time I look at the line number, go to the source, try to figure out the mistake quickly, if nothing is obvious only then go back to the error and actually read what it said.
You're right - I was taught for a long time that the compiler will usually say something like "unexpected ':'" - which is in most cases absolutely useless.
Heck, I write e-mails based on the assumption that people don't read them. It is sadly quite common for people whose sole job it is to read and reply to my e-mails (e.g. customer support) to read only the first few words of the first few paragraphs, generally stopping after the first noun and verb in each.
I find that those are the same people who tend to write content-free walls of text. No wonder they only read the upper-left-hand corner of e-mails, that's the only part of what they write that's worth reading.
Being in customer support I often experience the exact opposite. We often do not know how to explain stuff so that really nobody will misunderstand. I've recently summarized this as "everything that can be misunderstood, no matter how remotely, will be misunderstood" even little things like "click this, then click that."
We have an App (of debatable quality) where we made screenshots with big red circles so people know which button to push, as many do not read the button's label.
Sure, I also misread email. Easy enough to say "sorry, my fault" and fix the problem.
EDIT: As this might sound very negative: the whole situation is more like "collective creativity", rather than stupidity. I'm often astonished on how people think and what there reasoning is. Ways of thinking I'd never imagined. And no matter how absurd, there's always some logic reasoning.
Why i keep saying to myself and others that logic is a road, not a destination. Depending on the starting point, logic can get you wildly off the map even though it is, well, logic. We have managed to collectively fool ourselves into the thinking that if the result came from logic, it has to be right.
Eclipse and dependencies handling are hard problems. It works if everything is set up perfectly, but Eclipse is super brittle, and all the plugins make bad assumptions about Eclipse and other Eclipse plugins.
> Eclipse and dependencies handling are hard problems. It works if everything is set up perfectly, but Eclipse is super brittle
I agree. If that is the problem, I will happily walk the student through the setup--even at any point in the semester. If a computer craps out, I will help the student recover from the repository--I don't expect them to be able to do that. It does also happen, rarely, that I have to actually help a student set up their computer because they have some weird issue. I do not consider failing at setting up your environment to be a failure of the class. Schedule some time with me and we'll go through it together.
HOWEVER, this is generally not the problem, oddly. They get that set up pretty much fine.
The first problem is: System.out.println("Hello, World!");
I WARN people over and over. I am automated testing this. Computer output must be EXACT. The comma, space, capitalization, and exclamation point ARE NOT OPTIONAL. Debugging is about noticing details, and if you can't match this, you're not going to find the actually subtle bugs later in your own code. Really, this is the only functional line in the program--I'm not joking about this.
The second problem is: "But I didn't know I could check this before the assignment date." Um, I have a website set up for the class--did you check it for the past two weeks that it has been running? I have pointed this page out and put it on screen at both beginning and end of class for the past 4 lectures. The anonymized login ID's have a Red X for a failure and a Green + for success. I also have the intensity modulated properly so that those who are red/green color blind are able to tell as well.
I have just learned that I'm going to have to politely smile at all the excuses and whining after that first assignment and tell people repeatedly that I'm not budging on this. After the first couple of students, the rest get the message.
I wonder if your students are new enough at programming that they don't understand what exact matching means? Even if you verbally say "exact match" they may not have enough context to realize that means character by character examination.
We've done programming long enough that this is ingrained to a very deep degree, but for them, it still looks like english.
Anecdote: I had a college instructor who thought it was reasonable to write a TCP-IP program from scratch without reference using Winsock2. I'm sure he could do it, and I could probably do it now, but as a student, not so much.
I agree, fortunately there are convenient pre-packaged Eclipse bundles like Spring Tool Suite [0] that include a curated set of plugins for common development scenarios. This may mean you end up with multiple Eclipse installations but it's easier than trying to maintain dozens and dozens of plugins within a single installation.
Thank you. This is my main reason why giving up on eclipse shortly in. There's something to be said when your application can't handle small failures. (Looking at you, too, visual studio)
How do this students do by the end of the term? Are they failing because they can't do it, or are they failing because the assignment is due the day after their last keg party?
The distribution gets far more reasonable after most of the initial bunch of people who can't follow simple directions all drop after that first assignment.
I always make sure that my first assignment is due before the drop deadline. I don't make that first assignment worth a lot of points, but it sets the tone for the rest of the class--"If you can't do this, you're in for a rough time in my class." Anyone who stays even if they bomb that first assignment knows what they are getting into.
If you have the freedom to be able to do this then this is great. When I was an academic I was under enormous pressure by the university to never let a student drop out of a course because of the financial consequences. Still had the same problems as you, but I had to figure out a way to get the students through the course. Lots of fun!
I agree. I actually made an series of online quizes that just required the student to read through the lecture notes to find the answer before the lecture (the notes were posted before the class). Even though these quizes were only worth 5% of the overall mark, the average mark of the class was 10% points higher after introducing this change. Just encouraging the students to read through their lecture notes before class made an amazing difference to how the students performed overall.
People don't learn basic rigor/debugging/"go over it one more time." You know that voice of performance anxiety that screams in your head when you're in it up to your neck?
They haven't learned to quiet it yet.
And some probably just gave their last full measure of devotion somewhere along the way; they just couldn't for some inscrutable reason.
I learned it less than Cary did. Every time I read this, I calculate what it'd really cost per kid and get pretty sad; it would be a pittance.
At my University I would say the Numbers are about the same, CS Student in Programming, had C/C++ classes, still don't know what the heap/stack is.
The teachers themselves are pretty bad as well. Java is alrightish, but not in a course called 'Systems Programming' where we talk about paging! And the list goes on...
I'm always astonished by people who teach C++ to newbies in programming. I've been writing code more or less constantly for 20 years (since I was about 7), work as a lead developer now (C#/Unity), and have developed quite a while small hobby projects in C as well as in C++, read the Straustroup book on the labguage (the small "Tour" one) and even practiced about half of it, but C++ and all it can do still frightens me, and I sincerely hope that I never have to work with it in production.
Now, when I hear about students that learn what array or loop is on C++... I imagine how they start call themselves "C++ developers" after graduation, and it's even more terrifying.
> If 90% of your students fail your exam what have you learned?
If my freshman year college professors are to be believed, this happens because undergrad is but an entrance exam for postgrad. 300 CS students come into freshman year. Only 30 can make it into postgrad 4 years later.
Do the maths.
(the stats have improved since the bologna system, now 60 people get into postgrad after 3 years)
Actually had an interesting conversation with a freshman-class oriented professor of mine. He told me that an increasing amount of people are going into undergrad CS and it is rising to levels that will only be truly seen in the graduate rates years from now.
I would argue that barring a conspiracy of some kind that the designer has made a mistake in either in the preparation of the exam or the preparation of the students. Others might argue that students may be lazy or aren't maximizing the use of their time. I hear similar arguments about users now that I'm in IT but I've always felt that it is the designer's problem if "no one can use it right."