What’s the one thing you should care about when looking for an internship? Is it the tech stack? The salary? The free snacks?
In my opinion it’s technical mentorship. Unless there’s a person at the company who can be your technical mentor, don’t work there.
I’ve had the same conversation with some friends where I ask them about their job. It goes something like this:
Me: Oh hey where are you working?
Them: This startup/company that does xyz. I’m building them a web app in React1 and TypeScript.
Me: Huh, okay. Is there someone who you could learn from there?
Them: Not really…the company mostly uses contracted developers.
Me: That’s not good. Is there a CTO or lead developer.
Them: Nope. I’m in charge of the project.
That’s not a good sign. Usually this friend is getting underpaid as well. Before I’d try to convince them on the merits of the idea being bad and the pay being bad. But that never worked that well. Startup ideas are hard to judge and making a little less money isn’t a huge deal—25 bucks an hour is a pittance by developer standards but a solid wage for a student. The real problem is that my friend isn’t getting mentorship.
Somewhere along the line, internships have gone from a technical mentorship to what’s basically a temporary junior junior developer position. Of course this change is partially due to interns getting paid—companies don’t want to pay interns only to teach them. But it’s made it harder and harder to find the most important experience a young developer can have: working with and learning from a proper technical mentor.
I was lucky enough to find a proper mentor. My first internship was way back in the summer after high school. I had graduated and was lucky enough to find an internship via family contacts2. This internship was at a hedge fund doing Ruby and C++.
What I loved about this internship was how emphatic they were that they were teaching me. This was especially nice of them since I was a relatively unexperienced high school student. I had spent the last summer doing some basic research writing MATLAB and Java but other than that I didn’t have any work experience.
One important note, this internship was unpaid. Well they started paying me towards the end because I was producing useful work. I’m not sure I’d recommend doing unpaid internships in general. This was a very rare situation where the unpaid internship obeyed the legal requirements of being solely educational. The moment it became beneficial for the company, they paid me. I also recognize that I was in a fortunate enough situation to take an unpaid internship. Not everybody is.
The internship started with lead developer and CTO walking me through a project. They took time out of their day to teach me about various technologies like SQL, Ruby, etc. They would devote time to code reviewing and explain to me how my code could be improved. There was no pressure to push features out the door or finish the project ASAP. The lessons they taught me there were absolutely valuable and have served me well in every future job, more than any amount of money or prestige.
Before that internship, I had some technical skills, but I didn’t know the craft of programming. I didn’t know how to think about error handling (propagate vs panic vs handle). I didn’t know how to pick the right tool for the job—or debate it with my team. I didn’t know how to defend my code in code review—or write code that was defensible in the first place. But that’s par for the course for many college students, let alone high schoolers.
Why is that? Because it’s hard to learn these skills. Colleges don’t teach it; most professors don’t have experience programming professionally. There’s certainly books and blogs and talks that you could watch which explain some of these ideas. However that’s tricky because media about the craft of programming is fundamentally someone else telling you that this technique or this idea works. You have to take someone at their word that this methodology is actually effective.
Working with a mentor, while certainly subjective in many ways, lets you see first hand whether or not something works. Your mentor can talk your ear off about agile, but it’s up to you whether you find agile useful or not.
Don’t get me wrong—consuming media on the craft of programming is one of the best ways to improve your skills. But you need to balance it out with actual experience.
A good mentor is like a power-up. You’re getting an instant 5x boost in terms of knowledge, feedback, and advice.
What Should I Do?
Okay but how does that translate to you, a student who just wants a job? In a gist, seek out technical mentorship. Don’t just take a job because it pays. Whenever you look at a company, ask yourself what you can learn from them. Or don’t ask yourself—ask them. Ask them about their mentorship programs. Any company running a halfway decent internship program should pair interns up with mentors or offer some sort of training program.
Make sure the company has good enough technical standards that you can learn from them and not vice versa. Ask them questions from the Joel Test. Ask them about their code review process. Get insight into how they think about software.
If you get to meet your team before accepting an offer, evaluate them technically. Stalk them on LinkedIn, poke around their GitHub accounts if they have one. You can’t always figure out if someone is a good mentor from what they have online, but it’s still worth a shot.
Avoid at all costs jobs where you don’t have a boss who is technical. Don’t kid yourself into thinking that you’re talented enough to not need the supervision. Especially avoid places that rely on contracted programmers. Even if one of the contracted programmers is a good mentor, they’ll be on to the next job before you know it. Besides those places tend to have less than stellar tech.
Also avoid places that just put interns on bug duty, i.e. have them tackle the endless JIRA backlog without any training or overarching goal. It’s demoralizing and not educational.
Constantly seek out technical mentorship. For my most recent internship at Microsoft, I actively emailed a bunch of developers working in my field of interest, programming languages and compilers. Even though I was getting legitimately wonderful technical mentorship from my manager and mentor, I still wanted to maximize the amount of knowledge I could get from Microsoft.
If you find a mentor who you like, keep in touch with them. Maybe buy them a gift. A good technical mentor is worth a lot.