Wednesday, September 26, 2007

Flow

The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures.

-Frederick P. Brooks, "No Silver Bullet"

I love that quote. Brooks is an outstanding writer and a great source of a lot of good quotes about programmers and software development and they're just as true today as when he wrote them. Despite all of the unbelievable changes in hardware, the proliferation of programming languages and software frameworks, and decades of evolving and adapting our approaches to making software we are still find a lot in common with programmers of 40 years ago.

".. slightly removed from pure thought-stuff" ... Dealing with such a delicate and fleeting substance requires a good deal of concentration, persistence, and awareness. When building these castles of air you often find yourself juggling bricks and mortar, moving pieces and materials around until they fit just right. Suffering any interruptions during this process can cause you to drop what you're doing and struggle to pick it back up again. Worse yet you can drop things into a configuration where it seems that everything is stable yet, hidden from view, a flaw is left waiting for the day when it brings things crashing down.

Most programmers know about the idea of flow. If they don't know it by that name, their eyes will light up with recognition as you go into explaining that state of mind where you become so in tune with the task at hand that your thoughts speed up and become perfectly clear, code flies from your fingers and, when you finally come out of it, you realize that time has passed at a seemingly impossible rate.

This was something that, for the past year, at my old job I very rarely experienced. Most days I was dealing with a number of little projects or small tasks or bug fixes simultaneously. There were interruptions as customer sites would experience problems or there was a meeting to attend or another developer wanted to ask a question. I pretty much stopped entering into the flow state altogether.

But for the last two days I've been spending a lot of time flowing as I gather understanding about this project I'm working on and come up with ideas of what is needed and how to implement it. I have people to go to when I need clarification or help fleshing out an idea, but I have a free reign to write the code and pretty much no distractions to keep me from it. It's an amazing feeling and I can honestly say I haven't had this much fun at work in some time. I know it can't possibly last forever, but I'm so pleased to be back in a position where I can write code and create some of my own castles in the air again.