X
Business

Programming stream of consciousness

My wife is out of the country now visiting family. That, combined with the fact that I quit Microsoft last week in order to pursue full-time a startup project that concentrates, in the near term, on Africa, means that I am spending every waking hour programming.
Written by John Carroll, Contributor

My wife is out of the country now visiting family. That, combined with the fact that I quit Microsoft last week in order to pursue full-time a startup project that concentrates, in the near term, on Africa, means that I am spending every waking hour programming.

I mean that quite literally. Since I lack social obligations at this point (beyond tonight, when a Chicago-based friend I've known for over 30 years drops by after a class in Anaheim, the net result of which is likely to be a Friday on Sunset Boulevard consuming various flavors and colors of alcohol), it means I wake up, read news, start programming, take a few breaks here and there, go to the gym in the evening, eat dinner (sandwiches are good), and continue programming until I collapse in exhaustion somewhere around one in the morning (okay, with a bit of time taken out for the Daily Show and the Colbert Report).

I can't say it's a bad life, at least, if you like to program. That's one of those things that is often difficult to explain to non-programmers. When I've finished testing a bit of code that I believe to be elegant, well-designed, loosely-coupled and highly maintainable, I end up having to walk around shaking the excitement out. I should wear special clothes that identify the geek infection so that others can be protected from my influence.

On days like this, however, it's easy to understand why programmers have a reputation for poor social skills. Past surveys of end-user opinion have led me to conclude that I'm pretty good, socially, for a programmer. I'm a good presenter, speak well, and can wear a suit without looking like mom and dad dressed me up for Sunday-morning church.

When I've been programming all day, however, I find speaking to human beings taxing (less problems with dogs and cats). Part of the problem is that I'm still thinking about difficult parts of the code even while shoveling Italian food into my mouth, and try as I might, I...just...can't...stop. Besides that, I have a tendency to make inappropriate observations, running down conversational back-alleys that, on less programming-intense days, I'd avoid like the plague.

Worse, I'm damnably linear on such days. Nobody would mistake me for someone who is a strong multitasker (I approximate it somewhat using the human equivalent of Time Division Multiplexing (TDM), shifting from one task to which I devote all my attention to the next over relatively short timeframes). If the TV is on, I have a hard time understanding what is said to me if I am partly paying attention to it, even on normal days. After programming for long stretches, however, multitasking simply is not an option. I either watch TV, or I listen to what is said to me. I simply CANNOT do both.

Perhaps that is the mark of a programmer, and what makes some people suited to the profession while leading others to drop out of programming classes in college (not that I took any; I majored in Economics). Programming is a bit like self-hypnosis. You only get on a decent roll after spending several hours loading code into your head. At that point, you begin to acquire instincts as to where things should go.

Design is important, to be sure, as it lays out the broad outlines of the overall structure in ways that is hard to do while concentrating on a section of a program. Even so, I think I'm lucky to end up with 70% of the planned structure in the final result, because trying to make that structure work tends to refine things considerably.

But I will say one thing: the single most important innovation in programming over the past five years is the popularization of test driven development. I can't imagine programming any other way.

NUnit, you are my friend.

No, this post did not have any particular point beyond giving me a chance to escape from my programming well and say "hi" to everyone.

Editorial standards