Creativity in Coding
13 January 2016
As a culture, we tend to have a difficult time seeing technical disciplines as creative. It can sometimes be hard to imagine engineering as something creative because it frequently comes in the form of exact results and is spoken of in terms that are sometimes difficult to understand. This divide is imaginary because the technical and the creative are perfectly capable of coexisting. Working within the constraints of an engineering project does not restrict creativity, it tends to encourage more of it. Engineering products are creative works even though it’s sometimes hard to see them as such.
Examining the technical/creative mix from a software standpoint, there is a lot of room for and a lot of need for creativity. Source code can be written many ways to solve the same problem. Developers frequently have their own style and their own method of solving problems. In fact, a recent research project discovered that it’s possible to identify who wrote a section of source code based on the style of the code and how it worked. Developers have the ability, for a very simple example, to decide between using a ‘while’ or ‘for’ loop or recursion, all of which are usually interchangeable. There may also be constraints based on what the computer the code will run on is capable of doing that require some creative thinking. A great example of this is in the Quake III Arena game source code, which needed to take the inverse square root of a number frequently and very quickly. This resulted in the creation of a novel method of doing the math in code involving a constant (unchanging) number, documented in the code as “what the fuck?” and known as the fast inverse square root.
In addition to the source code itself, there is an amount of architectural design that goes into software. During the planning stages of a project, there are architectural drawings created and revised. There are accepted patterns to use to ensure that a design makes sense even after the original designer leaves the project but how they are used and combined is up to the discretion of the designer. There may also be constraints that the engineer needs to work within, which can involve designing workarounds or more novel methods of doing things to make everything fit. Creative minds are much better at thinking in subtly different ways, rather than trying to slam pieces together to make them fit.
By limiting ourselves (and our idea of others) to the idea that technical disciplines lack creativity, we create a closed-minded view of the world. Sure, source code may not be an interesting read to the layperson, but seeing novel ways of doing things in it is just as interesting as reading a new spin on an old story. Technical people benefit from building their creative process as much as a more typical artist. Creativity yields solutions to problems that other people could easily overlook, no matter the field.
We all see the world in different ways. Whether we choose to express our views as code, schematics, paintings, writing, or anything else, we still stand to gain from nurturing our creativity. A technical discipline is no less creative than an artistic one, the work produced just takes a different form - and often, many forms - before it reaches the form people experience it as. No matter what though, just as there is bad art, there is bad code.