Mentorship
One of my favorite pieces of industry trivia is that 50% of what we know is no longer relevant every 18 months. Whether still accurate to this day or not, it paints a good picture of how important it is for us to constantly learn new things. It takes an incredible amount of learning even to just tread water in this industry, and it's not humanly possible to become an expert in all its sub fields. Against this intense need to absorb vast amounts of knowledge, I think the dev's two best weapons are hobby projects driven from places of curiosity, and mentorship.
It's ironic to me both how little our industry knows its own history, and how much it benefits from practices that other industries have long forgotten. While many industries have all but required college degrees, I've found that ironically our industry where knowledge evaporates actually requires much less schooling. Instead it seems to me like we're moving closer and closer to something like the apprenticeships of yore. I think it's this apprentice style mentorship that benefits us the most, but regardless of what a mentorship looks like, I think there are a number of attitudes and approaches that can help us fight that tide of fading knowledge.
My Story
Perhaps most of the best devs I've worked with have been all been self taught. I think when you enter the field without a degree, that insecurity can drive you to improve with an urgency that degree holders often lack. Both when I started my first dev job and as I was trying to break into the industry, I spent tons of time doing hobby work. It felt like I burnt myself in every way I could, and one of my struggles was to find where to look to find good instruction.
Finding someone willing to sit with me, answer questions, and point me in the right direction was, to be honest, probably life changing. To have met someone who was patient with me, encouraging, and also genuinely excited about software was a huge help not only to my career, but also to forming how I could continue to learn on my own. Having a mentor gave me a huge confidence boost while also helping me be vulnerable and ask embarrassing questions.
The best mentors add fuel to the passion of a mentee. They excitedly open doors for a mentee, guide and council them where they are week and encourage them where they're becoming stronger. My first mentor in tech certainly changed the course of my career, but he also helped grow my passion for software and helped me form many of the attitudes and disciplines I still use in software today.
I was hugely grateful for access to my mentor's knowledge, his patience answering questions, and his willingness to give me takeaways and then to go over that homework together. Before I had met him, my learning had been like a monologue: I'd try to do something and research how to do that through internet and books. This was a fantastic way to learn but it was slow and difficult. Having a mentor allowed me to learn through an open conversation where it wasn't solely on me to figure out where to go next; I finally had someone who made helpful suggestions and gave me the hints I needed.
Profiting from a Mentor
Further along in my career, I've now mentored a number of people to varying levels of success. Frankly, the majority of a successful mentorship comes down to the mentee. It's the mentee that ultimately drives a mentorship and sets the goals for that mentorship. The best mentor in the world would have a huge struggle to improve someone who is unwilling to change, but as a driven mentee, you can profit even from a sub par mentor.
A good mentee needs that "reckless passion" of youth. He needs to be able to initiate, listen, and work. He should recognize the great worth of access to a mentor and treat that opportunity with respect. He should be willing to make two sacrifices: appearances, and comfort.
A mentee should recognize that a mentorship is pull, not push. The mentee may lack clear goals or purpose, but if he lacks drive, the mentorship will likely fizzle out. The mentee should come to meetings with the mentor with some question or goal, even if that question is "how can I decide what I want to do within software". Questions can be vague and broad, or as specific as an issue with a line of code. The important thing is that the mentee is "pulling" information from the mentor instead of waiting for the mentor to "push" information to them. The mentor can be a powerful resource, but they can't stand in for a mentee's drive or desire.
A mentee should be willing to trade ego for experience. If it's more important for a mentee to sound right than to learn, they've already stalled out their learning. On the other hand, a mentee who can easily say "I was wrong" is set up to outpace his peers. This doesn't mean that as a mentee you shouldn't debate your mentor or others, or accept ideas without thinking through them. Challenging ideas humbly, legitimately assuming you know less and are just missing a piece, is a secret weapon. It can be very hard to do, especially for a young dev exiting small ponds where they were a big fish, but recognizing you don't know is the first step to gaining deeper than surface level knowledge.
The third pillar of the successful mentee is to back up your words with actions. If a mentor gives you homework, you need to come to the next meeting with that homework done, or with significant progress on it. This echoes the above points. If you're talking but not doing, you're not really driving, nor respecting your mentor's time. I've offered essentially infinite time to everyone I mentor, with the caveat that the more we meet the more work I'll assign them. I've never found myself pinched for time because of mentoring appointments. Ultimately the mentor relationship intensity is dictated by the mentee.
Mentoring Well
Anyone willing to help someone else can be a mentor, but mastering mentorship is a long road. Interviewing and mentoring are two soft skills that I frequently wrestle with and suspect I'll be practicing and learning for a long time to come. It seems to me that while good mentoring requires wholistic maturity, there are some mentoring specific areas worth focusing on.
First, per the section above, part of being a good mentor starts with evaluating the sincerity of the mentee. Are they just checking a box for their work, or are they desperate to improve? In my first meeting with a new mentee I'll often tell them that I expect them to put in the work, but if they do, they're welcome to meet as frequently as they like and request things of me. I'll then assign them some open ended assignment and adjust most future meetings depending on how much effort they put into that assignment.
The second pillar proceeds from the first. A good mentee is worth making priority over other work. Ultimately, training up the next strong developer is going to be more profitable to your employer than most of the other things you do in a day, and it's also more personally rewarding. For the mentee who is dedicated, it's worth adjusting schedules and dropping other plates.
The third area I try to focus on is asking more questions than giving answers. As a young developer, part of the struggle is knowing what to pursue, in addition to how to pursue it. I don't want to rob a mentee of developing the skills to determine a correct path, whether that's in their career or in debugging a program. If I can ask questions, I can possibly lead them to the correct "answer" while helping them flex those muscles. In many cases though, questions can help uncover that maybe the goal isn't even accurate, and we can use them to refocus on what really matters.
Pragmatics
On a more pragmatic level, as a mentor I try to go into each meeting with the mentee with a list of questions. Earlier in the relationship I try to focus more on discovering what they want out of their career and out of our sessions. Then tailor content from there. I usually ask the mentee to do a TDD kata as this helps me gauge their engagement, but also helps me get to know their tech competence and coding style.
Getting a good mentor had a huge impact on my career, and it's something I want to attempt to provide others. While I think there is a lot of impact wisdom and discernment can have on being a good mentor, I think the most important thing you can do to be a good mentor is something that I saw modeled in that first mentor of mine. If you can be unabashedly and genuinely for the good of that other person, you'll make a lasting impact.