Sep 11, 2004

Controlling Creativity...

In Debugging Java, Will David Mitchell states that creativity comes from the right hemisphere of the human brain, whereas organization comes from the left hemisphere. To produce solid software, he argues, you must be creative and organized, as most projects that fail do so because of poor organization.

Will states that to develop software, you must be both creative and organized. The problem is, however, that the left hemisphere is a control freak, and when it is in control, it is difficult to be creative, but when you are creative, it is easy to go back into the organized mode and hence, out of the creative mode.

To become creative, therefore, something must be done with the left hemisphere of the brain, and the easiest way to do that is to be relaxed or bored. Once that you are creative, just write, code, whatever. Do not evaluate what you doing; do not fix your syntax, spelling, anything. Just be creative. Let yourself go, and once that you are finished, then it is time let your organizational portion of your brain take over. Fix your syntax errors, semantics errors, add comments, refactor your code, etc., letting your organizational portion of your brain do its magic.

This may seem a little insane to some people, but in the Mythical Man Month, Frederick Brooks mentions that you should be prepared to throw a version of your software away, since you will anyhow. This could be explained by stating that the first version of a tool is created in a creative but disorganized process. The disorganized code is generally unmaintainable code, which can warrant a complete rewrite.

As a non-software related example, children's book author Judy Blume recommends rewriting. The first time you write, you are essentially getting your thoughts down, and Judy states that when you rewrite (refactor), you get to reorganize your thoughts and link them together to make them complete, and this directly correlates to software development.

Recently, Miguel de Icaza's predicted this for Longhorn' Avalon framework, in his recent 2-part Avalon analysis, since he states that the first version is not the foundation to build applications on; this could be rephrased by, although it may be creative, it is not organized. You can see this distinguishment in Miguel's analysis in Microsoft's ability to reinvent the wheel (creative-ish), but the code has some poor factorings, security, and missing tools (lacking organization).

Some people argue that excessive coding standards, code reviews, and process removes some creativity from the developer, but nothing could be further from the truth. The developer is the one that controls their creativity, and as Will describes, there are many ways to force yourself to be creative. However, once you have completed a creative task, it is not time to merge your creativity into the end product. Instead, it is time to organize your code, by refactoring, commenting, and bring your code up to the coding standards of your organization, and only then merge it.

Software is frequently compared to buildings and architecture, and in this regard, an architect must both be creative to build a stunning looking building, but also must be organized to ensure that the building it solid and meets the local building code standards. Software is no different.

Filed In