Nearly all the programmers I know, fell in love with programming because of the same reason. To be able to put pure ideas to life, to create something meaningful out of nothing. Truth is, no other matter is so flexible, as the stuff we work with.
We are developers because we love to construct things that work. To give soul to the machine. To make it act on our behalf. It's like magic.
That's why it is so difficult for us to understand, that a real software craftsman is a writer, not a constructor.
Uncle Bob is talking about it at the beginning of “Clean Code”. When you are writing code, you are actually reading a lot more. How is that possible? Let's have a look at an example: you have a project going, and you take a new feature from the Scrum/Kanban wall of features. And you:
- read the code to find a place where putting some more code will give you the result you seek
- read the code to better understand the surroundings, to eliminate potential side effects of your changes
- write the test and the code that does what the feature is expected to do
You can start with an acceptance test first, but that only changes the order, not the fact, that the proportions of reading to writing, are always in favor of reading. Big time.
So, if reading takes so much time, how important is to make things readable?
People are working hard to learn how to write faster, how not to use mouse in their IDE, they memorize all the keyboard shortcuts, use templates and so on, but the speed up is not significant in real work. Why? Because we are only writing code 1/10 of our time. The rest is spent on reading and thinking.
A good craftsman is a good writer, because he makes the code readable, easy to grasp, easy to understand. There is a huge shift in mentality, between a constructor and a writer. Above all, the constructor's goal is to make things work. The writer's goal, on the other hand, is to make things easy to understand.
The question is, who are we writing code for? The computer? Hell no. If that was true, we would be still writing in an assembly language (or maybe even in a machine code). The whole point of procedural, functional, object oriented languages was to make it easier for us to understand the code. And that's because we don't write the code for the computer.
We write it for other programmers.
To make the shift in mentality easier, let mi show you the differences in mindsets, between the constructor and the writer.
A good craftsman is a good writer.
And you know what one of the most successful writers of recent times, Stephen King, says?
That he's only a craftsman.
PS2: I've failed at giving appropriate credits to the author of the concept of programmer as a constructor. Let me fix that right away: the source of the idea that a programmer as a writer has opposition in programmer-constructor comes from a post by Andrzej Szczodrak that you can find in here