The Unfair Project

When attending a university program in Computer Science, the fundamental unit of misery is the project. Courses were generally laid out such that students would learn a concept, technique, or technology and then would be assigned a programming project in order to demonstrate understanding and familiarity with what has just been taught. Virginia Tech was good at combining theory with praxis.

Some of my projects went well. Some, less well (though that one through no fault of my own). In general, though, projects were always my strong point. And since for most classes the projects were the largest component of the grade, my success at the course projects was a significant reason for my success academically.

My Junior year, I took the infamous class: Operating Systems. This class was taught by a teacher I’d never had before, and she certainly had very interesting ideas about what information a student needed to learn in order to know operating systems. This class was considered one of the last great hurdles before graduation and was often referred to as a weed-out class even though it took place on our Junior year.

One of the challenges of the class was that each project built on the last. Over the course of the semester, we were building some of the major components of an operating system: a scheduler and a memory manager. These were intertwined, and if one piece of the project didn’t work, you had extra work on your plate to get it in shipshape before the next project was assigned, because it would depend on all the previous parts to be functioning properly.

(Side note: one of my biggest problems with that class was that much of what we learned was from the 1970s and 80s and applied to old mainframes but not to modern personal computers. We also learned a lot of esoteric and theoretical techniques that never made it into the mainstream because in practice they’re too impractical. We would have been better served writing a modern scheduler and memory manager and then spending the extra time writing a filesystem or device driver.)

I did quite well on the first two projects. I struggled on her tests because she liked to ask historical questions, which I found pointless. I don’t need to know what year Hoare and Hansen invented the monitor in order to know how to use it, and while I find the history of the discipline to be interesting, the sort of minutiae she asked about were silly. In a field whose examinations are mostly defined by practical knowledge and command over the material, her tests were centered disappointingly around regurgitation. But I knew I could rely on the projects to keep my grade up.

And then came the third project. We were implementing a virtual memory manager, and we were given a very specific algorithm to implement.

A confounding factor is that the professor herself was out of the country. She had taken a group of students to compete in an international programming competition in Lebanon or some such location. Meanwhile, her TA was managing the project and handling the grading.

After I turned in my project, I was pretty nervous. It had been extremely difficult, and I knew I hadn’t gotten it all right. I was hoping for somewhere around an 80 – 85%.

A week or so later, I got my grade back.

It was a solid zero.

I was flabbergasted. I think my heart might have actually stopped beating for a second. I knew…knew…that my project mostly worked. I was certainly not expecting full marks, but a failing grade was unthinkable. A zero…that was just laughable. Or rather, it would have been if it didn’t mean I was going to fail her class. Me, with my 4.0 GPA in-major, failing Operating Systems. My world was collapsing in on itself.

Once I got over the shock, I buckled down to figure out what had happened.

The programs were evaluated by feeding them some data and then evaluating their output. For example, imagine that the project was to take a list of polygons and sort them by number of sides. So the program might receive the list [octagon, triangle, square] and return the list [triangle, square, octagon].

What had happened was that the TA’s grading program expected the output to be in a certain order. But for some of the inputs, there were multiple equally-valid outputs. To continue the example above, for the input [square, triangle, pentagon, rhombus], the outputs [triangle, square, rhombus, pentagon] and [triangle, rhombus, square, pentagon] would both be correct. But her program would only accept one output and count the other as wrong.

I felt that this wasn’t fair. I could look at the inputs and outputs and I knew intuitively that they were both equally correct, but I rolled up my sleeves and proved mathematically that the two were equal (obviously for the actual project it was much more difficult than proving 4 = 4, as in my toy example above!).

The problem was that this was near the end of the semester, and I was already drowning in other work. I just didn’t have the time or energy to go through and prove that each of my answers were correct. And of course, I knew that sometimes my answer would not be correct — as I mentioned above, my project did have some flaws — so I knew I had to pick my battles carefully.

In the end, I managed to argue my grade up to about a 65%. Far better than a 0%, of course, but still far below what I felt, and still feel, that I earned.

Once the professor got back into the country, I went to her office hours to try to argue my case. She was not impressed by my argument — it seems that professors often get students trying to argue about their grades, so much so that they tend to lump anyone doing so in the same bucket — but told me that if I did well on her final exam, she would consider modifying my grade.

I studied so hard for this exam.

And I did not do well.

It was just as awful as her previous tests had been, focusing on trivia and memorization. I knew I had butchered it the second I finished.

I ended up with some level of B in the class. It was heartbreaking and infuriating and totally unfair.

And then, to make matters worse, the professor up and died. Seriously. She smoked several packs a day, and I guess it caught up with her. Her son was even in the graduate program at the time!

Obviously this was a tragedy, and I’m sure her family and friends were devastated. I felt sad myself, despite my dislike of her class and my feeling I’d been treated unfairly. But the problem her death caused is that when I complained to my advisor about my unfair treatment, she furrowed her brow and said something about not speaking ill of the dead. I could not say a single word against the woman, on account of her tragic passing.

I took a second Operating Systems class in grad school, and I absolutely loved it. I got a job in that area, and I’ve been a systems programmer for over a decade now. I’m so glad I got a second chance to appreciate this area of computer science which is truly fascinating and enjoyable!

Meanwhile, the most valuable lesson I learned from my undergrad Operating Systems class is that sometimes the world is not at all fair and the system will do you dirty in myriad and surprising ways. You may never find justice. The successful ones will roll with the punches and keep moving forward. Obviously this does not make the injustice any better or any more excusable, and if you can fight it you should, but it’s helpful to recognize that it’s a part of life and sometimes there will be no justice.

One thought on “The Unfair Project

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Create your website with WordPress.com
Get started
%d bloggers like this: