Getting Started With Confidence

Getting Started With Confidence

Getting started as a software developer requires some research before you can do much, but learning through solving problems will help you become productive and proficient faster. Beginners and experts alike need to absorb the basic principals and tooling of a new framework or language before using it. The depths to which you can research any technology is limitless. Therefore it is important to balance the acquisition of knowledge with practical application of what you’re learning. Learning what’s needed to solve a particular problem, as you solve the problem itself, transforms that newly acquired knowledge into capabilities and confidence. Identifying problems and seeking to learn just-enough to solve them provides the focus to avoid endless learning without actually getting started. With each solution comes the confidence from realizing that you, the learner, can achieve outcomes with the new capabilities that you’ve acquired.

Their are tiers of knowledge that you can obtain for any given technology: enough to understand its purpose, enough to understand how it has been used; enough to use it yourself while referencing a guide; enough to use it from memory alone; and enough to exercise it to its limitations. Combined with the ongoing evolution of that technology, this means that there’s always more that can be learned. Striking a balance between the academic pursuit of knowledge and the practical application of what you’ve learned is crucial to making progress. Learning through solving problems is an exploration of the technology that is guided by the gaps in knowledge that become apparent as you strive to implement the solution, as well as what you become curious about in the process. That you’re striving to solve a meaningful problem will provide the motivation needed to continue exploring, learning and experimenting in the face of frustrating and unexpected problems or roadblocks that you will encounter on this pursuit.

Learning by solving problems doesn’t require that those problems be unsolved. There’s immense value also in recreating existing solutions to problems, especially as way to discover and appreciate the complexity required to provide simplicity. Just as painters learn to paint by replicating the techniques of masters, software engineers benefit from attempting to recreate existing apps and services. Attempting to recreate an existing solution will provide a deeper understanding of what is required to achieve the level of quality, functionality and simplicity provided by the existing solution. It’s not until you try to recreate something the seems simple, only to find it is in fact surprisingly complex, that you truly appreciate the complexity of delivering simplicity for the customer.

Inevitably you’ll wonder how to know when you’re “ready”. Ready to start coding, ready to apply for a software development role, ready to create a product, etc. The truth is you won’t know. Readiness in this context is something that can only be determined in retrospect. You can only determine your readiness once you put yourself into the situation for which you’re preparing for. The notion of being ready becomes a problem in and of itself that can guide your learning as opposed to a signal or indication that you will obtain at some point. Identify what you want to achieve, and make that your mission. Quoting John Perry Barlow’s 25 Principals for Adult Behavior, “Avoid the pursuit of happiness. Seek to define your mission and pursue that.” Bias for letting someone else tell you whether not you’re ready, rather than relying on your own judgment of this. Should their opinion be that you’re not ready, be mindful that that’s their perspective and with humility ask for feedback on what they believe is missing. These gaps become the next set of problems that you should seek to learn enough to solve.