This anonymized email correspondence is part of my series on “Making the World Smaller”. See the introductory post for context.
First of all, congratulations for what you have accomplished so far! I have red a couple of posts as well as your CV on your blog. The internships and jobs that you have gotten are something that I think many dream about and so do I. I am currently 19 years old and will start studying computer science in the coming winter term. Since I will have to (and want to) do internships in tech-firms later I thought that you could definitely give my some helpful advice on how to set myself up to get internships. For instance, what do you consider most important about internet appearance? Having a LinkedIn profile, having your own blog … ? And since you work in machine learning as well, did you do Kaggle competitions?
A response would be highly appreciated!
Thanks and best regards
Thanks for your email. Nice to meet you.
I think the three things that made a difference early on in my career were my internet presence, the many personal projects I did, and the fact that I engaged in research projects from an early age. The two main factors that recruiters look at in intern candidates are: job experience and extraordinary coding experience. Once you have those, you just need to get noticed.
Extraordinary coding experience can manifest itself in one of two ways: competitive coding accomplishments, or personal projects. I was never interested in the former, and always very excited about the latter. I loved building things and expanding my skills by working on small and contained libraries, GUI projects and hardware stuff (electronics). As a consequence, I also became very good at programming, especially when working on real world projects. Competitive coding is useful to learn about algorithms and pass interviews, but useless for everything else in software engineering. So this part of my activities a couple years ago ticked the “extraordinary coding experience” box. You mentioned Kaggle: I never did it myself, though I imagine that would look good to. However, in my opinion, it’d be cooler to solve real world problems with machine learning. Like, build an app that you can point at a tree and it tells you what kind of tree that is. This will be 100x harder than an equivalent Kaggle challenge, since you not only have to solve the machine learning bits, but also all the infrastructural challenges around how to develop and distribute the application. It’s kinda like solving a competitive coding problem on HackerRank will teach you about a particular algorithm, but using that algorithm in a real world application or even packaging it in a distributable library that you dump on GitHub for others to use will teach you so many more valuable skills.
Getting job experience is very hard early on, and as I’m sure you know it’s a bit of a chicken and egg problem (you need experience to get experience). Once you’ve done a single internship with a big company like Facebook, Google, Uber, Microsoft, Palantir or a few others, all your problems kind of go away, as other companies will flock to hire you, given you’ve proven yourself in one of these internships already. So how do you break into this loop? The way I did it was by working on research projects at my local university. The thing is that academics (professors, PhD students, even masters students) always have a ton of work, and are happy to get any kind of help from students. For them, it’s just free labor, and for the student, it’s fantastic experience and can even lead to a publication. Either way, if you have no other or only limited job experience, research is a great way to prove that you can work on big projects. Another easy way to get job experience is startups or small companies, at least from what I’ve heard. Either way, it’s important to be pro-active in this regard. Just spam people (nicely) and say that you’re interested in working for them. Don’t care about money for now, only care about experience (but also don’t work for free!).
So, say you have sufficient job experience and a way of proving extraordinary coding experience. Now you only need to get noticed. For this, yes, LinkedIn is important. LinkedIn is less interesting to me know because I have the job I’ve been working towards getting for many years, but a year or two ago it was very important for getting contacts. Whenever you meet someone, at a conference, or through friends, or any other way, remember their name and when you get home, add them on LinkedIn. Maybe they work at a company you’re interested in, then you can always message them on LinkedIn to ask for a referral. Then, blogging. I’ve had a blog since I was 16, and it’s always been a very crucial weapon in building my career. People notice it, read it, share it, and not just people like you, but also software engineers looking for interns, and recruiters will usually also take a look. So definitely get one and start blogging. Technical writing is also a very important skill that few people actually master, so it will help you with that. Finally, go to lots of conferences. Go to local meetups for programming languages in your town, travel to conferences, and don’t ever be shy to talk to people. This is so important. Develop the ability to walk up to a random stranger and start a conversation. Also get business cards. I’ve met thousands of useful contacts at conferences over the years, and they’ve opened up so many doors. Once you have the skills, people are the number one way of getting an internship. After actually being good at coding, it’s all about the people you meet and stay in touch with. It makes all the difference, I assure you.
Let me know if you have more questions!