top | item 7693954

Ask HN: How Can I Find a Mentor?

104 points| kremlin | 12 years ago | reply

There was an HN thread a few months back about autodidactic programmers, and many people said that one of the most important things for a developing programmer is to have a good mentor.

I think I'd really like a mentor.

Some things about me: I've been coding for maybe a year, but I have a full time job so progress is not going as fast as maybe I'd like it to.

I've been doing Python (a very small amount of C# as well). I've read an intro book, and now I'm reading a book that goes into more depth with OO. I've solved the first 51 Project Euler problems, many of them with relatively elegant algorithms. I have a love for elegant algorithms.

I'm not sure what to do next. Build a Django app? Learn Java and build an Android app? Learn Haskell? Learn C? Something else entirely?

I'm not locked into any particular field of programming yet - it all interests me.

If anyone feels like they would get any benefit out of mentoring someone like me, looking at my code and giving me pointers, giving me advice about what's wise to learn, I'd really appreciate it.

49 comments

order
[+] kaptain|12 years ago|reply
I saw your post and it made me think of my own experience in desiring to grow spiritually. I come from an evangelical Christian background and for those unfamiliar with this sub-culture there's a saying that "everyone should have a Paul, a Barnabas, and a Timothy."

What this means is that, if you're serious about your personal spiritual development, you need three things:

* a mentor (Paul): someone that is more experienced than you and can help you grow in ways that you were unaware of and who can help you develop your personal gifting.

* a comrade (Barnabas): someone that is at your level whom you can mutually encourage and grow with.

* a person to mentor (Timothy): someone whom you are a Paul to.

I think this has applications beyond spiritual development; it can be applied to any field/dimension that you want to grow in. Part of my problem in college that I was always fixated on having a mentor but never asked myself who my Barnabases and Timothys were.

As the years passed, I put aside this unhealthy fixation on having this spiritual mentor and I found myself begin to grow as I embraced the people around me as Barnabases and Timothys. I don't want to discourage you from looking for a mentor; it's awesome to find one. But don't feel like you can't grow as a programmer/developer without one. Growth takes lots of different forms and it would be a shame, in my opinion, if instead of growing, you spent your time waiting for Godot.

[+] kenferry|12 years ago|reply
That structure is more or less what we're doing with our iPad app, Understudy, for SICP. If someone signs up for SICP, we pair them with another user a bit ahead, to talk to once a week. Once they're a ways in, they start leading another user just starting out.

http://blog.understudyapp.com/learn-sicp-make-friends/

[Obvious disclaimer - I work on this. It was posted to HN a few weeks ago.]

[+] dzink|12 years ago|reply
In medicine/surgery they call this "see one, do one, teach one". We are applying this principle on http://doerhub.com where everyone who joins shares what disciplines they are learning in, mentoring in, or doing/leading something in so you can pair with someone who is complementary or similar to you in one or more levels and work on projects or just learn from each-other. Here is how the search works: http://peoplesearch-doerhub.herokuapp.com/viz/
[+] zhte415|12 years ago|reply
The best mentors I've had have been people I didn't know were my mentors until I thought about it.

A perhaps my experience would be 'People I met outside a casual social circle (though I see no reason they can't exist within) with a high level of experience and insight into a field of expertise (technical or non-technical) that also enjoyed my company and my giving / reflecting something back to them.'

Seek people out in environments you're comfortable, and don't discount the value-add face-to-face contact can make. A small word of warning also - mentors can be great inspirers, but that doesn't mean they would make a good fit as a boss or employee later (just as working _for_ a friend can break relationships).

[+] lgas|12 years ago|reply
If I were in your shoes I would build a list of potential mentors as I read blogs, books, articles etc about the topics I am interested in. Then I would rank them roughly in order of preference and then contact them one at a time and explain that I am looking for a mentor and give a brief summary of why I chose them and a brief background on myself.

I suspect you wouldn't have to go very far down the list before someone agrees to be your mentor.

If after a while, I wasn't getting what I wanted out of the mentor that agreed, I would explain this to them, thank them for their time and continue down the list.

[+] kremlin|12 years ago|reply
that's a really interesting idea. It didn't occur to me that that was even a possibility. cool.
[+] mark_l_watson|12 years ago|reply
I offer free mentoring: http://markwatson.com/mentoring/ but I limit this to about one hour. An hour may not seem like much time, but usually I just talk about technology options, refer people to open source projects.
[+] robdoherty2|12 years ago|reply
A mentor can be helpful to give you direction on where to focus your auto-didactic abilities.

I switched careers into software development several years ago thanks to the mentoring of several individuals.

Going to meetups in your area is one of the first places to look, and taking online or in-person courses are also helpful to find other like-minded people.

One thing to consider is that there need not be a formal "mentor-protege" relationship; you can get a lot of great one-off type advice from all kinds of people you come across.

