STR: A Disciplined Programmer
The Disciplined Programmer
A trainee undergoing military training can disassemble and assemble a machine gun within a minute. It might seem very complex at first but everyone in the academy is able to do it. The more pertinent question is not how but why? Why because his / her life depends on it. The disciplined programmer is a programmer who learns the vocabulary and the syntax around the programming language with utmost sincerity. Every word of the programming language it is a holy word and a non-conformance is bordering blasphemy.
May be the mind sees what it chooses to see and I am trying to deliberately draw parallels even if there isn’t one. However, I could see a lot of similarity between
Bringing up Kids in an Eastern cultural environment 101 and the the art of disciplined development.
Interestingly, I found that the art of learning and the four phases of a Hindu life has a lot in common.
- Brahmacharya(student life): During this phase you need to know the vocabulary of the language and practice. Practice as much as you can to make sure that everything in and around the programming language permanently sits in your brain. When you practice a lot you start seeing patterns that a normal eye cannot. In the book Range by David Epstein he gave an interesting anecdote - A well known grandmaster (If I remember correctly it was Judith Polgar) can recreate a scene from a chess game by looking at the board for a couple of seconds. However, if the pieces are placed in such a way that the resulting position is impossible or doesn’t conform to the laws of Chess then the Grandmaster had hard time recreating the same position. Conclusion : the more you practice, subconsciously the more patterns you are able to see.
- Grihastha(household life): Once, you know the basic vocabulary of the programming language and have toyed with a few projects of your own, time to search for a family. The best place to search for this is ‘Github’ and Hackathons and meetups and … If your area / college / colony / city doesn’t have a “family” then create one. But this phase is very essential because you will have some sense of responsibility with respect to the code that you author. Searching for low-hanging fruits in major open source projects and resolving the issue gives a sense of being part of a family.
- Vanaprastha(retired life): Although the word retirement is misleading here but I will try to fit the idea. This is the time when you introspect. Why one paradigm is better than the other, why a specific technology is well suited for a special kind of problem. These existential questions are best answered when you are pondering over these questions in solitude. If these are the questions you as a developer ask on the first phase then you end up achieving nothing. As per my experience every programming language has pluses and minuses. Even a programming language like php that everyone loves to bash has significant underscoring advantages. If a developer dives into these questions before getting to know the language then he won’t be able to defend why ‘your choice of programming language’ is better than mine.
- Sannyasa(renounced life): It is only when you understand the constructs of a language fully, then you are ready to exploit the paradigms to suit your own needs.
The last phase of the disciplined programmer is that you understand the discipline so well that you can toy around with the established
rules to have a deeper understanding of the elements and you can enlighten, so to speak, other people following the same discipline.
Until then do what is required in the books. You do not have the luxury of iterating over a collection, you will perform the act like the text book suggests. Yes, the tangent to your learning curve will be almost parallel to the X axis but you will start appreciating the science of learning.