The most transcendental programming lesson
Who taught you what you know? Who guided you? Who made you realize a simple detail that changed the game? For me, it was everyone. One way or another, for me, everyone is a teacher. Of what to do, what not to do, how to do it better, worst, ugly or beautiful, but everyone teaches something. Even for those thinking “I’ve learned everything/a lot by myself”, what you’ve read was written by someone else, what you’ve seen was produced by someone else, what you’ve heard was said by someone else, and in every case, you are your own number one teachers.
But, once in a while, every lustrum or decade, a master has crossed my path, one whose lessons transcend and do not decay, lessons that become clear as seen from further in time. This masters, I call “grandmasters”, to add some romantic thoughts into our engineering minds.
And one of those grandmasters taught me to program.
It was my first “formal” job, meaning, the first one in which I must attend at a predetermined hour, with a predetermined salary, clothes and activities. I quickly achieved to go from intern to Jr. thanks to my cynicism, yes, the cynicism of creating a system in a technology I’ve never used before, for a new cliente, and for an industry strange for the company. This impressed the CEO, who assigned me to the “star project”, a product created by the company itself, also in a technology no one in the team knew.
But, cynicism wouldn’t be enough to build professional software. It never is. Luckily, the one leading the development (grandmaster), was not easily impressed, and had the patience and strength to bear my mistakes and energy. After a few months of working in the project, I’ve presented the following question to him:
Which is the number one ability of a programmer?
I guess that I am not the only one with taste for theatricality, because the grandmaster presented me a challenge:
“You have three tries to arrive to the answer, if you do I’ll invite you dinner wherever you want, if not, you’ll invite me”
Challenge accepted.
I started to revise bibliography, blogs, social networks, in search of ideas to solve the puzzle. After a few days, I made the first try, which was of course also the most obvious:
- Logic
- And why is that?
- A programmer must have logic to know how to connect the pieces in a coherent way, and be able to transform an input in the desired output.
- Necessary yes, but not the most important. You have two left
Uhm, well, at least the most obvious option was off the table, so I continued the search, although this time trying to analyze which of my skills could give my code more advantage, in my short and naive experience. After going through some code blocks, I presented the second try:
- Capacity for analysis
- Why?
- Is the number one step of every programming activity, analyzing the problem or requirement to give the best solution.
- Vital yes, but not the number one.
Darn it. Despite I knew it was just an office game, I enjoyed it enormously, so at that very moment I shot the last try:
- Abstraction
- Why?
- At the end, a program is just an abstraction of something real, so it is at the center of everything.
- Almost
After a few weeks, during payment of my lost bet, I presented the question again:
- Which is the number one skill of a programmer?
For me, is, the skill to correctly name things.
- Name things?
- Yes. Like over Rumpelstiltskin, naming something gives us power over it, and involves the deepest knowledge of what is named. A correct name implies that you have enough logic to understand it, that you’ve analyzed it, that you have abstracted its meaning correctly, but beyond that, that you can reference it at any part of your code, that it makes it yours and recognizable in the universe you’ve created, makes it maintainable for others, readable and useful.
Until this day, naming correctly variables, functions, classes, tables, files, etc, is in every lesson I give, be it implicit or explicit when creating products at Inflexion, and even more, understanding why other pieces of software have the name they do, without only memorizing it.
Software development it is today only a step in Inflexion’s offer, although is the prime one, do not hesitate in contacting us to help you with it.