Saturday, December 13, 2008

Castles In The Air

[Copied from JRoller blog]

When I first read the abstract for Dreaming In Code by Scott Rosenberg, I figured it to be light reading to give my mind a break from other, more technical books on my nightstand.  Little did I realize that once I read past chapter 8, this little book would spark so many questions that I would have sleepless nights wondering "will we ever learn how to create software quickly and efficiently?"

In The Mythical Man-Month, Frederick P. Brooks, Jr. eloquently prosed "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."  Henry David Thoreau is often quoted, "Do not worry if you have built your castles in the air.  They are where they should be.  Now put the foundations under them."

As programmers, we conceive great abstract structures in our imaginations, but are also charged with building the foundations from which these abstractions come into fruition.  Programmers are more like artisans than poets.  The fruits of an artisan's labors will only be enjoyed by others if she limits her abstract scaffolding to only build abstractions which may be transformed into concrete shape with the tools of the day.  The poet is freed from the shackles and limitations of an abstract scaffolding, she is free to create whatever comes to her imagination.

Here en lies the dilemma.  Some of us software-folk are poets, some are master artisans and some are artisans.  The poets create the castles in the air, oblivious of any foundations under them.  They can envision software-thoughts which are unattainable with today's tools, castles which remain suspended in space and time until such time foundations can be created to support these castles.  Master artisans are skilled in creating the artisan's tools, progressing the tools ahead, empowering the artisan to be more efficient and to one day create the poet's castle.  The artisan is a master of the tools and understands how to use and manipulate them to create achievable abstractions, at times using the tools in new and creative ways to make previously unattainable structures attainable.  Business managers and project managers are taught to make S.M.A.R.T. goals to promote success.  The artisan is more likely to practice building S.M.A.R.T. goals in her craft work, where the poet wishes to be removed from such constraints.

As for the Chandler project, it is but one of many projects where poets and artisans, practitioners of free will to create great things, suffered from thoughts and ideas which were to far ahead of the capabilities of existing tools.  There is a fine line poets and artisans must walk in order to create that which may be enjoyed and scrutinized by others.  Will we ever learn how to create software quickly and efficiently?  Sure.  However, with regards to enterprise and commercial software, I respectfully disagree with Frederick Brooks; programmers should not be creating castles in the air.  This type of creativity should be left to the poet, not the artisan.