Monday, November 2, 2015

All Professional Developers Are Self-Taught

One of the many surprising things that I realized in my first year of being a Software Developer is that it is no special thing to be self-taught. The fact is that all of my co-workers are similarly self-taught in all of the concepts we currently use.

The difference between me and them is that most of them have a degree in a field that is semi-related to what we do today. Until very recently, version control systems, design patterns, and proper debug techniques were not taught in college. All of these things were used in the field. Yet, these three topics form the core of the profession.

I was lucky in that the self-help resources I used to learn also incorporated these aspects as I went along. I had a strong understanding of VCS and debug long before officially joining the team. I knew several patterns based on the applications I learned to build.

I was humbled when I learned that the feature I believed set me apart actually included me. My inclination to research new terms and strive to understand new concepts is mirrored across much of the team. The really good developers all do it. I'm not one of the 'really good ones', but I've become a relied on resource for some tasks. Also, I continue to meet individuals with computer science degrees who have done nothing with it after earning it. The degree, for them, became a spring board into something else - most frequently management. I have no issue with this - in fact I find it encouraging - as though there is a viable exit strategy if this all gets old.

Some say that they pursue additional knowledge in software development out of love for it. Personally, in my interactions with fellow developers, I see more pain than love. Yes, many of us develop because of pain. The most common reason to do something is because someone says "God, that was awful. Lets try to automate/document/fix this so we don't have to do this ever again." What my team loves is when everything runs well and no intervention is required. What we love best is when the people who rely on the system also trust the system - and trust us.

So it makes sense that we try to stay abreast of new technologies. I constantly look for that new concept that can change the way I look at problems. More experienced devs look for entirely new paradigms. Some skip from new truth to new truth like mad philosophers. So far, I've fought to understand my current technology more deeply. I'm told that this understanding comes more easily with time. I can hope for that.

When knowledge takes root within me I feel like I can begin to understand how the world grows around me in a whole new way. The applications that previously seemed to function by some sorcery now follow a discernible pattern. The majority of the plumbing for most applications is discovered in the field. The university classroom cannot teach much of this - particularly since a developer tends to become specialized well after they receive their diploma.

Those who have only recently graduated and are joining their first team will find that what they were not taught will astonish them. The landscape for software development sometimes seems to resemble a perpetual classroom with more ongoing education than any medical doctor - or similar profession.