I've been writing code all day, again. Luckily I enjoy writing software. There are moments when I and the computer don't get along. On those days I consider becoming a garbage man or maybe a bulldozer driver.
Just keep me off the bull dozer on the days I don't agree with my code.
Anyway I've observed some interesting situations over the years. When I worked at Sorenson Vision the guys that worked 8am-7pm made fun of the 'long haired hippie' types that we hired from Apple. They didn't start work until 10am. How ridiculous.
I was young and stupid then. I am old and stupid now, but I have realized that when you write software the most important thing you can do is to (cliche alert) have your head in the game. Unfortunately, for my poor wife she has observed this in action.
There are only a few moments when I am not writing code. For some reason I write the best code on Sunday mornings in the shower. The trick is keeping it in my head until Monday morning. I write awesome code at 2am. At least I think I do. I frequently fall asleep drooling at the keyboard and I don't remember much after that. Thank goodness for testing.
The best code tends to come in spurts. There are a few times when I have built entire applications in a few days. Those are very expensive days that incur a very high social cost. My wife doesn't usually talk to me for a while after that type of event so I try not to do that much anymore.
I have observed a couple of interesting trends. Non technical types who lead software types I think fear the software they are creating. The relationship is something like the United States government and the Manhattan project. They new they were going to get something amazing. They also knew that it would cost an insane amount of money and that it could kill us all.
Most software does tend to cost a lot of money and instead of annihilating the human race a poorly executed project can annihilate the company and in fact has done so many times. Microsoft (Windows ME, Vista) stands as one of the few companies that can execute poorly and survive.
The result is a desire to micro manage the mind. oDesk wasn't the first company to micromanage engineers, but their process was so disturbing as to border on voyeuristic. It goes like this. Developer signs up. Business guy pays developer. Developer gets paid, but business guy can look at developer guy via a web cam and observe his desktop. Good thing most of us geek types aren't that attractive lest sexual harassment become the new globalization.
Today I saw an ad from a company in India. $4,000 a month gets you a developer in any number of languages. Just like you can lease a car you can lease a programmer.
Or can you?
The most I can hope for when I hire someone like a widget is that I get a widget with a butt in front of a keyboard. The poor sucker will sit there all day. He/She might even type and if you give them a procedure list of things to do they can turn it into code. If they are good they might throw in a bit of creativity and even offer some suggestions. At the end of the day they will go home, go to the bar, play xbox, or watch tv, but they will not think about you or your project until the next day when they have to stare at the screen all day and wonder if you are peeping in at them from a distance.
Ever wonder why open source projects can catch up to commercial one so fast? Ever wonder why there are a few programmers who seem to excel. Wonder why they are more productive than entire teams of developers? Wonder how how couple of guys can produce something in a few months that teams of developers fail at over several years?
The secret is that the productive developers itch. They can't wait until they can sit at the computer again. The code is always there being written and redesigned in their mind. I heard that Frank Lloyd Wright hadn't drawn a single design on paper for Falling Water until the client, Edgar Kaufmann, called and said he was on his way. He drew the entire thing in less than an hour. His head was devoted to the project no matter where his butt wandered.
The guys who are the best at what they do can't stop scratching. They crave the code. Their head is always spinning in a mess of design and implementation no matter where their butts might be headed. Sitting in front of a computer is merely an opportunity to write down what has been in their heads for weeks.
If you want to be a good programmer put your head in the game. If you love what you do you will work hard. The harder you work the better you will become and the more you will love what you do. Software practices and methodologies will come and go but they are merely a tool for success and sometimes a cover for failure.
The head is a fountain of knowledge and wisdom. You know what comes from your butt. Guess where your code should be coming from.