The Infinite Pursuit of Mastery
A difficult truth in software is that there is always something new and your understanding of what is best will always be in a constant state of change and adaptation to the latest version of technology. A result of this can be the feeling of being stuck in your own personal hamster-wheel hell, sprinting in place and yet going nowhere while the rest of the technological world passes you by.
This has created what I call a novice graveyard, which is teeming with the fallen careers of many eager, passionate, and potentially great developers who simply never came to be. Because of this, one of the most important and dangerous times in a programmer's career is the very first time they realize just how much they don't know.
Thankfully, the internet is abundant with a myriad of amazing tutorials, guides, blogs, and books on how to get started in software development. These guide novice programmers through the sacred and hallowed ground of their first hello world
and further into increasingly complicated topics. For many, this is a time of great excitement and sheer wizardry as they learn to create something from nothing, a concept which has always driven and kept me interested in this field.
As the novice blossoms into a more advanced programmer, their understanding of the field weaves itself like a spiders web, and many begin to notice the difficult and painful truth that yes, indeed, there are holes in their web, and far too many branches to ever successfully weave on. And the branches just keep growing farther apart every year. How each person comes to this realization, either gradually through various and more advancing experiences, or in one abrupt and stark unveiling via an exceptionally advanced subject matter, is unique to everyone, but eventually all come to understand that they exist on an insignificantly small island of understanding in an infinite and growing ocean of technology yet-to-be mastered.
And then the second wave of crushing reality dawns on the horizon: every year some brilliant mind comes up with a new programming language, framework, or technology that further expands the already insurmountable task of progressing towards mastery. The realization that the well runs very deep indeed and the prospect of trying to succeed in a field where things are in a constant state of flux is overwhelming to some and many novices (and even intermediates) fling their careers into the novice graveyard while the world loses another great technologist who could have been.
It isn't my intent to discourage others with my words, in fact it is quite the opposite. All programmers, myself included, have traversed this feeling of helplessness against an ocean of information. We all must move forward in this field with the understanding that the novice graveyard exists so that we can march right past it.
Though things are constantly changing and new technologies are always just on the horizon, I've found that many of the skills and patterns that you discover and master as you progress transfer to completely new and unseen technologies. No one can take away the inherent sense of efficiency from your hard work learning to understand the secret logic behind algorithms. You still get to bring your understanding of what it means to write clean, readable, and maintainable code to new languages and frameworks. The skills that you develop serve as a concrete foundation to help you flexibly learn newer technologies at a faster rate and lessen the strain of the constant assault of new.
One final and liberating take on the harsh truths laid bare here is that mastery in software is difficult (some even argue impossible), but this remarkable characteristic paves the way for new talent to be extremely relevant in short period of time. Because new technologies are constantly being released, it affords newcomers the opportunity to train in new cutting edge technologies, and by demonstrating sufficient competency, compete with peers who might be 20-30 years their senior. That is a incredible possibility that is uniquely driven by the constant morphing and flux of technology and software.
The challenge and opportunity that software development brings are what attracted myself and many others to the field. I hope the knowledge that we all face our own oceans of infinite knowledge inspires both novices and veterans alike to continue on their journey and help advance the world one line of code at a time.