In order to advance as a developer you need more than just online resources. The most common question that I see in programming forums from juniors is about what they should learn. This touches on one of the primary needs for mentorship. There is so much information on the internet about software development that it is overwhelming without clear direction. Knowing what languages, frameworks, tools, and best practices are worthy of investing time is paramount. Even the people that have advised me about looking into job listings in my market to see what things to group together are what I would consider mentors in my career.
Personally I have had several mentors over my five years in the industry. Unfortunately the first four years were in the same team, and that's one thing that would offer me particular insights into the needs of mentorship relationships to evolve and eventually move on. The team that I spent the majority of my software career with had been together for a number of years before I joined. They were all excellent developers working with several technologies and managing a high volume CRUD system with a solid design and a homegrown build/deploy process. One of the first things that I learned in this team was that interacting with the Linux command line on the server was the most faultless way to interact with a system. This hands on approach permeated the entire deployment process. This Java web service was being deployed entirely by the team from the Java used by the applciation to the Tomcat servlet container that served it. Everything was managed and scripted by the hands of the team. At the time I didn't know any different approach so being so hands on with the bash scripting, building, deployment, database management (we had an AMAZING DBA that worked with us and trusted us to not break things).
It wasn't until I moved into a new team that I realized that, while I remained a junior within my old team, I had grown to a point that I could stand as a more senior developer with select skills that were not universal. My next mentor taught me a LOT about working in a much more complex environment. We tackled many things. While he heard and answered all of my questioning of the entire world, he helped me to understand that sometimes you have more work than you can get done, and the massive refactoring to make life better has tremendous value WHEN YOU HAVE TIME TO DO IT. There are times when urgent business needs require your focus over the cleaning of code.
It was only after working with the new team that I came to understand that I had outgrown my previous mentors. We had become peers as our skillsets grew to be very much the same. It is also important to note that none of my mentors had been 'assigned' as there was no direct program aligning juniors with seniors, instead it was my latching onto whatever more senior developers were around me in order to get whatever information that I could from them. I was being pretty intentional about acquiring the information, but many of them weren't intentional about providing information beyond the minimum needed for me to get a task done.
One of my best mentors probably count herself as such as we would become close peers as time drew on. What really made the mentorship so beneficial to me was that we would learn from one another and many times neither of us had the answers. At some point, one of us shared the Humble Bundle sale of No Starch Press books on Python. Even though we worked in a Java shop this was a great opportunity to learn something and the inclusion of Automate the Boring Stuff with Python made the bundle a steal. We would actually start using Python for some internal scripting as it was a bit more maintainable that a list of Bash one-liners to achieve similar results. We wound up going through a period of Humble Bundle acquisitions while talking together about different things. It was this learning and discussing that helped to motivate me to learn more. Due to some specifics of our software we had both become quite stagnant and aware that our skills were becoming increasingly difficult to market while looking for more work as we had both become bored of the work we were doing.
In order for a mentorship to work out well you need both people to be working to grow their skills. The skills of the mentor will eventually become known to the mentee if they are not growing.
The other major factor that will determine how well a mentoring relationship works is typically an assumption made of senior developers that they have good communication skills. The trope of 'good communication skills' is typically misunderstood. A wonderful quote that I've heard attributed to Albert Einstein is paraphrased as "If you cannot explain something to a five year old, then you don't truly understand it." This translates in tech as "If you cannot explain it to someone with substantially less technical knowledge then you don't know it well enough." That somebody with substantially less technical knowledge can be a junior developer, a business partner, or a client. Being able to communicate technical hurdles and determining factors in a way that enables knowledgable discussion is necessary for developers to advance. This actually comes back to my motivation for writing this as I heard someone say in Slack that they were being given the opportunity to be a mentor to some interns. My response (however poorly worded) was this:
Teaching is the best way to cement your learning. Please be aware that if you haven't mentored before that you probably suck at it. That isn't a judgement or saying that you shouldn't do it, but instead that you should be aware of how what you are doing may be working well or not. Be conscious of how well your mentees are understanding things. There is a certain amount of their not knowing things, but if it seems to be taking them longer than you think it should to grasp something then try to loop back and explain it in better ways. We can ALWAYS improve our communication skills, particularly when it comes to relaying technical information to people with less technical knowledge (whether that is a junior developer or a business owner). Good luck! You will get out of it as much as you put in, and if done well then you will have the opportunity to help form the way that these mentees approach development for the entirety of their career.
After having typed and sent that realized that it was a bit blunt, and the topic required significantly more information than I had initially provided. I hope that this elaboration has been helpful to you as you move forward in your career, hopefully carrying on relationships as both mentor and mentee.