Whenever I interview programmers I always ask about their involvement with coding projects outside of their work. For the most part, the best programmers I have worked with code in their spare time. While I like to hear from candidates who contribute to open source projects, my eyes light up whenever someone says "No. Well, actually, I am currently working on something, but its a silly little thing, just a program to simulate people playing black jack." These little programs turn me on because they are not motivated by a desire to design something useful or to 'fit in' with other developers but rather because the coder wants to attack some abstract problem for the sole purpose of edification. When hiring, I want more than candidates who know how to solve problems. I want candidates who want to solve problems for the sake of solving problems. It isn't so much about walking away with the solution, but walking away with the process.
Since Coming to America I can count on my hands the number of times I've thrown myself into the deep end to tackle a problem like this. On my left hand was an algorithmic synthesizer I wrote over my first thanksgiving in Pittsburgh. More recently, on my right hand, I have my radiosity shader. Neither of these tools solved problems that hadn't been solved more elegantly by others. In both cases I was pretty sure that I could write something, but after completing them I dropped the modifier and was 100% sure that I could - and this was my primary motivation, to know that I could do it. In both cases my external motivation was the demo scene, where like-minded individuals write code to generate animations. The 'scene' provides a great outlet for me, even if I rarely actually participate in competitions, as I can write code where the beauty arises from the process rather than the specific solution.
I would like to participate in more competitions, but my previous collaborators are all back in Australia, and I don't have the same group focus to get things actually finished. I get to a point whereby I am happy with having solved the problem of interest, and don't have a group of friends to help me shape it into an entry. But until I rekindle that focus, I am building my tool chest one painful weekend at a time.
Such weekends are painful for all the reasons why you don't want a dev team that works the same way they code on weekends. Yeah, its cool to get an amazing amount of stuff done in a short period of time but I feel god awful today. With a long weekend starting on Friday, I had no qualms staying up to 4am working on my rendering engine. I went to bed having knocked off a bug that had been bothering me all day and could sleep soundly knowing that it was out of the way. I woke up relatively early on Saturday (read: 2pm) and got back to coding. By 6am Sunday, I was desperate for a repeat of the previous night's performance and was randomly changing lines of code in the hope of fixing another bug. All the while I knew that if I just went to bed the solution would come as soon as I woke. But on the other hand I knew that getting to sleep would be a pain with a bug still out in the wild. By the time the sun came up I had given up and was restless in bed, but fell asleep quickly. After 5 hours of sleep I woke up and fixed my bug in an instant.
For all the progress I made over the weekend I am somewhat upset by my lack of efficiency. The only thing that can turn an otherwise intelligent, mature and upstanding member of society into a
shut-in spaghetti coder is The Bug. The same drive that sends one person on a three day bender in Vegas sends me to forgo personal hygiene and get intimate with pixels. But like the fully functional junkie, I know when to step away, have a shave and make myself purty for another week at work.
This week I won't touch my code. I need to give it some time and space to breathe (c.f. bit rot. I need to remove myself and remember the original problem I was trying to solve (make pretty pictures) and the more important meta-problem (make pretty pictures out of the process, rather than the result).