[+] Madsn|12 years ago|reply
I'm not disagreeing with you, but the downside of one-off type advice from varying people is that you are limited to only discussing topics which can be covered within a limited time frame. Surely a lot of good can come from that, but having a more long-term mentor lets you get quick feedback on things with little overhead, since the mentor will already be familiar with your current skill level, the project you are working on etc.
[+] canttestthis|12 years ago|reply
This is only somewhat related to becoming a better programmer but I'd rather post here than create my own thread for this.

I just graduated from college and I start work in 4 months as a software dev at a company that you've probably heard of and use on a regular basis. What can I do in these 4 months to maximize my chance of success at this company?

I thought I might go through SICP but I'm not sure if this is more of a theoretical exercise or if it will directly improve my work. I can't work on any open source projects because of the learning curve required to get familiar with the codebase, + I won't be able to work on it once I start my regular work.

Does anyone have any other ideas?

[+] zellyn|12 years ago|reply
Assuming it's not a Windows shop, if you've never learned much about unix, work your way through this: http://www.compsci.hunter.cuny.edu/~sweiss/course_materials/.... Or study xv6 for four months. Or work through the coursera compilers class. Basically, picking a foundational area of CS and spending four months on it will pay off for the rest of your career.

My career has been a constant process of letting go of being afraid of how the "low-level" and "wizardly" stuff works, and finding out it's not as scary as I feared.

[+] nicolethenerd|12 years ago|reply
Do you know what you'll be working on, or what tech stack you'll be using? I would probably try to get familiar w/ the specific languages, libraries, and tools you'll be using on the job - maybe build a small project in them and/or go through some tutorials. Also, when I say tools, I don't just mean libraries - but also things like version control (git), and continuous integration (jenkins), if your company uses those - in my undergraduate program, we never did much with those, and it's good to be aware of them.

It can't hurt to reach out to the company/team and ask what tech stack they use and what you can do to get prepared - being on the other side of this, I was thrilled when someone I hired recently asked this very question.

[+] yid|12 years ago|reply
The biggest challenges you're going to have aren't going to come out of CLRS. Pick a large open-source project and practice getting up to speed with the architecture and organization, because that's what you'll be doing at your job (sans the open-source probably).
[+] kooshball|12 years ago|reply
> I can't work on any open source projects because of the learning curve required to get familiar with the codebase

That's totally not true. You'll definitely be expected to contribute with in the first 4 month of starting at work, why are open source projects different?

The processes are probably similar as well. You need someone to help you on board, explain the big pictures, guide you through how thing are connected. Then you take bug, dig into the code and figure out a solution. This is probably what you'll do at a real job, so might as well get used to it. The hardest part is finding someone who is patient enough to guide you along and answer your questions.

[+] Mahh|12 years ago|reply
I would recommend trying to learn whatever tools they use, so that when you start you can focus your mind on the projects and less so on the environment. Once you start, you will be less overwhelmed, and you'll consciously feel good about how much pain you saved yourself. Just ship your future team an email and ask them what they think would be useful to know.
[+] sillysaurus3|12 years ago|reply
What can I do in these 4 months to maximize my chance of success at this company?

This presupposes that it's worthwhile to be successful at that company. Most companies aren't worth it. In fact, there's a correlation between a company being well-known and a company having horrible code.

It depends what you mean by "successful" though. I'm defining success as "increasing one's skill." But that's completely orthogonal to most people's definition of success, which is "climbing the corporate ladder."

If you just want a secure job, focusing on your software skills isn't the way to go. Focus on your connections at the company and how you present yourself. Your connections will mostly determine whether you'll continue very long at the company. (This assumes your skill is above a certain minimum standard of quality.) Companies aren't meritocracies.

[+] jseliger|12 years ago|reply
Ah! I finally have a useful answer, because wrote about this here: http://jseliger.wordpress.com/2010/10/02/how-to-get-your-pro... .

More nuts-and-bolts answers are much harder: look for programming or similar groups around you. If you find people you admire online, ask if you can buy them coffee when they're in town. There is no easy answer because possible mentors and mentees are subject to adverse signaling problems.

It's still much harder to find a mentor online than off.

[+] mariogintili|12 years ago|reply
I have the same problem here! I'm looking for a mentor as well. I think getting a mentor in the context of software development is n times harder than in others sector's I'm afraid. Best thing I can recommend you is to pair with people who are more experienced, and maybe in other projects. Maybe give http://agileventures.org/ | http://www.airpair.com/ | http://www.pairprogramwith.me/ a chance? hope it helps.
[+] hardikj|12 years ago|reply
Attend Meetups and Conferences, meet people and share your thoughts with them. You can also join local groups. That's how you can pair up with people who are more experienced. You can even contribute to any open source project, learn from other collaborators and you will end up learning a lot.
[+] kremlin|12 years ago|reply
Thank you for these. I will definitely check them out.
[+] dserban|12 years ago|reply
I enjoy mentoring people who want to learn Haskell. In fact, I'm already mentoring a fellow HNer who expressed interest in Haskell a while ago. It helps me tremendously with my personal development too, being able to verbalize concepts that I understand at a deep analytical level.

