Programming is a strange activity in some ways. For starters, the majority of people don’t really understand what it entails, although there is probably some vague awareness in many that it involves ‘creating programs’. For those people who have dabbled in it, programming is a clearer concept but unless you’ve immersed yourself in the activity for a considerable amount of time it is unlikely that a real grasp of the complexity and depth involved in creating software is apparent.
I think programming is an activity that means different things to different people. All I know is what it means to me. Programming is a lot like any other creative endeavour, whether that be painting, writing, composing, sculpting, building, modelling or any number of similar activities besides. Anybody who engages in such creative arts, whether they realise it or not, becomes the ultimate controller of the little world in which they operate.
An author has free and complete reign over the destinies of their characters, imbibing life, death, adventure or misfortune upon these subjects at the whim of a few words. A sculptor or painter has a similar power, at least within the constraints of the material with which they are working. The same can be applied to artists, musicians and so forth.
In a similar vein, a programmer has many choices: which language to use, the nature of the computer for which they are creating the program and the algorithms they employ to produce the desired outputs when their program is run. In my opinion, programming differs from some other creative activities in that it is as much a science as it is an art, being a heady mix of well-trodden known best practices intermingled with the creative freedom to innovate and influence the behaviour of the program in order to make it do things that other programs don’t do, or perhaps to find a better way of doing something that’s been done a certain way for ages.
Much as I suspect is the case with other crafts, some programmers consider their activities coldly, merely churning out code to adhere to a set of specifications created by other people. Others engage with passion in what they are doing, as they have complete freedom over the design and implementation of the task at hand.
Having spent a significant amount of time implementing my vision of a system that does something interesting, and in the back of my head, working towards a goal that would mean I could make a living working on exactly this, it’s interesting to me how I fluctuate between intense concentration and flow, and fragmented, piecemeal sessions where nothing of importance seems to get done.
The former involves working hours at a time through a myriad of challenges and ideas in order to push the product further forward, and not even realising that the time has passed. The latter is frustrating but at least it’s time that can be spent doing little tweaks and tidy-ups in order to smooth out rough edges or oversights in previously written code. Either way it is mentally exhausting, if immensely enjoyable.
Later this year it’ll be interesting to see what comes out of this process. There are some interesting developments afoot and the code is taking shape in ways that excite and encourage me. It’s sort of alive, in it’s own way even. Watch this space 🙂