Most software isn’t what people think it is.
It’s a common thread – it’s mistaken for lots of things that it isn’t.
“I bet you’re good at maths!”
Ask the well-intentioned friends and strangers who think we write in ones and zeros.
“Software is engineering”
Cries the mid-career developer, desperately searching for legitimacy in a world that makes it hard for people to feel their own worth.
“Software is architecture!”
Says the lead developer, filling out job applications looking to scale their experience and paycheck.
But programming is programming. And we do it a disservice, we lower it, by claiming it to be something else.
Software is the youngest of industries, and with youth comes the need for identity, and understanding – because those things bring legitimacy to an occupation.
Every new job must run the gauntlet of people’s understanding – and when a discipline is new, or complicated it is tempting to rely on comparison to borrow credibility, and to feel legitimate.
But comparison is reductive, and over a long enough time can harm the identity of the people that rely on it.
Software is none of the things that it may seem like.
I’m so proud of software and the people that build it. And I want you to all be proud of what you are and what you do too.
Software is the most important innovation of the last one hundred years. Without software, the modern world wouldn’t exist.
Software is beautiful because we’ve found our own patterns that aren’t engineering, or design. They’re fundamentally of software, and they have legitimacy, and are important.
You wouldn’t TDD a building, even if you might model it first – the disciplines that are of software, are ours, and things to celebrate.
We do not need to borrow the authority or identity of other disciplines on the way to finding our own.
Just as much as we should celebrate our success, we should embrace and be accountable for our failures. It’s important that we embrace and solve our ethical problems, defend the rights of our workers, and are accountable for our mistakes.
Because software does not exist without the humans at the centre of it.
There’s a trend of negativity that can infect software.
That everything sucks, that everything is buggy, that modern programmers just plug Lego bricks together – and it’s toxic. It is absolutely possible to be critical of things that you love to help them grow, but unbridled aggression and negativity is worthless.
Software, even buggy software, has changed the world.
Software, even software you don’t like, has inspired, and enabled, has been a life changing experience to someone.
As programmers, our software is our work, our literature, our singular creative output.
As romantic and pretentious as that sounds – respect each other, and the work, lest we drown out someone’s beautiful violent urge to create and make things.
I was recently on a podcast where I was asked what advice I’d give to myself twenty years ago, if I could, and after some deliberation I think I finally know the answer.
“Always take more time”
Time is the most finite of resources, and if you want to write beautiful software, you have to do it with intent. With thoughtfulness.
And the only way to do that is to take your time.
We’re often subjected to environments while producing works, where time is the scarcest resource – and simultaneously the thing you need to defend the most to produce work of value and of quality.
If I could have my time again, after every change, every completed story, after everything was done, I’d give myself the time and the mental space to sit with the work, and soak it in, and improve it. Taking time, in the middle of my career, has become the most important part of doing the work.
When you realise that how you do something matters as much as why you’re doing it – that legibility and form directly affect function, when you take time to think articulate why something is – that’s when you do your best work.
And now the contradiction – after writing about how software should be empowered to be its own thing, let me tell you what I think software is really closest to.
Software is fundamentally a work of literature.
You can look at software through the same lens you would as any body of writing. It has text and subtext. It has authorial intent that perhaps is contradictory to its form. It has phrasing, rhythm, and constrained grammar. Software is a method of communicating concepts and ideas between humans, using a subset of language. The fact that it happens to be executed by a computer is almost a beautiful side effect.
Your code tells a story, your commit messages transfer mood. The best code is written for the reader – using form to imitate function, and flow and form to transfer meaning.
I love software, and I love the people that write it – and who do so with intent, and thoughtfulness. You’re not plumbers, or electricians, or engineers, however wonderful those jobs are.
You’re artists. <3