|This is the morning of me leaving for VICA state. I was lugging around a suitcase AND a gym bag? For a three-day trip? What was I carrying in there?|
The other ten kids in this room are from all over the state of Pennsylvania, each of us representing a Vo-Tech school. We’ve met in the middle of the state, in this small shabby classroom, to find out which one is the better programmer.
It’s been a long road to get here. I’ve been captivated by computers since before I understood what they were. I’ve wanted to program them since the day I discovered such a thing was even possible. While the adults in my life have been cramming worksheets and busywork down my throat, I have been driven to pursue this body of knowledge. It’s been my focus and my passion for nearly my entire life. I bought my own machines. I taught myself the languages. I learned about the hardware on my own. This isn’t just a chance to win some medals or scholarships. This is a chance to validate everything I’ve been working towards. Not for everyone else, but for myself. I want to see how well I’ve educated myself.
This is a three-day event. The first day was spent travelling, and ended with some sort of general assembly to welcome us to the event and let us know how lucky we are to be here. Today we will compete. Tonight we will have another assembly where they will no doubt impress upon us something obvious and profound. “You Are The Future!” is a safe bet. Then there will be a dance. Tomorrow we will have another assembly, the winners will be announced, and then each of us will go home to our glory or shame.
I try not to think about the ride home. I need to keep my mind on this competition, which is off to a very strange start.
This computer lab is older than what we have at home, but… where are the computers? It’s mostly desks and empty space in here. There are just four machines on the far side of the room, and they are switched off. Where is the rest of the lab? Is there another computer room around here?
The instructor was fiddling with the computers when we came in, and he’s having a disjointed conversation with one of the officials running the event. I catch a few snatches of their conversation, and from what I gather his computers are down, or having some problem, and he’s working furiously to get them working again. Apparently he needs to get them working so that the Data Entry competition can take place. (Data Entry is a test of typing speed and accuracy. I knew better than to attempt that one.) There is no mention of other computers, or about what machines our group might use for the programming test. We are made to sit at desks.
I gaze longingly at the machines on the other side of the room and realize that things are about to go very badly for me.
The teacher gives us our assignment. While nothing compared to the games I’ve written, it’s vastly more complex than the previous challenge. We need to make a program to read in input data, and print it out a line at a time. While printing, if X happens, do a page break. If Y happens, do a page break if more than N lines have been printed. If condition Z happens, we are to discard the remainder of the page and move on to the next one. No page can contain more than 40 lines. Every page needs to end in a summary line, totaling up some of the data on that page, and then print a summary of the entire report so far. Every page should begin with a heading and page number. We are to write out the program. There is no computer portion to the test. This is it.
I feel like I’m going to throw up. After years of scorning worksheets, hating handwriting, and begging someone in the education system to let me at the computers, the ultimate test of my computer prowess comes down to a very long writing assignment.
This is a textbook COBOL program. The competition supposedly allows either BASIC or COBOL, but he makes no mention of what variant of BASIC he has on the broken computers, and he leaves out bits of information that a BASIC programmer would need to know. What does the input data look like? Where is this data is coming from? Does my program supply it? Does the user type it? Am I supposed to read from a text file, and if so, what is the filename? Is it separated by commas? This stuff matters, and if I don’t make my program match, then it won’t work.
If I was at a computer, I’d make one loop to read through the whole file, then insert lines to do one thing, then insert more lines to do another. Conceptually, you start out and work your way in, writing the beginning and ending of the program, then working your way to the middle. But since we’re writing this on paper I can’t program like that. I have to start at the top and work down. This is like being asked to build a house left-to-right instead of starting with the foundation and working up to the roof. This isn’t how you write software. This is stupid.
I assume the teacher will type the programs in later, in order to grade them? That is, assuming he can get one of his four broken computers working.
As I scribble and erase furiously, a lot of questions are eating at me. How will this be graded? It’s impossible for someone to write a program of this complexity and have it come out perfectly bug-free on the first try. Perhaps not impossible, but it’s not likely. The scoring of this test must allow for the fact that everyone will probably have multiple bugs, and so scoring would need some way to rate the “buggyness” of a program. This is very suspicious.
The previous competition judged us on the correctness of the output data. (And in the event that more than one student had perfect output, the victory could simply go to the person who turned it in first.) This one is supposedly judging us by the relative brokenness of our programs, but I have no idea how you could score such a thing.
It’s possible to have a small, trivial flaw that prevents the program from running at all. It’s also possible to have incorrect design that would produce nearly-perfect output, but would require a re-write to fix. Which is better: To have a nearly perfect program which fails to run, or to have a program which looks nearly perfect but requires an overhaul to fix? If we were using a computer, the first kind of flaw wouldn’t appear because the programmer would notice it and fix it. How do you score these relative to each other? In fact, how do you rate the seriousness of a bug at all? In the end, it all depends on what the judge thinks the student was trying to do.
When the judge types our program in, will he fix these trivial errors so he can grade us on our overall design? How will he tell the difference between our mistakes and his typos? What if he can’t read my handwriting? Are we being graded on neatness as well?
I can’t believe that a computer programming competition is going to have subjective judging. Of all the events going on today, this is one where the winner should be obvious, as determined by cold facts and logic and mediated by an impartial machine.
I’ve been working on my program for about half an hour now. I look over to the dark computers and I am hit with a revelation: He’s not going to type these programs in. This software will be judged solely by reading the source.
This is complete bullshit.
Imagine if you’ve spent your entire high school career on the swim team. You manage to distinguish yourself and wind up in a competition at the state level, the final match of your career. When you arrive you learn that this school doesn’t have a pool. Instead, they’ve filled a small ditch with water, and you are asked to jump in and demonstrate your ability. There’s not enough room to do laps, so you’ll need to make swimming motions in place. The school doesn’t have a stopwatch, but coach Ray is really good at counting “one Mississippi, two Mississippi”, and he’s going to time you.
You could argue that the best swimmer is more likely to win this activity than the lesser swimmers, but that doesn’t make this a proper test of ability. We don’t have the right equipment, we’re not testing all of the skills involved, and there is no explanation for how our performance will be judged.
I’m eighteen, and too old to cry in public, so I have to be very careful to keep that from happening. I hate this place, I hate this stupid test, and I hate this instructor with his four-machine computer lab of disgrace and inadequacy. I can’t believe that of all of the dozens of schools across the state, this is where they chose to hold the final contest.
I was afraid of losing, but this is actually worse. If I had lost, I’d have some sense of closure. If I came here and didn’t make the cut, then I would know I wasn’t the best. I’d love to win, but losing is preferable to this invalid and unfair test with no rules.
I stop writing. I’m about halfway done. I turn in my incomplete program and shuffle out.
Even as I leave, I know I’m being petulant. I should stick it out. I should do the work and see what happens. I should try, if only for the sake of a scholarship. But the test has no value to me, and I’m embarrassed to be taking part in such a ridiculous sham.
When I get back home, Miss Shack has a mug and balloons for me. She is truly shocked that I didn’t win. She believed in me. When she asks, I make a big deal about how the task was kind of COBOL-focused, and offer that as an explanation for why I didn’t win. I tell my mother the same thing. There’s a grain of truth to that, and it’s easier to say that than try to explain what was really wrong with the test. But deep down, I know it was possible to complete the program in BASIC. I could easily have done this assignment on any of the many versions of BASIC I’ve learned over the years, if only I’d had access to a computer.
I don’t tell anyone that I simply gave up. I’ll keep this secret with me for the next twenty years. I feel shame for quitting like this, but my shame is minor compared to my anger and bitterness at how the test was given.
This is how it ended. Not with a bang, not with a whimper, but with a facepalm.
The Best of 2014
My picks for what was important, awesome, or worth talking about in 2014.
Juvenile and Proud
Yes, this game is loud, crude, childish, and stupid. But it it knows what it wants to be and nails it. And that's admirable.
A programming project where I set out to make a gigantic and complex world from simple data.
So what happens when a SOFTWARE engineer tries to review hardware? This. This happens.
The Plot-Driven Door
You know how videogames sometimes do that thing where it's preposterously hard to go through a simple door? This one is really bad.