Student challenges prof, wins right to post source code he wrote for course
kyle-brady.com
kyle-brady.com
Definitely my experience! And one of the most important comments I've seen on hn in ages. Cut it out and put it on your bulletin board.
As smart people who deal a lot with binaryness (there is a right answer), we place high regard for education, as we should. But please understand that business and academia are 2 different animals with only a little overlap. I have lots of education and lots of practical work experience, and I have to be careful when to apply my formal education, which isn't often.
Classic example (I'm sure many of you have many more):
I graduated Allegheny College with the founders of ijet.com. At an alumni event, they presented their business case and web site. It was very interesting, like many discussions here. At the end, a business professor summed things up. Not a single thing he said made any sense or had anything to do with the presentation. I wondered if he had even watched it. That's when I decided to stop feeling bad about sleeping through all that Cost/Value Curve bullshit so many years ago.
Get your degree. Get your education. But please understand they aren't necessarily the same thing.
{{{{{{Aside: If anyone wants to talk about my curly braces, I give them 2 choices: discuss issues with me or discuss details by themselves.}}}}}}
What I do find though is experience at university does vary greatly. I had a fantastic module on Software Quality. The lecturer in question has been working in the real world before he became a lecturer so had many practical examples of software quality, but he was also able to quickly gloss over the irreverent stuff.
I really did enjoy that module, and recommended it to a friend who was a year below me academically at the same university. Unfortunately the lecturer in question left the university before my friend started the module. As a result his experience with the same module was vastly different than mine. The replacement lecturer was very much into mathematics and didn't have the real world experience his predecessor had. As a result a lot of time was wasted on the maths of how to calculate cyclomatic complexity. When I did the course about half an hour to an hour was covered on how to calculate it, when to use, why you'll need it and so on. Plus there was further reading in the lecture handouts. When my friend did it he had to spend about 9 hours running through just the maths. He told me it was very detached from the real world, there wasn't much connection to when you'll use it.
I've had a few good lecturers and a few bad ones too. For me I find the good ones know how to practically apply things.
The pitcher cries for water to carry
and a person for work that is real.
-- Marge Piercy, "To be of use"Really, if you're going for the "I hate college, OMG its so lame" route, you really need to rethink your stance.
Don't troll.
The problem I identified in school is this: my internal motivation (passion, largely unexplained) would be replaced with external motivation (grades, competition). How many great artists became great because they had a strange compulsion to create and learn, versus being paid a commission?
There are basically three kinds of CS assignments. The first is the moral equivalent of algebra problems, where you change the parameters every year if you care. These were boring to give, boring to solve, but very easy to grade.
The second is "write an implementation of X" for X ranging over things like binary trees, etc. In these cases there is one correct answer that the TA is looking for and it is already in the book. No creativity is necessary. Simple copy/paste detection will catch obvious cheaters, and anybody who modifies this guy's code enough to be non-obvious has just performed as much work, if not more, than was needed to do the assignment in the first place.
The third assignment requires creativity, and here if two students solve the problem in the same way you can usually be sure they colluded. Most of these can be trivially changed, but they're a bitch to grade (although my favorite problems on both sides of the aisle, they're very time consuming) and so are not favored by lazy profs.
It was easy to cheat 8 years ago (from what I remember), it's surely easier to cheat now, and it's certainly not because this one kid stood up for something in which he believes.
(Edit: I don't have all the answers, or an opinion on this piece, just playing devil's advocate)
Nowadays it is hardly any extra work for the prof either, any coursework of substance gets put through plagiarism detection anyway.
Although, honestly, people are going to hand down homework answers no matter what. Professors simply should assume that if the question isn't new, an answer has been made available to the students somewhere at some point.
Also, after "Intro to X Programming Language", there aren't going to be any trivial assignments and every (or nearly every) solution should be different. At NCSU they had software that would examine all code for assignments to detect people sharing code and trying to make trivial modifications such as changing variable and function names, and changing the order of code. I had quite a few friends get caught by it.
The point of my rant is that some students are going to cheat no matter what. Having the solution posted online isn't going to really change how many people are cheating if it is made clear that the professor will be looking for cheaters.
tl;dr: "don't cheat, we'll find you" -> no effect on cheating. "These are the tools we'll use. Here's how they work" -> massive decrease in cheating.
1. write a sed script that strips out html-tags from arbitrary, well-formed HTML.
It's pretty hard to fail to notice that 5 people used the one-liner from http://www-h.eng.cam.ac.uk/help/tpl/unix/sed.html, but can't explain what the hold-space is. Also hard to hide the fact that you used the hold space!
Believe me, there are many better things he could be doing with his time than re-creating exercises....
Some people are currently exploiting the "efficiency" you mention, which is in my opinion a bigger problem than the extra time needed to create fresh materials.
What course could you imagine where it would take more than a few hours to create a fresh exam or batch of quizes? We're talking about undergraduate classes and any prof qualified to teach them could easily rattle off dozens of great (and unique) questions on a moment's notice.
So not only do I not think it would be a waste of time, but it would result in fairer tests/quizes, less exploitation, and fresher and more topical material.
Why do students use archived answers in the first place? Apparently, to get credits for (and ultimately pass) a course whose course points they need for something but whose contents they don't want to learn that badly that investing their own time would seem worthwhile.
I see two ways in which to attack this situation:
1. Remove the possibility of passing a course without having understood its contents: e.g. oral exams with "why" questions.
2. Remove the perceived necessity to get a good grade: on the small scale, the easier it is to cheat in a single test, the less it should contribute to the grade. On the larger scale, perhaps curriculae need to be more diverse such that a "I just want to be a Java programmer with a degree such that I earn more money" student can become "just a Java programmer with a degree in just Java".
If the professor has to constantly come up with brand new problems, the students are forever seeing rough drafts of unvetted exams.
Here's a very simple example of a failure I had that illustrates the kinds of things that can unexpectedly go wrong: "what is the angular speed of the second hand of a clock?"
After struggling for a long while with this question, a very bright Asian student finally asked, me: "I see three hands on the clock: obviously they are the first hand, the second hand, and the third hand. Can you please tell me which one you are calling the second hand?"
At the graduate level it may be easier (I've never written a graduate exam) because, fuck 'em, they're grad students, let them deal with it.
In my experience most such questions are simply intended to verify a cursory familiarity with the subject -- or to be easily graded. Easy grading is another aspect of laziness that ought to be done away with.
Why must an exam be multiple choice rather than essay answers? Only so it can be chugged through a machine so nobody has to think while grading it.
I have a friend who was an art student. Every major assignment was put into a public portfolio for future employers (etc.) to look at. This is considered standard for the field. It's also possible that someone else could look at her portfolio, copy her assignment, and turn it in as their own. Despite that, it's still her right to share her creative work with the world.
As programming is just as creative as design, I don't see why programmers should be held to some other standard. We need jobs out of college too, and we are also proud of our work and want to show the world.
If this makes the professor's life harder... well, that's so sad that I'm going to cry.
A lot of people on BoingBoing were saying that the prof should generate a new assignment each time: that's really not realistic (pg mentioned this in on of his essays). I've just finished the first year of a CS degree, and I can see the advantage of having assignments that have been set for multiple years: they're more 'polished' IMO and better able to stretch actual CS skills and not just the production of boilerplate code.
I always feel like I've lost a little bit of myself when I lose code or IP I've created, even if I'm paid for my time.
You shouldn't. Because you haven't. You are greater that then sum of what you have done. You wrote it once, you can write it again (not exactly the same, of course, but you get the idea).
They can claim your work as their IP, but they can't claim who you have become in the process.
Can you? That code is now a trade secret for that company, and if you wrote a clone (or compatible version) using your knowledge of the product, that seems like a clear case of infringement.
Once you learn how to ride a bike, the owner of that bike has no claim to prevent you from riding another.
If (as an employee of that bike company) you developed a way to make the bike 20% lighter that wasn't readily discernible, you can't leave and start a competing company using that idea. The law around trade secret misappropriation is such a minefield that most companies separate the reverse engineering team from the implementation team (ie. clean room design).
A lot of these agreements teeter on the edge of enforceability, as well, and if you aren't forced to sign a non-compete it's going to be tough in most cases for a company to prove that a clean-room reimplementation violates the non-disclosure agreement unless you really are relying on information; however, I'd suggest that you consult a lawyer before wading into these waters, and 99% of the time it's not even close to worth the trouble. You're a lot more at risk from a lawsuit (even if you win) than the company is, and you shouldn't be burning most bridges anyhow.
No one's impressed by his sophomore-level introductory data structures and algo classes.
And because he posted his code to the public, I have the following comments: his code is poorly commented and kind of crappy. I'm further bothered by the fact that he's a senior-to-be and hasn't done anything substantial yet. Where's the kernel, 1337 freedom of information defender?
So? As someone who is not a student there, I could also read the labs and post my take on the code. Information wants to be free.
Anyway, my advice would have been to take down the code when asked. Wait a week (until grades are published), then put the code back up. By that time, everyone will have forgotten. (People are very, very lazy.)
I'm further bothered by the fact that he's a senior-to-be and hasn't done anything substantial yet. Where's the kernel, 1337 freedom of information defender?
I don't think undergrads ever do anything substantial (as part of their official coursework, that is). So I would not fault this guy for that, that is a problem with the system in general.
True on the lazy part though.
At the risk of being that guy, at _my_ school, many undergrad CS majors write an honest-to-god ground up Kernel. So, from scratch to able to boot on x86 hardware and run multiple different programs and everything. Arguably substantial.
Really? I've heard of:
-Systems programming: Implement ext2.
-Operating systems: Write a kernel.
-Compilers: Write a compiler for a C-like language.
and that's at my school alone. Though 2 of those are senior level classes, systems is a junior level class.
I just assumed that's how CS was done everywhere. Want to learn about (foo)s? Write a foo!
Not only was the matter resolved properly, the Chair also managed to stop it from "escalating" until lawyers had to get involved.
Instead, the Chair successfully "hit the pause button", reflected on the issues, got some expert advice, and then communicate the result clearly and definitively, so everyone could close this chapter and move on.
Even for the prof who initially complained about the student posting code, this is a good result. It lets him know how he should update his course in the future, and what limitations on students posting code is reasonable, or not reasonable.
Basically meaning that any innovation in the courses is coming out of the lecturers own time. A pattern emerges in that the young, recently graduated lecturers will put the extra effort in to make there subject good and the older ones by and large will just run what they have been running with for many years.
I could easily browse his source code when I get coder's block.