It seems that the we have an odd tendency of glorifying the act of “getting our hands dirty” when it comes to learning programming. Perhaps when we aspire to a higher mastery in programming, we naturally look to pay its cost in a form of our struggle. However what really matters in learning is not our mere act of writing programs, but our willingness to give clear form to vague concepts. Writing code does not imply such diligence.
We never come to a full understanding of an idea unless we can clearly put it down in words. An idea in its raw form is ambiguous and naturally eludes our attempts to comprehend it. On the other hand, when put in a clear writing, an idea is given a semblance. What was once an incomplete notion grows into a tangible form. Writing code can give us some ideas, but it does not automatically bestow those ideas with a clear form.
While reading technical articles or solutions on Stack Overflow, we often experience moments of clarification wherein a concept or a mechanism becomes more intelligible. At such moments, the our reading of those articles not only has increased our knowledge, but also has brought us closer to what we already know, or what we thought we had known. It is simple—when represented in clear writing, ideas become clearer. In such metamorphose of ideas to its truest form, we also transform to our fullest potential.
Nevertheless we all too often put writing code ahead of clearly understanding an idea when in comes to learning to code. Maybe the idea of aspiring to the higher knowledge “the hard way” has a rather romantic undertone that appeal to our inner scholars. And in that light, a mere act of consuming technical contents might appear devoid of the glamorous sacrifice and hard work that writing code entails. And therefore we neglect the beautiful rise of ideas to their highest clarity, and our learning potential is not fully realized.
I think that the rebirth of ideas in their more mature form should be celebrated, because if we do not recognize it, the ideas die and become formless again, and will forever remain somewhat foreign to us. To recognize the evolution of ideas while reading technical writings, I have built a Dnote browser extension and have been using it to quickly put new technical ideas in clear words with minimal effort.
Whenever I learn a new idea or a somewhat familiar idea becomes clearer to me while browsing the web, I would hit
Ctrl + d on my keyboard to bring up Dnote, choose a book, take a moment to write down that concept in my own words, and hit
Shift + Enter to save the note. The whole process can be completed without a mouse and takes very little time. And every Friday I receive an email digest of all my notes. This way, I have been able to retain the sparks of ideas in their clearest form and keep them alive without much conscious effort.
During those brief moments of recognizing the rebirth of ideas, we have the luxury of being able to ruminate concretely on otherwise abstract notions. The reflection is on our own terms, not dictated by the elusive nature of ideas or the idiosyncrasy of the authors. Ideas settle in words of our own choice. What had only been a mere inkling finds its way into something tangible and enabled by our own voices.
And when an inkling is no more and instead becomes a knowledge, we find that complex ideas are nothing but a collection of simpler ideas. The concepts and solutions that overwhelm us in the hours of programming suddenly is not as insuperable as we thought. When we approach the process of learning programming as wordsmiths not as engineers, those ideas that once seemed insurmountable naturally break down into smaller parts that are all the more understandable.
I know why we praise “getting our hands dirty” as the only sensible way of learning programming. “The struggle itself toward the heights,” Camus famously wrote, “is enough to fill a man’s heart.” It is that poignant aspect of struggle that attracts our inner learners blindly toward churning out lines after lines of code. Yet without pausing to reflect on what we learn by giving a clear form to ideas, we can only learn so much by writing code.
Camus’ exclamation was aimed at Sisyphus, a mythological hero who was forever destined to roll a giant boulder to the top of a hill only to see it slide down once he reached the top. If we are simply trying to program our way to the height of engineering mastery, we, too, might be destined to repeat our inconsequential action in eternity without truly reaching our destination.
While surely such infinite struggle would be enough to fill our hearts, it is not be enough to fill our void yearning for knowledge. To learn is to bear witness to the metamorphose of ideas from ambiguity to clearance. To learn is to rise to the pinnacle of our eloquence to give form to the spark ineffable. It is that small step toward the essence of ideas that fills the heart of my inner programmer, for it represents not the struggle for its own sake, but an awakening of invincible ideas within us.