I often describe coding as an art. Responses are often imbued with perplexity.
When I work on Acrobox, I have a clear vision of what I want. I can zoom out and look at the overall vision, my next milestone, and then all the way back in to the present to break things down into smaller, more attainable, chunks — maybe even walk through it on paper at different levels of abstraction first. It’s a bit more of a mathematical approach, but that’s only half of the picture.
Art is always present — the ability to identify appropriate boundaries and abstractions is a honed skill that must be applied while software evolves. Too much or too little of either can set me down the wrong path. But, these things happen. The ability to see it and correct course is also an art.
Sometimes though, I don’t really know what I’m building. I have some vague idea but it’s a lot more similar to what many would consider art. In direct opposition to messages I’ve been repeatedly told while growing as a developer, there are times that I take my fingers to the keyboard and see where it goes.
For example — this blog and associated pages. There is no shortage of static site generators. I had used a number of them in the past and, like many before me, when it came time for a site rebuild — I decided to roll my own. This is just one of those projects that seems to attract many developers to put their own spin on.
All I really wanted was to apply a cascading theme to a directory of Markdown
files and tack on some production web features like hashed cache-busting URLs,
A quality Markdown parser is the bulk of the work and was readily available. I had already built a template abstraction that helps me cope with Go’s standard library support for templating and a HTTP package that can export routes to static pages. I just needed to glue them together.
I didn’t plan anything. It was more like sculpting.
Early in development I got the idea… what’s really different from the content in my blog posts and my personal knowledge management system? How about a personal task manager? I’m all for the right tool for the right job, but what are the limits of this composition? Is there anything that I can add, modify, or remove that will open doors to new possibilities?
It set me down an exploratory path where I learned that personal knowledge management is a growing field of research. I prototyped several ways to manage data and explored various workflows.
I don’t think there is a one size fits all approach. Everyone has different ways of thinking and thus will require different ways to interface with what is effectively an extension of their brain.
The tooling will also need to evolve as the operator evolves. Today, that’s a mix of a programmatic API, command line interface, and a web UI. I wouldn’t be surprised if I see the technology for interfacing with a system like this entirely through thought within my lifetime.
If you’ve been following along, you’ll notice that what started as a static site generator for my personal blog shifted to conceptualizing a physical extension to the human brain.
I feel that this kind of artistic exploration is necessary for my well-being. There are times when I really want to get some work done on Acrobox but it’s as if my brain is broken — at least that’s how it feels in the moment. Reframed, my mindset had shifted from execution to innovation.
Likewise, when my time is up in innovation town, I’ll experience a similar block and know it’s time to return to execution. Balancing these modes of thought is an art in and of itself. Furthermore, it is possible that the ability to choose which mode I’m in is an art form that I have not mastered.
But, this is where I’m at. I’ll continue to seek balance in within change. I treat my life like art — and so I guess it is no surprise that I view coding as art.