I have read many articles in relation to programming on the subject of "Mastery." Master can be defined as:
- comprehensive knowledge or skill in a subject or accomplishment.
- control or superiority over someone or something.
The first definition does not sound so bad, but the second one starts to get pretty creepy. It is the superiority issue that starts to become a problem when we enter the programming world. It is no secret that there are some huge egos in this field. There is nothing inherently wrong with seeking mastery in a given field, what I will argue however, is that claiming mastery leads to a narrow mindset, boredom, and makes you an absolute nightmare to work with.
“In the beginner’s mind there are many possibilities, but in the expert’s there are few.” - Suzuki Roshi
If I could be assured you would read this quote over and over, I would just leave it at that, however let us discuss and relate this explicitly to the world of programming.
It should be noted right away that there is a huge difference between having pride in our work and being egotistical. It is important to take pride about our work as when we are proud of our work we work diligently, deliberately, and with care. When we consider our work to have nothing to gain from input from others, we have ventured into the realm of the egotistical programmer.
When we make the internal shift to considering ourselves a master in something, we no longer have the space to take in what is new. We end up missing details, because we no longer consider it necessary to take in new information. When we are master's in something, what we are often doing is giving ourselves the implicit permission to stop paying attention.
I would argue that when we consider ourselves masters we lose our innate curiosity and following that, our enjoyment of our craft. This leads to developer burnout and general unhappiness. When we do not have curiosity, we no longer ask questions, we become 'better than' or 'above' our peers and therefore lose the input of people with immensely diverse thinking and viewpoints.
Putting it into Practice
- If you are a master, there is nothing to refactor, take a step back, make your code better.
- Re-write it
- Do code retreats, write and rewrite a program or a method, deleting it with each iteration.
- Pair Program
- Pair with someone you consider to be better than you, learn all you can. Pair with someone you consider to be worse than you, learn all you can; treat it as if it were the first week you were learning a programming language.
- Ask Questions
- Ask questions about things you think you already know, you may be surprised by what new information you get.
- Ask questions about things you feel you are expected to know, we all have holes in our knowledge; do not pretend to know.
- Do not let a fear of looking stupid prevent you from gaining clarity.
- Be Willing to Not Know
No one can be masters of everything but when we are open to not knowing, to not be a master, we open ourselves up to a lifetime of learning and create a better environment for ourselves and those around us.