The Eternal Novice: How to Keep Growing as a Developer
What do you see when you look at a baby or a toddler? There is so much to admire: their boundless energy, their unfettered enthusiasm, the purity of their joy, the truth of their innocence.
Beyond all of these, there is one thing they have and will gradually lose as they grow older: an infinite potential, a tabula rasa that has not yet been touched by negative experiences or been limited by choices or compromises. Maybe their talents are still unknown; maybe their personality still has not begun to pull in any direction or manifest its preferences. At this stage, they can potentially be anything, learn anything, do anything.
Each one of us is a bit like this when we start a new endeavor. When we look at some new field of knowledge for the first time, we are still unaware of the techniques, of the conventions of the community, of the things you should not do because the elders say so. We are still unlimited, and we can potentially do anything.
As we advance in the field, this innocence is gradually lost, and our horizons are shortened. We’ll choose to specialize in some direction, neglecting other potential avenues of research; we will choose a certain type of project or product and forego practicing others.
We will make choices and compromises, because of one important mismatch: Potential is infinite, but resources are not, and we can only realize the part of that potential that fits in our limited time, resources, and practice.
The Path of the Expert
In software development, you will typically choose one or more languages, maybe even select a single paradigm (maybe you’ll pick object-oriented programming instead of functional programming), and ignore the rest. You will perhaps choose to develop mobile apps and leave website development for someone else. You will eventually become very good in a narrow field of specialization and remain more or less helpless in all the others. In fact, you may do so confident that you are specializing and becoming a valued expert as is often recommended by John.
You will probably become jaded, even cynical, about the field you know. Calloused by experience, you will reach such a high skill in your specialization that you’ll be able to tackle without anxiety anything that comes your way in that area.
Whether this is good or bad depends on how you look at it: You can surely find comfort in being able to do a good, even excellent, job without sweating it and feel confident in charging a high fee for it. But I’d like to make the argument that in software development, this will be self-defeating unless you are well-placed in an extremely stable (and stale?) field. And that does not happen often in life.
The issue I have with this attitude is that it leads to hubris, the conviction that you have achieved your goal, know everything, and there is nothing else under the sun that you need to know. Sure, there are other things that you consciously ignore—other languages, other frameworks, other techniques or paradigms—but that is by choice and design so you can focus your skills on being the best expert there can be. If you’re really good, you won’t have much competition, and you can make a good living.
But the IT world changes very fast, and it’s quite likely your coding skills will eventually become outdated. At that point, it will be worthless to be an expert in something no longer in demand. And the crucial question will be: How much energy, how many resources will you still have inside to develop a new skill, from scratch?
The Balanced Generalist
Of course, there is an alternative: Don’t specialize too soon, keep a good breadth of skills, and remain fluent in a broad spectrum of technologies. In fact, there is a demand for this path. A lot of open positions today require full-stack developers, although what this means in reality is debatable. Surely this will make you more robust against the winds of change?
That may seem so on the surface, but beware this kind of thinking. It’s too easy to achieve generality by making only a token effort in everything. You dip your foot in a pond, venture a few steps in, and then retreat and go test the next water, and so on, and so on. In the end, you will have a shallow understanding of many things but will be outclassed by anyone else who is a specialist. Who will hire you then?
A business needs several different skills, and usually those are carried out by appropriate experts. The only time this does not happen, I’d wager, is when the business is constrained in the number of people it can hire, so each person has to wear many different hats.
This often leads to overwork, low productivity, and likely low pay. Either the business grows fast enough to hire more people and alleviate the load, or the problems accumulate until people leave. Because of this, I don’t think being a jack of all trades, master of none is a good prospect to thrive in, in the job market.
There is a fine balance to be had here. The above two cases are obvious extremes of a spectrum, and you should avoid both. You should have some kind of specialization to make you beat the competition in that niche, but you should not cloud yourself to the world around you. You should have a few more tricks up your sleeve in case Plan A has a sudden end.
So, how to do this?
The Right Attitude for Learning
The key, for me, is where I started this piece. Try to keep the innocence of a child, always look at things from a fresh angle, and think of problems as if you knew nothing about them and had not seen or solved them a hundred, a thousand times before. Try to be the eternal novice who can still be surprised by a job you know extremely well.
Let me explain why. The middle ground between the two extremes above is the T-shaped specialist, who has one or two areas of true specialization but also knows a broad base of other skills passably well.
To understand where this term comes from, imagine such a person with several skills, and lay them in a bar chart where the height of each bar indicates the proficiency in that skill. The specialist will have one or two bars significantly higher than the others; the two bars should be placed at the center. This high center and low base looks more or less like a T (especially if the chart is pointing downward).
If time did not move, this static image would be sufficient, but with the changing landscape of IT, it becomes more complex. Specializations may degrade in value if the technology goes out of fashion, and other skills may have to be worked on and developed until they become new specialities. The T of the T-shaped specialist should evolve in time, with some columns losing in height while others go up. It could easily morph into an L, something like a square U, or even a W.
The difficulty is achieving this evolution and avoiding staying branded in the initial T. That requires the capacity to learn, to admit the need for change, and to keep the flexibility to acquire new knowledge, possibly contradicting old beliefs. The more of an expert you are, the more humility you’ll need to recognize you have to go back to learning some basics. It will never be like going back to school; much of your knowledge will be transferable, but you should be ready to learn from younger and less experienced people without letting your ego get in the way.
You can only stay on the pedestal of certainty by ignoring all you don’t know, by blinding yourself to change and evolution. Admit you don’t know everything, that all knowledge is transient and has currency only for some time. An immovable rock will be eroded by the wind; a living organism will fight, be injured, and adapt to become stronger and more resilient to its environment.
At the same time, you should strive to keep the hard lessons of experience partially out of the way. Do not be prejudiced when learning something new. Approach learning with a young, untainted spirit, so you can still envision all the possibilities of the new skill without limiting yourself by past experience.
Be ready for self-doubt. Even if you’re very good, this new learning may make you occasionally feel underprepared. Think like a novice again. Remember, even Olympic runners were born without knowing how to walk, and in the end the experience you have will provide valuable shortcuts for learning what you don’t know.
It may not be easy to do this, so try to:
- Research each problem as if it were the first time. Although you have seen it before, the world is changing, and the real needs behind what seems like a stock requirement may be different today from what you did in the past, making the problem somewhat different.
- Look at the world around you. Even if you know your craft extremely well, new tools will have appeared outside of it that may solve the same problem in a different way.
- Understand the “language” of your society or that of your customers. As you grow older, try to find what younger generations think, believe, or do, because more and more of your customers will be younger than you. Be familiar with their culture codes, the kinds of products they use, and what they use them for, as this will shape their expectations of anything you produce or sell.
- Be open to new ideas from your collaborators. It is easy to become embattled in the skills and tools you know so well and to dismiss newer ones as rehashes that re-solve the same problems. But newer tools will likely solve those problems better, and learning from your colleagues is a cheap way of improving/updating your skills.
- Keep reading, searching, and trying new things. Network with others, and learn what they’re reading. Even if you don’t read everything out there yourself, get at least the headlines; know what is happening and what is hot so you can converse about it when someday the topic drops in your mailbox.
Not a Fool’s Journey
I hesitate to evoke in a post for programmers an esoteric concept. I don’t follow such concepts in my life or expect or defend that people do. But there is an intriguing idea related to Tarot that is often applied as a metaphor for life, growing, and writing: The Fool’s Journey.
The reason I bring it up here is because the first stage of this journey, The Fool, represents essentially the attitude that I outlined in this post. This is the first card in the Tarot deck, and it usually bears the number 0. It is outside the journey: Itis the hero itself, representing the innocence of the new beginning, the willingness to go forward and learn despite all that has come before and the difficulties ahead. The Fool knows nothing, they are innocent and humble and dream only of a favorable future. But throughout the journey, they’ll face hardship and acquire strength, wisdom, and mastery.
In the rest of the journey, the Fool meets all the 21 cards that make up the Major Arcana of Tarot. Some of them represent a stage the Fool must overcome—difficult decisions, as in The Lovers (card 6); replacement of old beliefs by new ones, as in The Hanged Man (card 12) or Death (card 13). Others represent something they must learn—like control in The Chariot (card 7) or balance in Temperance (card 14)—in order to transition to Hero at the end, when card 21, The World, lies conquered at their feet.
In drawing this parallel, I want to focus on the journey itself and remind you that the key is not to remain static. Life is learning, moving from one skill to the next as those you have lose value. And that can only be done with the right attitude. Whoever does so is no fool and will cherish the excitement for something new, and the thrill of achieving new goals.
Be humble, allow yourself to dream, and reach success in your career.