Wednesday, July 23, 2008

People tend to get in the way


Even the best innovations can be subverted by incompetence. One of the statements from a fellow architect which makes me cringe is one professing that a new language (e.g. Java or Ruby) is required to achieve great architecture design.

Hogwash, I say.

Great designs are achieved through a simplification and organization of complex thoughts. Object orientation is not a requirement for structured and ordered programming. Layered architectures can be achieved in functional programming languages as well. While my current passion is in object oriented distributed web technologies, I've witnessed and learned much from observing the designs of PERL and COBOL applications.

In my experience it is the people, not the technology, which are the biggest barriers to innovative and intuitive architectures and designs. The role of software developer requires a great deal of creativity, and not all developers have the innate knack required to craft beautiful as well as utilitarian software.

Some developers attack software problems like a wreaking ball demolishing a building. They just climb into the machine and start swinging the heavy ball at the walls. Repeat until building is gone. Other developers might not even have nor understand the right tools required for the job, and repeatedly pound their bloody fists against the building wondering why it won't crack. Management sees the lack of progress, and rushes off to get more fists.

Building demolition, like software development (when done properly) is a precision application performed by skilled resources. When destroying a building, one must properly survey the building to determine what kinds of explosive charges are required to bring it down, and they should be placed such that the building falls in a controlled manner without causing collateral damage.

This all being said, it is the lack of discipline and professionalism surrounding the role of the IT worker which causes the most grief. Anyone capable of compiling code is labeled an IT professional, causing a disservice to the profession. I argue even a deep understanding of a programming language isn't enough. That would be like saying a demolition crew need only have a deep understanding of TNT. Some of the best developers I have witnessed have focused their expertise in a related suite of skills which together form solid foundation for creative yet pragmatic software design.

3 comments:

Mike said...

The demolition analogy is very powerful. During college I worked demolition for a summer and have seen some of the things that happen. 2 similar but very different stories come to mind. Both are about taking down brick walls with hammers.

The first worker was given a sledgehammer and told to take down a wall - without first looking the guy begins knocking out the bottom of the wall. Unfortunately he didn't stop to think about how the wall would come down around a - still live - high-pressure fire pipe (enough pressure to shoot a stream of water 100 yards horizontally). Only once the bottom of the wall was removed did he realize the trouble that was about to happen. Needless to say it took a team of 10 guys about 3 hours to cleanup the mess, all while working in about a foot of water.

In the second instance a worker went to a wall with just a 12 ounce hammer (the kind even a carpenter would scoff at for being too light). And with a few well placed blows began removing bricks low on the wall. Eventually he removed enough bricks to let the weight of the wall do the work for him, and all that was left was cleanup - sans water.

Like you say, sometimes even the apparent "best" solution isn't the one that works the best. And too often its the lack of forethought by the worker/developer that leads to a subpar solution.

Brian Disbrow said...

Awesome stories

Brian Disbrow said...

I totally want to steal them as analogies the next time I bring this up :)