Mentorship is as important as formal education and it is the most efficient way to advance your career. Mentors can help address your weaknesses and steer you clear of pitfalls by leveraging their experience. There are numerous ways to find mentors and it ranges from reaching out within your circle to complete strangers across the internet.
Mentorship is an extremely efficient way to grow; it is as important as formal education and self-learning. By no means am I going to try to convince you that the points and arguments you’re about to read are from years of experience. I’ve only just started scratching the surface and already feel like I should’ve been doing this for a lot longer. So, what I will try to convince you of are the following:
- There’s always room for improvement, but perfectionism cripples you.
- Mentorship is a vehicle for progress.
“Why are you focused on this now, all of a sudden?” you wonder.
Great question, reader, and thanks for asking! I’d consider myself very much an observer and more importantly a novice in the world of software development. I’m an observer because I’ve been trying to absorb everything I can possibly get my hands on, to be better ready for anything I’ll encounter in the career that I’ve just started. Therefore to answer your question, this was a result of feeling like I was being thrown in the deep end with very little practice. So in reflection, I think I understand where this obsessive behavior of wanting to absorb everything stems from:
- Insecurity that I don’t know enough because I was mostly self-taught.
- A lack of direction and drive to do actual things because the learning loop is far more rewarding than building something and failing.
I don’t for a second believe that I’m alone in this.
- Perfectionism cripples
- The learning trap
- Why you need a mentor
- Where do they spawn?
The primary way my insecurities manifested in me was through the imposter syndrome. I don’t believe the imposter syndrome is unique to people in my position where you’ve started on a Mechanical Engineering Integrated Masters, completed a year long internship and then deciding that software development (the thing you’ve been doing on the side) is actually what you want to do, so you undertake another masters in something fairly related to projects done during the mechanical engineering degree — computer and machine vision — and then finally trying to get a job in web development. Well, you get the idea.
I think you experience imposter syndrome because you actually care about what you’re doing and you don’t want anything — including yourself — to sabotage it. It stems from a lack of confidence in yourself and your ability, and if not addressed it can lead you down an unhealthy path. For me, this was perfectionism.
“What a cliché!” you sneer.
Sure. Perhaps it is, but like a lot of things we experience in life, it’s not always a unique problem. When getting coached for job interviews, my career counselors advised that I not use this as a response to “What is a weakness of yours?”. I was told that this alone can make the interviewers’ eyes roll back into their heads mainly because people commonly regarded this as a pseudo-weakness.
“OMG! I need every part of this to go right because I’m such a perfectionist, urgh!” bleated a perfectionist.
It makes me sick too.
When I call myself a perfectionist, I mean in it in the sense that it cripples me to the point where I keep digging down and never move forward. For example, one summer I decided to teach myself functional programming to understand key concepts like purity and immutability. I initially started with pure functions and what side effects were using Java. Then I got a brainwave to learn a programming language where the idiomatic constructs were functional so I don’t default back into the imperative paradigm (I say this because this was the reason I ruled out Scala, which would have been a natural transition for a Java developer).
Picking up Clojure and Elixir was thrilling and I learnt quite a bit about the importance of immutability, but by this point my perfectionism has made me google “Best functional programming language” and I knew Haskell was the one. I had to learn Haskell. I had to know what this mysterious “monad” word meant. You, the astute reader, might have picked up on the trend here. I could’ve learnt the basics I was after with Java and made far more progress with other functional programming concepts if I hadn’t tried to learn three new languages in the process.
Encountering monads, pure functional programming, lisps and the actor model have taught me that the scope of computer science is far bigger than I was aware of with knowing just Java. It gave me an appreciation for different technologies, software ecosystems and programming paradigms, but it massively skewed my initial goals of wanting to learn the basics. It didn’t steer me astray, but it didn’t help me develop the depth I wanted either. I really didn’t need to know those things then; I just needed to know that the broader scope existed, so I could revisit it later when it was more relevant to me. My lack of confidence in my abilities partnered with unlimited learning resources to expand my abilities, led me to what I call the learning trap.
For other examples of perfectionism leading to self-destruction, I refer you to Community S03E08 Documentary Filmmaking: Redux.
The learning trap
Learning is a powerful skill, and if you have the discipline to self-direct then that is astounding. It is a skill that, at least in my experience, is quite difficult to keep honing, but like all things it is a balancing act. In my second year of university, I got a little bored of my degree and started learning programming using the internet and the reward mechanism in my brain was flooded. So much so in fact that it became an obsession where I would work on online courses and exercises when I should have been working on coursework. This is not the learning trap. The trap is, I’d spend time doing these courses one after another without a clear direction because there is so much information readily available to consume, and I’d consume just about anything. Just like I jumped from Elixir to Clojure to Haskell in an attempt to understand simple functional programming constructs, I’d keep consuming every free or paid course out there. My feedback loop was:
- Complete a course
- Start another one immediately after
- Not thinking about wanting to build something with the information I have just amassed
Perfectionist tendencies can cripple you to a point of stagnation, but this can also be caused by the lack of direction. Building things can better enforce what you’ve learnt and can also provide richer insights into the topic. In a university or work setting, it is common to have projects where you have to do something to add value instead of just consuming information and expanding the number of things you’re aware of, and this enables you to break out of the learning trap. Your project supervisor, lecturer or manager can provide direction or at least their insight into how you should prioritize information and progress. This enables you to build momentum in your learning and ultimately build the confidence to overcome insecurities and the imposter syndrome.
One of the tips I use everyday to ensure that I’m not hampered by the constant itch to explore every detail to the fullest extent recursively, is adopt a framework of capture-clarify-organize . This has removed the friction of wanting to explore something and not getting sidetracked in the process. Most of the time, I encounter things that I want to explore eventually and rarely is it the case that I need to do it immediately. This system has helped me from falling back into the learning trap. I can still capture ideas and in the clarify step I can decide — or have my mentor help me decide — on its priority.
Why you need a mentor
Mentors can be a crucial vehicle in your progress. They can help you make meaningful progress in your field by removing some of the noise that you would otherwise encounter on your own. Their unique selling point is their experience, and with that they can quite quickly highlight what is useful, relevant and of growing importance. It would be possible to do this on your own, but it would require you to do the necessary research. Mentors can help avoid known pitfalls, guide with battle-tested strategies and hold you accountable to your commitments. It still requires passion and drive from your end, but with the guidance a mentor can offer, it can be invested more strategically and more consistently. In 2014, when I started learning programming, I began to get overwhelmed with the mountain load of information; especially since this was close to the release of Java 8 which changed the landscape quite drastically. I reached out to my dad, who was a seasoned Java developer, and he helped me prioritize my learning and also held me accountable. His experience gave me an insight on fundamental concepts and what things were built on top of that.
This feedback cycle of adapting my learning, based on what I read, with my dad’s experience, slowly started to build my confidence in my identity as a developer . The more good votes I cast into who I wanted to be, the better I started to feel about my abilities in the field; it gave me the confidence to undertake a programming heavy masters and I finally felt like I wasn’t an imposter. This was possible because my mentor used his experience to cherry-pick relevant topics that I should prioritize to ensure optimal progress, while holding me accountable at all points on the learning path. External accountability does wonders to your commitment and productivity, especially when you’re still developing the self-discipline to do that new thing .
Where do they spawn?
“Okay, all this talk of mentors, but where do these magical creatures spawn?” you ask.
There are many different ways to go about getting a mentor and they range from having a family member guiding you to a complete stranger you find on the internet. Thus far, I had taken the have-a-programmer-parent approach, but with him gone I’ve been on the hunt for new ones to ensure forward momentum in my career. These are some of the ways I’ve explored:
- Find a colleague or professor who is willing to have conversations with you about the things that interest you professionally. This will help you build the confidence in talking to people about technical topics. If it’s someone who you think might have insight you could utilize, ask them if they’d be willing to mentor you once a month. This doesn’t have to be someone you’re already close to. It can be someone who’s working in a different department, or a lecturer who isn’t a part of your course.
- GitHub issues can be a good place to scour for mentorship and a productive way to get into open source development. Find a project that interests you and sort by labels like “help wanted”, “good first issue” or “mentorship”. Larger projects like Rust, Servo or Vue have these because the community contributing to the project is huge, but this kind of search for mentors is still applicable to smaller projects by interacting with the repository. Comment on issues you find interesting and see whether you’d be able to get guidance in solving that problem.
- Follow and participate in programming communities on Slack, Discord and IRCs. For example, the Discord server “The Programmer’s Hangout” has a channel called “teaching-and-tutoring” where you can find people offering tutoring services. Being active in these communities enables the community spirit to grow and help organically match mentors with mentees.
- Search forums, like Reddit communities for mentorship. People on the subreddit r/ProgrammingBuddies are offering to be a part of your journey, so reach out and see if it bears fruit.
- Follow professionals on the internet whose opinions you value. This one bends the definition of mentorship by a large margin because this is not the same as one-to-one mentorship. However, it can be used to inform some opinions on the priorities you have for the topic. I’ve been following Venkat Subramaniam since 2014, and over the course of my learning, it has helped shape my understanding of the software development landscape.
There is always room for improvement in whatever field you’re in, but the way you address that can have a profound impact on you. Naively, I took the “I can figure anything out by myself” approach for too long and because I didn’t address my underlying insecurities first, perfectionism crippled me. The change I made to combat that and am pushing for is reaching out for help and to look for mentorship. Mentors have faced a lot of the problems that you’re facing when they went through it themselves, and that experience is the key to your progress. They can help you overcome stagnation, organize your progress plan and filter out a lot of the noisy details that might not add too much value right now.
This is not a thorough framework by any means, but this is the starting point I’ve been using to develop myself professionally. There are many elements of this post that don’t apply solely to software development and can be directly applied or adapted to your domain of interest. For example, finding a mentor on GitHub by using the issues is a very software specific suggestion and does not seem to apply to something like Mechanical Engineering. However, there are places like Hackaday and GrabCAD which offer a community surrounding the projects similar to GitHub. The internet is a beautiful place!