Why do I like software development?
Medieval dentistry, teamwork and building castles in the sky with our minds.
A friend of mine was considering a career change and software development came up along with the question, "what do you enjoy most about it?". This post is my answer.
In summary, I enjoy it because it involves creating something out of nothing. Also, figuring out how to make larger things as a team turns out to be an enjoyable (albeit never ending) battle against entropy and confusion.
Some background
This is obviously very subjective so first of all let me briefly explain what I mean by software development and summarise my experience of it.
There are lots of overlapping and confusing terms but for the purpose of this article, here's what I mean:
- software development = an umbrella term covering all the roles and activities involved in creating and maintaining a computer system
- computer programming = the aspects of software development specifically relating to the technical implementation of the ideas
(A "coder", "programmer", "developer", "tech lead", "architect" etc. are different roles but for the purposes of this article we can safely ignore that and treat them all as "computer programmers".)
My professional experience is mainly in application development (scientific, business and commercial applications) with the attendant smattering of system administration, operations and testing, so I am talking from my experience of those roles.
What's the point?
Computer programs/systems are not written for computers. There's no value in that. They are written to make computers do something useful for people.
It's important to realise that being a professional computer programmer does not just involve programming computers. That's obviously a required technical skill and often the core activity but communicating with other humans becomes at least as important: to know what to build; to collaborate with someone with a complementary skill set; to collaborate with other programmers; to understand how the system is being used; or any number of non-technical aspects that are essential to building something useful.
For all the systems that I've been involved in, the human interaction is where most of the challenge lies. Yes, the technical execution matters and a poor implementation can guarantee failure but I'm convinced that there are easier and more common ways to fail, like confusion or poor project management.
A joyful process?
A manager and mentor of mine, Ian Sutton, captured the spirit of the software development problem: "we are like medieval dentists." As in, you begrudgingly go to the medieval dentist when you really need to, knowing that it probably won't be a great experience but it's better than not going at all!
It's sad that a non-technical person is still likely to find their experience with software development somewhat painful but I think we are getting better.
The difficulty is making a computer do something genuinely useful in the real world. Part of that difficulty relates to figuring out what it could do that would be useful, and the rest of it relates to actually making it do it.
Strong technical and communication skills are required to surmount those difficulties, making software development both challenging and rewarding.
The rewards
Fred Brooks covered the rewards of the technical act of programming (The Mythical Man-Month, 1974) very well and his list still holds true for me (paraphrased):
- Joy of making things in such a tractable medium
- Pleasure of making things that are useful to other people
- Fascination of fashioning complex puzzle-like objects
- Joy of always learning
In fact the barrier to entry is now far lower than in 1974 so all of those rewards are still available but now for less effort.
Once you realise that you are not limited by a physical medium in the way that other artists are, the feeling of creative freedom you get is very addictive. The process itself feels magical; starting with an blank document, then thinking and typing your way to the computer doing your bidding.
Some other rewards not mentioned above are:
- Working with smart people who enjoy their job (mainly)
- Getting paid a healthy salary to do something you find fun
- A constantly changing technical landscape
Computer programming is an activity with quite a high initial cost of entry. I think that is why most programmers actually enjoy their work; there's a selection bias. You have to invest significant time to get to the point where you can create something useful, so people who enjoy it are far more likely to invest enough of their own free time to get good at it. The advantage of that is that your programming colleagues tend to be quite like minded and consequently easy to get on with. The disadvantage of having like minded colleagues is that it's easy to lose diversity of thought and view points and get carried away having fun running down a technical rabbit hole.
The rate of change of the technical landscape is incredible. As an industry we are still finding new ways to approach our technical and softer problems, and as the world moves on we seem to rediscover old ideas (30 years is an awfully long time in our industry) that have new relevance. An expert computer programmer would find themselves left behind were they to stop following trends and improvements in their field for a few years. That can lead to fatigue but can also generate energy.
Dip your toe in
After nearly 15 years doing it professionally I still do it for fun in my spare time. With a computer, a web browser and some time it is simple to try out some simple computer programming. My advice is to invest a couple of hours per day for a week or two, preferably with a friendly computer programmer on call to help you out when you get stuck (you will), and see whether the bug starts to bite. At the very least you'll come away having seen some of the magic behind the web sites, apps, and systems you use every day.