Creativity and Constraint
O’Reilly Media recently asked in their “Programming Today” newsletter:
For many old-school software engineers, developing code has always been as much an art as a science. But as the industry focuses more on practices such as Test-Driven Development, and Patterns become the lingua franca of programming, is there any room left for real creativity in coding? Or, has it become an exercise in cookie-cutter production, putting together components in new ways, but without any real room for individual style? Share your thoughts with us…
My response:
The idea that TDD or Patterns are in opposition to creativity in coding is a false dichotomy.
Our work is inherently about working effectively within constraints.
Those constraints may be related to the business need – time to delivery, performance requirements, budget limits that circumscribe personnel or technology choices.
Or those constraints may be inherent in the technologies our projects use – we may have bigger or smaller standard libraries, larger or smaller variety of developer tools, greater or lesser impediments to integration. And we have varying levels of access to the source of software products/services/components that our projects are built on.
I’d say these facts are no more an indication of impinged creativity than are the material facts of other craftspeople. A carpenter must work with the limits of wood as a material – but a good carpenter knows and leverages its strong suits as well.
If a software shop is managed such that TDD or Patterns becomes a doctrine that must be followed without regard for its effectiveness, that’s a management problem with that shop – not an indictment of the tools and techniques being abused.
Great art and craft and science work of all sorts always has constraints. Creativity manifests itself in response to those constraints.