What I learned after landing my first internship in the US
This following story is not about how to format your resume or what algorithms and data structures to memorize. I am going to share you the mistakes I made and what worked well in my first internship application process. So, who am I? My name is Minh. Recently got an open offer from Google for the Summer Intern 2017. And, I have a wonderful experience to share.
What makes a good resume
When I was updating my own resume, I researched through a lot of successful resumes. Let’s take a look at some:
- Moshin Ali. Offers from Facebook, Microsoft, Amazon, VMware, and Cisco
- Sample resume from Gayle L. McDowell. Author of the popular Cracking the Coding Interview book and founder of CareerCup
- Many resumes I found online
Here are what I found in common:
- Huge company names
- Prestigious universities
- Passion for programming
- Good grade
And, here is my resume by the end of August.
If you even bother to check it out, I had only a high grade, which did not really matter. So, how can I improve? Can I do anything?
Not much, really. I came here to study finance, not programming. Hence, the school I picked did not have the best computer science program. Also, my college allowed only 1 internship in the US for each international student in our department. Without prior experience in the US, my resume did not seem too impressive. These two problems were obvious, and I could not do much to fix them.
What about my passion then? Duh! I loved programming. In fact, I worked on my side projects everyday. All of my friends knew that. So, I thought that my recruiter would know that too!
How can somebody tell that you are passionate with programming?
For me, one year ago, the answer was obvious. All I needed to do was to work as hard as I could and list my projects down. Then, my resume would be perfect. Besides, I was passionate, and according to various guides online, being passionate was all it took.
Hence, I made my first mistake: I thought that I was good.
So, what makes a good resume depends solely on you. If you are happy with what you have, your resume is perfect. But, your recruiter may see differently! The first step to write a good resume is to realize that you are not perfect.
Last year, I spent all of my weekends on a side project. Basically, I was doing what I was comfortable doing, coding stuff in Java. I loved every bit of it, and I thought I was passionate because nobody else in school was doing it. But, how is doing the same thing over and over again makes you passionate? Would you ever call a factory worker passionate if he folds a box thousands of times a day? Coding this way becomes a responsibility. You are barely learning any new technology. I see so many people making this same mistake: everyone is focusing on a nice formatted resume and dumping their mass produced projects into it. You need to always challenge yourself, going out of your comfort zone. Don’t use Node.JS for all of your projects, learn to build a scalable and powerful C++ server for once. Make a pull request to an open source project. Write a technical publication. Understand that you are not perfect and there is much to learn.
How to get an interview
Getting an interview through reference is going to be your best bet. Please take a look at my list of the number of applications that went through the next stage:
- Online application with my “perfect” resume: 1/42
- Online application with a revised resume: 6/35
- Career fair: 1/1 (only 1 tech company came)
- Hackathon: 5/9
- Reference: 0/3
Wait… what? If the reference rate is 0/3, how can I say that getting an interview through reference is the best way?
Initially it was 0/3. Then, it became 2/3. Here is what happened:
After receiving a reference, recruiters often reach out within 2 or 3 weeks. However, one rejected me right away and the other two did not even send out an email for over 1 month. Then, one of my friend reached out to the recruiter directly and got me into the interview stage on that same day. That got me from 0/3 to 1/3.
Finding no success in North America, my second friend submitted my resume for an office in Europe. They looked through, considered my profile for 3 weeks, and sent it back to the North America office. The following morning came with another great news. My reference’s rate concluded with 2/3.
How to prepare for an interview
I do not want to have a long detailed list, so, here is what I did, briefly:
- Read Algorithms, 4th Edition when I was taking my data structure class.
- Read Cracking the Coding Interview.
- Solve problems on LeetCode (solved 112 problems before my interviews).
- Got free mock interviews on Pramp (got 54 sessions with 2 accounts).
I am also reading Elements of Programming Interview to prepare for my full-time interviews, so if you want more exercises, add this book into your reading list.
Anyway, here are some tips!
If I can go back in time, I would tell myself to stop stressing out about this preparation step. In my case, getting an interview was far harder. The problems they gave during the interviews are quite simple, you do not have to remember complicated algorithms, data structures, or compete regularly on CodeForces or TopCoder. If you are comfortable in solving the easy problems on LeetCode in under 20 minutes, focus on your communication skill, dig deep into your interviewing language, and stay healthy.
Talk loudly and clearly. But, never talk too much! Think before you talk and organize your ideas.
My Facebook interview started out with an introduction and some general questions about my work and interests. I answered each of them in the STAR format (Situation Task Action Result.) Turned out, I spent almost 20 minutes for this introduction part alone, allowing me the last 25 minutes to code and ask questions. If you can, keep your answer short and to the point. You are talking to a fellow engineer, and nobody expects a fancy 90-second-answer.
Always work through an example before and after you are done coding. Your interviewers are really nice and will point out the flaws in your logic when you work through the example as well as head you into a more optimal solution. Changing your approach while coding is the last problem you want to face. Just get 30+ hours on Pramp, you will be able to see why communication is so important.
Deep understanding in your language of choice
Although the questions are simple, what make the interview difficult are the follow up questions. In my experience, the interviewers are super knowledgeable and love to challenge candidates. I once got a question on how to make a certain algorithm work on a distributed system. In another time, I had to refine my approach to the finest details. Let’s say that the most optimal solution is O(n), but having an O(n) implementation does not guarantee that it is the most optimal. The number of data accesses and movements vary for each algorithm. Similarly, an O(logn) algorithm does not always run faster than the O(n) in real life. You do not have to code every approach out, but being able to discuss these shortcomings is vital!
Interviewers often give 1 long and difficult question or 2 mediocre ones. And, being able to solve only 1 mediocre problem often results in a fail interview. So, for 2 weeks before my Facebook interview, I practiced continuously and told myself again and again to nail both questions. As mentioned earlier, my 20 minutes introduction demolished my morale instead of warming me up. How could the last 20 minutes be enough to solve both problems? Strangely, the first one took me only 7 minutes. I was happy because that allowed me 13 minutes for the second question. However, my algorithm failed on one of the corner cases and as soon as I fixed it, two more incorrect cases appeared. I panicked and then froze for the remaining time. My interviewer even pointed out the incorrect line, but my mind was too numb to pay attention. The clock on the top right of my screen seemed to be far more interesting than the code. Not until the following morning that I became normal. The question was easy, maybe easier than those on LeetCode. My solving skill was not to blame. What went wrong was that I stressed myself and thought too negatively for the last couple of weeks. So, if you are going to have your interview soon, please take a lot of time to relax. You came this far already! Watch a cat video or two before your interview. They help!
Your interviewers are your friends. They went through the same interview process and wish nothing but to have a nice conversation and solve challenges with a fellow engineer. Having a positive attitude always helps. Spend a few hours on Pramp, you will experience other people’s attitudes and how they affect you.
In one of my interview, the engineer called me 3 minutes late as he was rushing to his office. The traffic was horrible, he said. I told him to relax and grab a cup of coffee instead. And, to my surprise, he did. We spent the next 10 minutes having a great time. During my interview, he even made a come back for one of the jokes I made earlier. He said that most candidates were too serious and negative. Being positive can really make a difference in an interview.
Hard work pays off. Getting your first internship is difficult. You are going to fail a lot before finding your success. I spent almost 3 months failing from the end of August to the end of December. Small sized companies did not even consider my resume. The middle ones focused too much on their behavior interviews. At the beginning, I thought that a reference guaranteed an interview for all big companies and that was the costliest assumption I ever made. But, don’t worry. If you are really good, you will go to places.
Other Guides to read
- Quora read this everyday!
- Getting a gig
- END TO END GUIDE ON LANDING A JOB IN TECH INDUSTRY highly recommended
- Summer Internships: The Ultimate Guide To Get One
- A Comprehensive How-To on Internships
Special thanks to Hieu Pham for proof reading and editing.