I think we coders are pretty special. I mean, imagine an accountant going home from work and spending an entire evening inventing a fictional company and doing its year end for fun. Yet that’s pretty much exactly what we do. We must really love writing code! So where does that come from and what do we love about it? I thought I’d write a bit about my background and why I love to do what I do and I’d also really like to hear from you how you got into this and what you love about it too.
I got my first look at a computer when I was about ten years old. My mother was doing an evening class in computing and I remember wandering past the closed door of the classroom where the teaching was going on and peering fascinated through the window at class hunched over a few ZX81s and Apple 2s typing in code. Afterwards I asked if I could see the ZX81 BASIC manual and was instantly absorbed by it, trying to figure out what the code would would do when it was run and attempting to piece together the syntax to see if I could come up with my own program. Unfortunately, at that time, I never had the opportunity to actually sit at a computer and try any of this out however a few years later after we’d moved house I did get the chance to try some ideas out on my own.
At the time, the shop chain WH Smith were stocking ZX Spectrum and Acorn Electrons and you could go into the shops and have a play on them. I couldn’t afford a computer of my own so on Saturdays I would rush down to the shop before opening time and as soon as they’d let me in, I’d dash over to the Spectrum and start trying things out. I would be there all day and in order to prevent anyone jumping on the computer while I went off to grab some lunch, I’d write a little program to simulate a program loading so that the other customers would leave it alone. I didn’t even have any tapes or disks so I couldn’t actually take anything I’d done home.
When I couldn’t get access to a real computer, I’d write out code by hand on sheets of paper, notepads or anything else I could get my hands on. I’ve no idea if any of it would actually have worked as I never had the chance to try it out but it was something I knew I just had to do.
Shortly afterwards I found myself at a school where there was a whole room full of BBC Micros and I was thrilled to discover that outside of lessons, I could go in there any time and use them. I soon bought my first 5 1/4 inch disk to store my programs and got stuck into writing games, writing a messaging program that worked over the computer room’s Econet network (this was about 1985!) and I learned 6502 assembler.
After leaving school and a quick diversion doing a degree in Applied Biology, I managed to talk my way into a job with a small software house based in North London and since then I’ve been working professionally in software development. Some thirty years after that first peek through the window of the computing class though, I’ve never lost my love of writing code but it occurred to me that I’ve also never actually stopped to think about why that might be.
So what do I love about what I do?
1. Tackling Problems
I love to try and get my head around big problems and to see if I can solve them. This process involves looking at the big problem, breaking it down into a series of smaller problems and breaking those down into even smaller problems. You then solve each of them until you get to a point where the big problem is solved.
That is a very satisfying thing to do however it is process that can be found in all sorts of other areas too and I don’t find these fascinating. For example, project management is exactly the same process isn’t it? You look at what you need to end up with, break it down into a series of tasks and complete each task until the project is complete. Or what about painting the house or baking a cake? All of these follow a similar process but I have no interest in any of them… apart from maybe the cake.
I think it’s the nature of the problem solving that I find interesting. The problems are technical and often mathematical. I need to bring this widget to life, I need to understand this mathematical concept to solve this problem. Tangling with these sorts of things gets me excited, especially when I feel as though I’ve improved my knowledge as a result.
2. Getting creative
Writing code is a creative process and the best coders out there, the ones that really love what they do, will all see that this is the case. What we are doing is imagining something that doesn’t exist and bringing it into reality and this is an exceptionally rewarding thing to do.
So are we artists too? Well I don’t think so. While what we do is highly creative, I don’t think that what we produce is necessarily art. To me art exists for its own sake whereas what we are doing is finding creative ways to solve big problems. In art, beauty is found in form but for us, I think it is more about the beauty of the integration of form and function. Have you ever had that conversation with a non-techie where you hear yourself say, “Yeah but it’s not just what it’s doing. It’s the way I got it to do what it’s doing!”
3. Design elegance
In the same way that a good carpenter is proud to know that the parts of the furniture hidden away from the customer have been well conceived, properly designed and solidly built, so I know that I gain a huge satisfaction when I feel that the internals of the software are elegant in their structure and well factored.
For me, elegance is grounded in simplicity. How do you create code that achieves the maximum amount of functionality from the simplest design and how do you know when you’ve gone too far and as a result complexity has started to increase again? When do you reach the “Goldilocks point”, the point at which you sit back, look at the code and think to yourself, “Yup, that’s just right.”
4. Being ‘in flow’
I am rarely happier than when, having set a path for solving a problem in my head, I sit down to write the code. My head is totally focussed on coding the solution and in my mind I am visualising the execution of the threads through the code, what state the data is in and how it needs to be transformed to get to the next stage of the processing. I am also balancing the structure of the code to bring elegance to the solution and every so often, from depths of my subconscious mind, a new idea, concept or approach will suddenly leap into my consciousness which will then allow me to iteratively refactor and refine the solution. This pattern repeats until the problem is solved and there is nothing except my mind, the problem I’m solving, and the code. I am in ‘the zone’ and gods help anything or anyone that forces me to drag my mind back into the real world while I’m in there!
5. Trying out new technology
There is a vast array of technology out there to be explored and played with. Long gone are the days when someone was able to stay abreast of everything new in the technological world. What this means is that every engineer can forge a completely new path through the technological jungle and bring their unique skill and experience to a development team.
In fact the sheer volume of interesting stuff can become quite overwhelming when it all looks fascinating but there is only so much time a person has that can be spent diving into these things in detail. When I do come across something that grabs my interest though, I love to dive deeply into it and try to figure out how it all works under the hood. What’s more, every time I’ve done this, it has always turned out to yield useful information providing context in other areas that I’ve been working too.
6. The community
This constant curiosity and tinkering with technology will often result at some point in me scratching my head stumped by some missing information or lack of understanding. At this point I’ll turn to the web and search for more information. It always amazes me that no matter how obscure the thing is that you’re looking at, there are not only people out there who completely understand it, but there are people out there who both understand it and are willing to share that understanding with those of us who don’t.
I find this interesting because according to myth, we’re all supposed to be socially awkward and uncommunicative yet this clearly isn’t the case and the web is absolutely full of engineers discussing issues, providing technical information and supporting others.
Now I don’t know about you but I’m quite proud to work in an industry like this and if I was going to end this with some kind of call to action it would be to encourage everyone to get out there into the forums, write articles and pass on your knowledge. As I stated earlier, the world of technology is vast and we’ve all trodden our own unique paths through it. We all therefore have a unique perspective and you never know who might benefit from what you know.