Aside from the question of publishing source code, I wanted to applaud the author for his observation that students want to do meaningful work. I work as a programmer (and have done so for more than a few years) and am only going to school to "get my degree". Nothing is more frustrating to me than when people who have spent their whole careers in academia correct me on dumb things. I once got marked down because my curly braces were on the same line as the function definition in Java. They said it wasn't "the way it was done in the industry". I learn 10 times more from my job than I ever have at school - their students would be far better off if their projects were more realistic, and if their teachers had real experience.
"They said it wasn't "the way it was done in the industry". I learn 10 times more from my job than I ever have at school - their students would be far better off if their projects were more realistic, and if their teachers had real experience."
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.}}}}}}
Well, just skip the intro classes. Just dive into the middle of the "major sequence" at the zone you feel is appropriate. I did this. The professor laughed at me when I asked to enroll without the prereq courses, then agreed as long as I didn't whine about anything, and finally recommended me for more advanced electives when I got an A.
Really, if you're going for the "I hate college, OMG its so lame" route, you really need to rethink your stance.
> 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?
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.
Good for him. It's perverse for the gatekeepers of an institution supposedly dedicated to increasing human knowledge to attempt to restrain its dissemination in this fashion, and it's cheering to see the university backing the student here.
I think the gatekeepers of the institution feel that human knowledge is not increased when homework answers are published on the web, rendering the assignments obsolete for future instances of the course.
Professors should already be using new problems in each instance of the class. In particular, frats and other student societies often pass things down, and you don't want to advantage them. Trying to stop people from posting knowledge on the web that is already public is ineffective and unfair.
great point -- the prof is just being lazy. It would actually be a nice idea to build a website so that students could post old quizzes, homework assignments, etc., to help force profs to come up with something new each time.
Wow. what a colossal waste of professor's time! The prof isn't being lazy, he's being efficient-- he's carefully crafting a set of exercises that he hopes best serves the need of his students, and there shouldn't be any need to change them until the curriculum changes.
Believe me, there are many better things he could be doing with his time than re-creating exercises....
Well, as someone else pointed out, frats, etc., routinely create archives of past tests/quizzes, etc., for the benefit of their members.
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.
If a student has a reason to hand in an archived answer instead of learning something by solving the problem himself, there's already something going wrong, and creating fresh exercises each week attacks a symptom only.
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".
Of course the counter-argument to this is that it can teach students more real-world methodology - ie don't re-invent the wheel - instead try to find alternative sources where the same problem has already been solved. I
n practice (my experience) it tends to be a lot more common and is practiced widely, resulting in students that "know" the answers but can't apply the theory to new problems - having never learned how to discover the wheel. Which tends to emphasise the devaluing of a university education even more.
I believe the exams / term papers where the lecturer came up with a new set of problems were more successful in weeding out the "learn by memorizing" over the "learn by understanding", but that is just anecdotal experience.
Anyone got any hard data to back this up???
My guess is that you've never been in the situation to do this. Coming up with good problems, unambiguously stated, that address the points you wish to address and not the ones you wish to skip, is very difficult. Especially at the undergrad level, where you have to be careful because the base of knowledge is so small (or, at least you have to assume it is).
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.
You make a good point. I wish all exams/quizzes were composed of carefully thought out questions.
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 agree, but it is much harder to make up a thoughtful mc exam. I have done it when I was trying to prepare students for a standardized exam (MCAT) and it was a real bear. I'm not sure it was the right thing to do (I no longer do it), but that was my intent.
Your argument would also support the view that one canonical set of quizzes and exercises ought to be created once, by a properly qualified prof, and used in all schools, so that profs everywhere might allocate their precious time more efficiently.
What is the chance they are doing anything new in a 100 level CS course? Interesting, perhaps, but new? Couldn't one find answers to most of the problems in 4+ languages with a single search? I understand the argument, to an extent, that the student is simply lowering the barrier to cheating, but isn't it he really just lowering it from just above the knee to just below the knee?
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.
No, he's lowering it from just above the knee to the ankle. One link to his site, and you'd have all the answers to all the homework questions for the whole semester, presumably ready to print and hand in.
Anyone who thinks that has never heard of MOSS, http://theory.stanford.edu/~aiken/moss/ in order to fool it you would have to know the material well enough that you would be able to complete the assignment w/o cheating anyways.
This guy, yes. What if other people do the same without telling the profs?
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.
The homework assignments are only rendered obsolete for cheaters... and hopefully the overwhelming majority of the students do their homework because they're trying to learn the material.
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.
I TA'd and taught an intro to unix course at UCSC a couple of times. We found that repeatedly pointing out the tools that we'd use to catch duplication (grep/sed/awk), and show how they worked was the only thing that reduced the cheating count (which sat at around 10%, but dropped drammatically with repetitions of how we'd find 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!
How does someone's solution to a problem make the problem obsolete?
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.
In every programming intensive course I took as an undergrad CS major, the programming projects were original. The themes are the same (the linked list project, the balanced binary tree project), but the professors came up with original project specs every time.
In the past, having seen sizeable fraternity archives of Physics/Chemistry 101/201 tests, I can attest that professors reuse problems on tests all the time. Even if they change the initial parameters, its the same problem.
Solutions to class assignments don't generally "increase human knowledge". The only people they will be useful to are students looking to cheat.
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.
Actually, I really appreciate the assignments and solutions on the Stanford Engineering Everywhere courses. It's probably just as valuable as the lectures.
In my program, I had to sign a non-disclosure when doing an assignment for a local tech company. They didn't use anything I made, but I can't share it. It's basically gone for a minimum of 4 years.
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.
"I always feel like I've lost a little bit of myself..."
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.
You wrote it once, you can write it again (not exactly the same, of course, but you get the idea).
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.
IANAL, but the thinking behind it, if not generally known, is definitely a trade secret. Using or disclosing that information to another party is trade secret infringement.
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).
You can unless you've signed something that prohibits you from doing so. There's no default assumption of non-disclosure or non-competition when you're taking on a project for a company as a consultant, even if you are required to transfer copyright; most will force you to sign something to that effect, but if they don't, or they don't do it right, you're free to do whatever the hell you want with the information in your head.
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.
Let me tell you something about labs. Challenging labs a) are REALLY hard to make and b) ALWAYS suck on the first iteration, ALWAYS. This guy has set back the whole course to the very beginning, because now everything needs to be rewritten. He's a jerk.
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?
This guy has set back the whole course to the very beginning, because now everything needs to be rewritten.
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.
Professors can fail students at any point between starting the class and graduation. Piss one off bad enough and he'll change your grade.
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.
A lot of folks seem to believe that this fundamentally screws over the professor. If it does, he's an idiot, and I speak as someone intimately involved with all this before.
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.
Outstanding result. Compliments to both the student and the Chair of the CS Dept at SJSU.
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.
I actually encourage my students to POST all of their WORK under a by-nc-sa Creative Commons license so that other people/students can build on their work - it's actually EASIER to check for plagiarism when their work is online - I just Google it and it will flag if they are copying verbatim.
I sure hope he doesn't take that guy's class or any of that guy's friend's classes. He may find his work held up to a higher standard... I think the prof was pissed cause the solutions being posted meant he had to do more work. I am all about free speech, but if I were doing my degree there I wouldn't want to antagonize the faculty so much.
One of the problems I'm seeing where I go to university is that with budget cut's one of the most effected area's is course preparation. Lecturers aren't getting paid properly to update there courses and as a result are using the same or very similar lecture notes/ assignments and exams for years.
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 had a good teacher at UVM who took time out of class to discuss this subject one day. He made it crystal clear that as a student, you own everything you code. As a professor, or paid person of the university, that is not necessarily the case. But as a student, what you write is yours. From the other side, I could see how the professor doesn't want people posting code (most likely solutions) online.
Isn't Computer Science a complex enough subject for the teacher to be able to write new problem sets every semester? Isn't he just being lazy by trying to reuse his problems over and over?
university is an extension of high-school-as-prison system, except that it's very big that one doesn't feel in one (maybe because one pays for the delusion^W priviledge of 'freedom')
I think that to some extent, the professor might be right. What if I was to take that same course, with the same professor, and got the same assignment.
I could easily browse his source code when I get coder's block.