A few days ago I was at a coding event with a friend. Bunch of coders who agreed to work side by side until the wee hours of the night just to see what they could come up with. If there were to be some kind of rank in the software world, my friend would be one of these generals that has several rows of medals in his jacket. Still his words were:
“I just make coffee around here”
And it was pretty darn good coffee.
And in the wee hours of the morning, as I was making a pause while trying to figure out how to get some pieces of code to work in synch, I had to ask myself :
What do I do around here?
And then it hit me.
I am a writer
But wait! Am I not in the software business? Well, yes but. What is the difference between writing a program and writing a book? I have written books in the past, and the process is quite similar to writing software. Let me explain:
Before you start writing a book you need to have an outline of how the story will evolve. You need to sketch the main characters, and you need a path that will guide the reader from the beginning to the end of the story. The motivations of your characters have to be defined, and above all you need to know what you want your reader to take with her at the end of the story.
With a good plot, the details of the story will kind of fill in by themselves. Yes, there will be some interesting twists that happen along the way. A good plot makes enough space for them.
Before you start writing code, you need to have a sketch of what the end product will do. You need to understand how your users will interact with it, and what they will have at the end of their journey. Just like with a good plot, this ideal end product has to make enough space for how the engineers will solve the technical hurdles that they will encounter.
There was a moment in my life when I was writing for an online periodical. I had a weekly time slot, and plenty of ideas to write. My editor back then was like my guardian angel. She would tell me which ideas would stick and which would bomb. She had eagle eyes, and would pick up the word that was on the wrong place, or the paragraphs that needed polishing.
There are many ways to write software, but in the end you always need an editor, which can be your Quality Assurance team, or your Release Manager, or in doubt your Product Owner. These are the guys who would take what you have written and ask the pointed questions.
Editors and software QA guys have a very different way of viewing the end product than the writers. As a friend used to put it: “I am a tester, and I can reduce your code to pieces of stale chewing gum in minutes”. Editors give you a second pair of eyes on how to view what you have produced. Sometimes by looking at the trees for so long you can just not see the forest anymore. Your QA guy will point you to the forest fires.
A good read is more than just a good story. The best books hook you in the first paragraphs. Snoopy had it right when it was looking for the right line in his famous “It was a dark and stormy night”. A well written text is kind of a symphony. It has its rhythm, it delivers the punch line just at the right moment. You only get to write like that by reading and learning from great writers.
Good software is more than just a set of interfaces you code against. Good code takes into account the capabilities of the client software and ensures that a smart phone application will have to make only one single call to get all the information it needs to show that screen.
Languages have their own defining characteristics. German is a very exact language, while Japanese is very vague. C++ will throw a fit if you pass it a 64 bit integer instead of a 32 bit, while Javascript will take a Trojan Horse if you send it one.
In software as in literature knowing your language well takes you a long way.
Great books get translated, sometimes new editions with updated facts are written, and sometimes books are written on how to interpret a given book.
In the software world, you will always have that new set of features to implement. Or the new type of hardware to support, or the newest user interface changes to adapt to. And yes, you also have translations.
For a book to live on it has to have a solid architecture from which other authors can build upon. A set of ideas that can be exploited for the saga. A software also needs a solid architecture for this to happen. A new mobile device to support, adaptation to a new use case that is popular among the users.
Adapting the saying by Leonardo Da Vinci:
Art is never finished, only abandoned.
Software is never finished, only released.
I am now working on my next piece of art. And I know damn well that Leonardo is right…