A trainee undergoing military training can disassemble and assemble a machine gun within a minute. At first, this might seem very complex, but everyone in the academy manages to do it. The more pertinent question is not ‘how’ but ‘why’. It’s because their lives depend on it. Similarly, a disciplined programmer learns the vocabulary and syntax of a programming language with utmost sincerity. Every word in the programming language is sacred, and any non-conformance is akin to blasphemy.
Perhaps the mind sees what it chooses to see, and I am trying to draw parallels deliberately, even if there aren’t any. However, I do see a lot of similarities between parenting in an Eastern cultural environment and the art of disciplined development. Interestingly, the phases of learning and the four stages of Hindu life share commonalities.
Brahmacharya (student life): In this phase, you need to understand the vocabulary of the language and practice. Practice as much as possible to ensure that everything about the programming language is permanently ingrained in your brain. With extensive practice, you start recognizing patterns that the untrained eye cannot see. In David Epstein’s book ‘Range’, there’s an anecdote about a well-known grandmaster, possibly Judith Polgar, who can recreate a chess game scene by looking at the board for a few seconds. However, if the pieces are arranged in a way that results in an impossible position or doesn’t conform to the laws of chess, then the grandmaster struggles to recreate the same position. Conclusion: the more you practice, the more patterns you can subconsciously recognize.
-
Grihastha_ (household life): Once you know the basic vocabulary of the programming language and have experimented with a few projects, it’s time to seek a community. The best places for this are ‘GitHub’, hackathons, and meetups. If your area, college, or city lacks a programming ‘family’, create one. This phase is essential as you gain a sense of responsibility for the code you author. Engaging with major open-source projects and resolving issues gives a sense of belonging to a community.
-
Vanaprastha (retired life): Though ‘retirement’ might be misleading here, I’ll try to fit the idea. This phase is for introspection. You ponder why one paradigm is better than another, or why a specific technology is well-suited for a particular problem. These existential questions are best answered in solitude. If these questions are asked too early in a developer’s journey, it leads to confusion. Every programming language has its strengths and weaknesses. Even a language like PHP, often criticized, has significant advantages. Diving into these questions before fully understanding the language can prevent a developer from appreciating the nuances of their chosen language.
-
Sannyasa (renounced life): Only when you fully understand the constructs of a language are you ready to exploit its paradigms to suit your needs. In the final phase, a disciplined programmer understands the discipline so well that they can experiment with established rules for deeper comprehension and enlighten others in the same field.
Until then, follow what is prescribed in the textbooks. You don’t have the luxury of iterating over a collection in your own way; you must perform actions as the textbook suggests. Yes, your learning curve may seem to plateau, but you will start to appreciate the science of learning.