We hear the phrase "learning should be fun" thrown around a lot in the software development world. It certainly helps the learning process be more enjoyable when it's considered something of a diversion. But learning is also serious business. Developers who don't take professional growth seriously fall behind quickly. In five years, a programmer who hasn't picked up any new skills may find himself akin to a rudderless ship in the middle of the ocean. In fact, for budding developers, I offer only one piece of advice: if you're not willing to learn new things every day, you should not get into this business at all.
It's somewhat poetic that developers of "soft wares" must continually reinvent themselves. Like the human body which some say regenerates itself entirely every few years through normal biological processes, the economy of programmers depends on the regenerative capabilities inherent in the tools we ply. We feed on the change that drives us to constant betterment.
Along the way, it's tempting to get comfortable, resting upon our laurels as they say. We might become accustomed to a platform, a language, a set of tools. In many other walks of life, becoming comfortable serves a purpose related to self-preservation. Can you imagine a mason giving up his trusty trowel and level for tools completely foreign to him? Moreover, can you imagine him establishing a pattern to seek out new tools every few years? Of course not. The mason's craft is enhanced by learning one set of tools well and sticking with them for his lifetime. Minor enhancements may come along from time to time but the mason's craft was essentially sealed in time aeons ago.
In the craft of software development, we're constantly bombarded by new tools and new techniques. One can argue that it's the immaturity of our craft that creates this sort of roil and toil. It's also worth arguing that our lack of satisfaction is driven by market forces bent on selling us constantly better hardware. But I think it's more related to the pliable nature of the economy in which we serve and perhaps a predilection for tinkering in our species.
Tinkering though is not learning. It nibbles at the edges of real learning and supports the overall effort, of course. However, deep learning is a rigorous process. I had the pleasure of listening to a lecture by Dr. Mary Slade from James Madison University a couple of years ago concerning gifted education. She described the steps that were required for deep learning to occur. I had honestly never rationalized all of the phases that one must go through to lock in true mastery of a topic. Going from mere remembrance all the way to creativity, there were six or seven discrete steps as I recall. Along the way, tinkering and playfulness play a part in the learning process but those fall away around the halfway mark. What remains on the path to creating truly new and unique outputs from acquired knowledge are hard, often unenviable tasks that require deep reflection and becoming critical of the learning process itself. Self-doubt lurks in those waters and many give up when faced with the challenges.
And thus, it was the heart of Julie Lerman's keynote address at CodeStock 2013 entitled "Disrupt Your Comfort Zone" that got me thinking about my own situation as a programmer. I've become very good at what I do. In terms that author Andy Hunt might describe in The Pragmatic Programmer, I've made the transition from journeyman to master in the realm in which I operate largely by following his advice. Yet, I am fearful that my mastery, which would serve me well were I in the business of stacking bricks and such, may become a detriment to me in due time. So I push myself to take up new ideas, play with them a bit, and regurgitate them mishapen and quite damaged until I get it right. When playfulness gives way to the hard work that brings criticality, I resolve to stay true. As Julie showed me, only that which is achieved through difficulty and repetitive failure can truly change our nature. Only that sort of labor can better us. Thanks, Julie.