I started reading Apprenticeship Patterns a few days ago. It started with the notion of mentorship, and it struck me in the weak spot, because that’s what I’ve been thinking a lot about recently.
It feels like me and people around me all get stuck on some experience level plateau. For the first several years in the industry you spend a lot of time improving your skills each and every day. When you look back a year or a month you can clearly see the path you’ve taken and all the ways you’ve improved yourself in. But another year or three pass by and you start feeling that something is not quite right. You and people around you read a lot, absorb and process relevant technical information in all possible ways, and yet you still feel the same. You work mostly the same way, you are not moving towards the mastery, you’re just doing your job (and maybe doing it well).
I’ve been trying to understand why it happens that way. One of the differences I see (and personally struggle a lot with) is a lack of mentors. When you’re young and inexperienced, there are always a lot of cool guys around, whom you perceive as the know-it-all wizards. They are always there to inspire you and guide you along the way of self-improvement. You look at them and see a path in the woods. You think "I’d like to be at least as good as this guy!"
But the years pass by, and now you are the "experienced" guy. Maybe you even have some (meaningless) job title, maybe you are leading a team and guiding newcomers now. But there is a problem — the other experienced guys around you are not so different now. You are all pretty much on the same expertise level. You don’t learn a lot from each other, apart from some rare tricks and past expertise references. And it’s damn hard to move forward now.
How do you become better every day now?
Try the new languages and approaches? You’ve probably already seen a cycle (or two) of the similar technologies raising and failing. It feels all the same. Reactive programming? Been there, done that a few years ago. Redux? Come on, back to centralized message dispatchers and visual state trees. ES7 async/await? Done it with C#5 and TPL before that (has it really been 6 years ago?) Elm? Elixir? Meh, read the basic "Introduction to functional programming" by Bird and Wadler a long time ago, not impressed anymore. Docker? Kubernetes? Integrating microservices? You see the point but you’re fighting their ugliness and don’t understand how everyone jumping on the hype bandwagon can call it easy and user-friendly. You saw what easy means. What you see now is bearable, but definitely not easy.
When you’ve been doing the software engineering for a long time now and it’s been working out quite well so far, how do you detect the gaps in your skills and your technique? You’ve got to try really hard to detach yourself from the routine context, take a step (or ten) back and try to get a better overview of what’s going on around you. It’d be extremely helpful to have a master wizard-like mentor around to tell you "look, Andrew, you can do this much easier" or "there is another way to accomplish your goal". But there is none. Nothing. Void. You’re out of the training grounds and now you’re on your own. I wonder if anyone else feels the same? Am I in the wrong section of the industry? Maybe I just don’t know the right guys and communities around where I can find the new enlightening experience?