This is arguably one of the most important pieces of advice I can give out, if not the most important. Looking years back, I now realize that mentors have been a more important part of my technological education than I would have given credit to in the past. They include one of my best friends who first demoed his Liberty BASIC duck shooting game to me in elementary (first exposure to code, honestly thought programming was a bit gimmicky), a classmate in grade 6 who extorted money from me by fooling me into believing he hacked and stole my RAM and processor speed via the Internet (started my interest in malware removal), a father’s friend’s son who would try to sell me computers and to whom I’d ask about general computer stuff (taught me how to discuss technology articulately), a diabetic math professor who I got to look at my torrented PHP game site code (taught me I had to learn how to code for real, tweaking variables and being a script kiddie wasn’t going to get me anywhere. Also my first exposure to Linux) and a physics professor for whom I coded for in the summer (became a fan of vim and the unix shell, also learned the importance of programming in other disciplines).
The primary benefits of mentors are obvious; they show you how to do stuff. Books also do that, but they fail in certain ways (which I’ll describe shortly). The slightly less acknowledged benefit of mentors is that you can go to a mentor for pretty much anything. It’s typical to ask them about programming and computer stuff, but mentors have a lot more goodies in store than that. Being somehow affiliated with the field of technology, they are bound to be connected to other people like themselves, often much more talented than they are. They have trotted the same path you have and will help you avoid all the mistakes they made initially (heh.. just ask me what NOT to do). Mentors are often also the best types of friends you can have. Your mom and your boyfriend might not relate to why you’re frustrated about trying to run a loop invoking callbacks, inside a callback that returns to your node.js/express router, only to receive an nondescript 503 error on the console, but mentors certainly do, probably more than you. Some mentors will even give you cash and food, if they like you enough (think Y Combinator).
Mentors themselves seek ambitious amateurs, because 1. ambitious people get around and will one day be in a position to return the favor 2. teaching is the most efficient way to retain and perfect your knowledge 3. mentors are nice people and were once in your position. How can you pretend to be experienced in your field when you can’t help people with more basic stuff?
It might be tempting to think that the internet and books have all the knowledge you need to guide you forward. The truth of the matter however, is that written and recorded knowledge represents a mere fraction of all human knowledge, past and present. Oral tradition (and physical?) still dominates as our primary method of disseminating knowledge, largely due to the lower barrier of entry (e.g. many people don’t have good writing skills, initially time consuming, lack of interest, etc.) This is less evident at first, but becomes particularly important as you progress in your education. As you inch towards the pinnacle of your field, you’ll realize that less and less of your answers are online (not to mention that live acquaintances are inherently more trustworthy than arbitrary answers on SO). Things you might be working on may have only been discussed sparingly by a few select people in the world. Bugs you will encounter have only been dealt with by some random soul in Colorado.
Years later (ok im not that old), I have now surpassed all of these mentors and many more in programming capacity, to the point that many of them come to me seeking programming expertise. I know that makes me sound a bit prodigious, but really, it’s only natural for any aspiring programmer. Chances are, your first mentor wasn’t/won’t be a programmer by profession. One of Albert Einstein’s preeminent mentors, Max Talmey, was an ophthalmologist, of all things. Despite Talmey’s physics knowledge probably being limited to optics and elementary mechanics, he shared his passion for sciences with Einstein nearly every week for 5 years. The teenage Einstein’s mastery of math and physics soon surpassed Talmey’s. There’s evidently a limit to how much you can be taught by your coach, else your coach would be the best programmer already and that’s that. Just like Eugenie Bouchard parted ways with her childhood coach when she reached no. 5 in the WTA rankings, you too will need to drop your mentors when you reach a certain standing. The day you’re no longer able to surpass your mentors, you’re no longer an aspiring programmer, but just another career programmer (not to say you’re not ambitious in other areas).
Finding mentors is not difficult. The worst case scenario is that you find someone on the internet because you live in an isolated area. If that’s the case, look at the forums or discussions for sites like Codeacademy or Scratch. You can also try contacting the evangelism teams for companies like Microsoft or Google. Joining Facebook groups is also an extremely effective way of finding mentors. Even if you’re not isolated, do pursue this! To find them, just use regular search terms in Facebook’s search box. If you’re under 15, the best way to find people is probably by asking your parents, siblings and the school librarian. Stay weary of strangers! If you’re older (or perhaps more mature), you should try to meet as many career programmers as possible. Don’t just find one or two, some of them will have bad programming habits or may be misinformed and the best way to hedge against that is to see who’s different from the others (she’s either really weak or really talented). The reason I mention age is because the younger you are, the more people will be afraid to work with you. It’s understandable, they typically have more to lose than do to gain with younger mentees. As you’re older, you’ll fit in more at a university setting, where you’ll be able to meet with older students who have similar ambition. A great place to meet competent mentors are hackathons and workshops. You’ll get immediate experience points just for working with them. Don’t be afraid to join them just because you’re not as good. If you don’t want to dragging down a pro team, ask if they mind taking a newbie along. You don’t have to be on the BEST team, just one that is better than what you are now.
Having written all this, it begets the questions of how I’m currently managing my mentors and whether I’m currently mentoring anyone. I couldn’t begin discussing this without first mentioning Rudi Chen. Rudi’s the reason I’m here today talking about code, instead of talking about something like 7 Habits of Highly Effective Aspiring Med. Students. Rudi first found me on Facebook after hearing about me trying to compete in the Imagine Cup. He in turn recruited me as a mentor for Microsoft at my school and the rest is history. Whenever I have a career question I turn to him. He’s also very talented in other areas, so I ask him for help on things like Image Processing/Computer Vision. Rudi’s actions further introduced me to other talented individuals, such as Steve Woz reincarnate Louis St-Amour and evangelist extraordinare Sage Franch. Just in the last couple of weeks, Louis saved my ass at a hackathon via Skype and Sage helped me present a case to Microsoft for the need of two Kinect hackathons in Montreal. There’s also the professors I work with at the Montreal Neurological institute, Dr. Villiers-Sidani and Dr. Voss. Although I am more proficient than them in programming, they’re more experienced than me in regards to hardware and now our project is getting me up to par on circuits and electronics.
In terms of my mentoring, there is this blog where I write sometimes… 😉 A few students I recruited while I was in CEGEP (Pre-university schooling in Quebec) for the school technology club I started, work with me actively to advance their programming skills. They themselves are starting to become mentors. I also tutor a lot. I guess it’s not as benevolent as just straight up helping people, but teaching semi-professionally allows you to practice your craft while being held to a higher standard. In addition to all this, there’s the CS homework I help people with for the heck of it. There’s a lot of this, but I don’t mind at all. In fact, I encourage people to let me help them. They’re really helping me. I never had a formal education in programming so it’s nice to see how I would fare academically. Sometimes there are people who try to take advantage of this however, so it’s important to be weary.
If you need a mentor (which you do), why not start by asking here? Every great programmer made some friends.
The next article in this series: Put Your Money Where Your Mouth Is and the prior: The Seven Habits of Highly Effective Aspiring Programmers