Thursday, October 21, 2010

A Thin Line.

It has been an incredibly busy week for me here in Ann Arbor, which is a little unfortunate since Monday and Tuesday were technically fall break and class was cancelled yesterday. I recall a few times when I thought about something I wanted to jot down here but completely forgot what they were. Evidently they were relatively unimportant. I have some time now before a discussion section though, and figured it would be a good time to write something.

The reason I have been so busy this last week is that out of my three classes, two have projects due today and the other has a research project that is just getting started. My Artificial Intelligence project was fairly easy and only took an hour or so to complete. (Still not sure if that counts as a project... felt more like a homework problem.) My Operating Systems project, on the other hand, has been a little more intense.

After spending seven hours in the library with my team on Monday, another five or six there on Tuesday, and probably another ten or fifteen hours on my own in my apartment working on it, that project is finally complete to a point where we feel comfortable handing it in. (We have a few more tweaks to do, but as of now our grade is guaranteed to be over 90%, probably closer to %95. I'll take it.) This is as good a place as any to express my extreme thanks for my teammates and their hard work. It feels great to work on a project and have everyone pulling their weight or more.

One interesting thing to me throughout the process though was how incredibly thin the line between frustration and elation can be.

Fixing the little problems in our software took a long time, and most of that time was spent staring at code that looked 100% correct to us but was clearly flawed. Then, after pounding our heads against the wall for hours, we would finally see something; a missed line of code, an extra one, or an incorrect function call. It is often hard to believe such a small error can mess things up so severely.

This is a phenomenon that is not unique to software development. Tiny mistakes cause huge problems all the time. Ever tried to shift from 3rd to 4th and gotten reverse instead? Run a chemistry experiment and added two mL of acid instead of one? Written an email and misspelled a critical word?

We live in a world on the edge of chaos. Things go wrong at the slightest provocation, but that fact happens to be what makes things so awesome when they go right.

That is why after pacing around my apartment talking to myself, walking myself through every line of code, and air-drumming along with whatever music I happened to be listening to at the time for what seemed like two hours, I went a little crazy when I found the bug. (It was actually more like 20 minutes. I know because I put in a pizza just when I was starting to go crazy and fixed the problem just as it was finishing up. Nothing like the aroma of cooking pepperoni to encourage productive thinking.) Proof of my insanity is preserved in my twitter account. I usually refrain from posting things like "WOOODEBUGGINGISHARDBUTFUNWHENYOUFIXSOMETHING!!!" I sent out texts to my team members that were entirely comprised of capital letters and exclamation points as well.

The feeling of frustration before a breakthrough is why people quit. The feeling of elation is why people don't.

No comments:

Post a Comment