My e-mail is in my profile if you're interested.

[+] meric|12 years ago|reply
Before I got good at programming I wanted a mentor too. At various points in my career, at times I've had a person in my life who acted as the role of "mentor" for short periods of time (one to two weeks). IMO a mentor isn't really necessary. If you're motivated to learn enough and to always keep your mind open you'll become good. Keep doing what you're doing. A mentor isn't going to be able to automagically transfer the knowledge and experience in his mind to yours via USB; Looking back in hindsight I wanted a mentor at the time because that was what I mistakenly believed in (that I'll be able to learn faster/better with a mentor). I admit it does feel good when someone with more experience compliments my programs. Did that contribute to how good a programmer I've become today? Not really...

"Build a Django app? Learn Java and build an Android app? Learn Haskell? Learn C?"

I've done all of them, each in my own time, except Android; I created some (toy) iOS apps instead.

Just keep going to where your mind takes you.

I would like to add that I did study software engineering at university several years after I started learning to code, and that it did help me figure out what I wanted to learn. I would not disagree with you too much if you suggested university took the place of a mentor for me.

[+] jacquesm|12 years ago|reply
Instead of finding a mentor, maybe find a buddy? I recall from my own days of early learning that doing things with another person made them much more fun and made the time go by very fast compared to learning alone. It also led to much more interesting avenues of research and the sum was much greater than the parts.

A mentor-student situation is typically mostly a one-way street.

[+] jwheeler79|12 years ago|reply
i would love to give working with you a shot. i am a python guy, strong with .net and java who loves writing code and bulding apps with others. please contact me at jwheeler1 at googles email service.
[+] hendi_|12 years ago|reply
If you're looking for a mentor and C, SQL, fullstack webdev, Python, and/or Django interest you, drop me an email (see profile) :)
[+] Theodores|12 years ago|reply
The best mentors do not set out to be mentors or see themselves as (primarily) mentors. Yet they push you, mentor you and won't let you go. Because of this it is not so easy to get someone to 'be your mentor' in a formal sense, or, if that situation arises, where someone has agreed to be your mentor, then it is not necessarily the real deal.

As others have said the mentorship arrangement only transpires over time, and on reflection. However it is something that you can find within days of working with someone, possibly even within minutes.

I believe some people are more prone to finding mentors than others. Think of school and the vast overwhelming majority of pupils that the teachers really could not care a great deal about. Then there are the chosen few, singled out for special treatment. A 'C' might be good enough for the normal demands of the course, however, for those 'mentor worthy few' it is not quite like that. Even if they do not care whether they pass of fail, for whatever special reason it is, teachers will not let them be like that. Consequently they get mentored whether they like it or not.

It is the same in the workplace, there are a lot of also-ran's. Someone who has to just pick up the phone and be in on time is not likely to be pushed to excel or develop. Others don't get to be left alone like that. This is a different pressure to 'must work harder and be more productive', more care is involved, whether desired or not. I don't think even intellect has much bearing on the deal, you don't have to be gifted for someone to pick you out for mentoring and there are plenty of very smart, intelligent people that just do not pick up mentors.

Outside of academia and learning for the sake of learning, one great pressure for 'successful mentoring situations' is where time is money and the job just has to be done for a paying customer. If you can help with that you can find yourself a most useful mentor along the way. Also, if there is a strategic need for some knowledge to be shared then that can help. If you are the only one willing to learn all the systems and do weekend call outs when things go wrong, there is a lot of incentive for others to get you fully up to speed.

I should also say that in mentoring situations, cock-ups are allowed. You can ask for help on a particular thing or break a particular thing three times and three times only. A fourth time and you are renegading on the deal.

[+] markab21|12 years ago|reply
This is a part of a software career where social skills and ability to make new friends help. Be nice, be curious.. be humble and honest with your skill level.

In an open source project that you want to gain some experience with, or someone in your company that will help you with upward movement... the same skills will apply.

[+] greenwalls|12 years ago|reply
Check out local incubators in your city. The websites usually have a mentor list. If one of these people interests you then try reaching out to them via Twitter, Linkedin, etc... but if you don't yet have a business they may not have the time to help.
[+] dustingetz|12 years ago|reply
Your boss is your de-facto mentor, choose your boss wisely. It would be very difficult to grow quickly in software if you aren't already doing it full time.
[+] pfalke|12 years ago|reply
Hey Kremlin, I can't offer any mentoring, but your post reads like your in the exact same situation as I am. I have been programming on and off for about two years, mostly Python and Javascript. I have three months off this summer that I want to spend getting my skills to a professional level.

I'd like to get in touch and hear what you plan to do next. If interested, email me: philipp@[my HN username].com