I like making software

I think making software is the bee’s knees.

I go between wanting to do it, and actually making it all the time.

I’ve dreamed about doing this when I was a kid, and I still dream about creating that great algorithm, a clear beautiful user interface, a great developer experience on the console, and more.

I also really wish to recreate existing software.
Esoteric things mainly, nothing cutting edge and fancy. Like the SSH protocol, SSL handshake, a container platform to run my home grown functions. A tiny database, and whatever other software I see or use that I think is just swell.

The craft of software making, though, does not like me often.
It challenges my ideas all the time.
It laughs at my face, hiding my faults in plain sight, and mocks me repeatedly with cryptic error messages when I can’t see them.

It refuses to perform tasks I ask it purely on logical grounds, and never cares about how I feel about the problem.
It ignores how much I believe my code should work.
On those days, I do not like making software.
It is those days when I try to think why I make software in the first place.

I’ve dedicated more than two decades to software and only recently it tolerates me, on a good day.
Those days, it can tell I’m really into writing the code I’m writing.
Then it lets things flow.

On those days, the only payment it asks for is my sense of time.
None of the anguish and frustration that is its usual fare.
When minutes turn to hours, and hours to days, I do not know.
It even demands my attention when I’m not sitting on the keyboard.

I admire others that make software every day.
Not just the giants like Linus, Ada or Stallman.
Not just people senior, and more experienced than me.
Anyone who is able to solve a problem in an interesting way.
Anyone who shows up daily and produces software daily. Through the frustration, doubt and anguish.
I admire people who can think clearly.
Clearly enough for the computer to understand immediately.
Those people are better engineers than I.

Software is a collaborative exercise usually.
While we sing songs to the computer, we are actually talking amongst humans.
People that write software are less logical than computers.
They have feelings, and emotions.
Sometimes engineers forget those feelings exist, and it is sometimes understandable.
That makes writing software as an occupation hard.

Software writing is an occupation is a curious thing.
All the people who are writing the software are artists.
All the people who consume software, use it as a functional tool.
It is the same as a carpenter who crafts a chair lovingly, and a passerby sees it only as a platform to rest their legs.

Unlike the carpenter, the software writer’s art is hidden behind the compiler’s veil.
An invisible chair that still allows the user to rest their legs.
All the toil, sweat, and anguish that was spent on software is hidden.
All everyone can see, is that it functions.

If the software writer is coupled with a designer, the software gets a face that is beautiful.
However, that’s just one part of the whole.

Software writing as an occupation is a curious thing. People who write software try to make a lot of rules around the process of creating software.
They toil over what is the right structure, they worry about incurring debt.
The people who manage the engineers, believe if they try hard, the art of making software can be a formula.
They plan meticulously, and plan when they think the software can be functional and shared.
The engineers have learnt it’s not a plannable action.
The good managers have learnt it too, but it has to be done.
Software is too fickle for that.
They all try anyway, and on good months, they only overshoot the plan by a few weeks.

I like making software still.
The pain and the anguish is worth the gloriousness of a functioning piece of code that I toiled on.
Writing software is its own reward because at the end, I still made something.
Some kind of creativity was unleashed upon the world that was uniquely, flawed-ly, mine.