Awareness in Software Development
Lessons learned from Chess Tactics
--
Studying tactics in chess means learning what moves you should make when it’s possible to gain a short-term advantage. If I can capture the other player’s knight in three moves, that’s great. But if instead I can get checkmate in four moves, then it’s in my best interest to ignore the knight and do that instead. Tactics is all about seeing not only the good moves, but the best moves, because you can’t play a move that you never saw.
In his Ask Me Anything on Reddit, Magnus Carlsen, who’s currently the greatest chess player in the world, was asked by a fan what he could do to become a better chess player and get his chess ability rating above 2000. A rating that high puts you in the expert/master category with grand masters being at about 2500. Magnus said:
“Studying tactics, I would say. Up to that level, most games are still decided by someone hanging a piece…or blundering a checkmate — haha”.
Even for a player performing at an expert level, Magnus’ advice was to simply see the board better and be aware of the best options available to you.
As a developer, my greatest enemy is not knowing what it is that I don’t know. When faced with a problem, I choose a solution by comparing options from the range of solutions that I can imagine. But what I can imagine is incomplete; it’s limited by what I’ve learned up until that moment. There may be better solutions available but I won’t be using them unless I’m aware of them.
Some of that awareness (the ability to see the best move) comes with experience and exposure to a lot of different programming problems, but some of it also comes from the intentional study of the underlying patterns that make up all working software. Seeing and understanding the building blocks available to us are what teach us to recognize patterns and approach problems from the perspective of the whole board. That way when there are good moves and best moves, we see them all.