Frequently Asked Questions About Internships

I originally wanted to have a clickbait title before, such as “10 Tips Untuk Magang di Google! Nomor 7 Akan Mencengangkan Kamu!” 😛 (jk I hate those)

Anyways – ever since I got my first internship in San Francisco Bay Area / Silicon Valley, people have been asking me how I got it. This is by no means an easy question to answer off the top of my head, especially since an internship search is a pretty long process. So, after getting the question for the hundredth (?) time and being not satisfied with my answer almost every time, I’m making this blog post to answer the questions once and for all! Just like a good software engineer would, I’m eliminating the repetitive task of answering these questions 😀

How did you get your internship?

This question has been answered here and here. Basically: I tried as a freshman on my own and failed, and in my sophomore year Indo2SV launched. I got assigned an awesome mentor (Kak Veni) and we Skyped every week to do mock interviews, evaluate my resume and learn stuff. Before this, I was a very shy person and can’t explain things (and algorithms) clearly. My resume also sucks a lot (I’ll show the changes in the resume part of this post). I was very green, I don’t really know how to code a clean and modular code (don’t even talk about good practices!). Coming from a competitive programming background, I have a bad habit of writing unintelligible code quickly (though it’s correct). Besides the weekly sessions, I also studied on my own, mainly Computer Science fundamentals such as Computer Networks and Concurrent Programming. I practiced explaining stuff in English with my friends. I also browsed /r/cscareerquestions religiously to see other people’s experiences. I think it’s both calming and nerve-wracking to do that.

After a few weeks of practice (around Dec 2014), Kak Veni decided I’m good enough to start interviewing. We made a huge list of companies to apply to, and she referred to me to her friends who are working on some of those companies. We keep track of the applications and I updated it every time there’s something new. It was a great way to keep track of my progress, so I really recommend you make one too if you’re applying to multiple places at once like me.

screenshot-2016-12-06-10-56-49

When I start interviewing, the Indo2SV mentorship weekly sessions are still occuring. We talked about how my interviews went, and she told me how I can improve. I am actually still shy but almost all of my interviewers have been really nice and laid back, so I got more comfortable as I did more interviews. I picked up some of their slangs such as responding to most things with “cool” 😛

After a month of interviews, I ended up with two offers: Mozilla and Square. Deciding was hard, but Kak Veni helped a lot and even set me up to Skype with her friend who interned at Square before. I chose Square, and to this day I’m glad I did 🙂

The following year, I started applying to places around August – September 2015. I didn’t ask for referrals this time around and it’s way easier. The full story can be found in my previous post. In short, after my first internship in the area, it is way way way easier to get my next internship. So yeah, climbing the first hill that is your first internship search will pay off in the long run.

OK, what should I do and in what order?

First, you need to find the internships that you want. Not just “ok, I want to intern at Google”, actually find the right place where you can send your resume to. After that, you need to prepare your resume and *maybe* cover letter (most people say that cover letters aren’t really important). If you can, get a referral to the company that you want, but be aware that referrals are “expensive”. Make sure that you can show the person that you want referrals from that you actually have a shot of being accepted. Kak Veni told me early on that she will only ask her friend’s referrals for me if she thinks I’m good enough, and I work extra hard after hearing that 😛

If you got contacted by a recruiter later on, congrats. Now comes the fun part: interviews! Well, maybe not yet. Some companies may send you an online coding challenge. This is different from interviews, because you’re not talking to anybody and all you need to do is just code and solve the problem given. It is pretty similar to typical competitive programming competitions, but way easier. But you need to emphasize on clean code that can be understood by people, unlike in competitive programming. I also add more comments than usual on online challenges like this. After all, you’re aiming for a job where your code needs to be read by people, not a prize or a ticket to ICPC World Finals.

If you pass them, you still need to go through “real” interviews. If you’re from overseas like me, they will be done via Skype or Google Hangouts, otherwise they might call your phone number. They’re also going to be held on working hours for the interviewers, so if you’re applying to an office in California and you live in Indonesia, be aware that you need to do them around 1AM-7AM. Interviews usually last around 45 minutes – 1 hour, are done with an engineer on a live-coding website like coderpad.io or even Google Docs. Be prepared to talk a lot even when coding, something that may feel unnatural without practice. There are usually multiple interviews, ranging from 2 interviews to 4, plus onsite interview for some companies like Dropbox.

If you passed all of your interviews, your recruiter will call you (All of my offers to this date started with the recruiter asking me for a free time to chat) and congratulate you. They’ll prepare your offer letter and send them your way soon. Congratulations! If you happen to have interviews with other companies, tell the company you are interviewing to speed up the process (Square speeds up my interview by a week after hearing about Mozilla) and maybe ask the company that gave you an offer a deadline extension if you need it. If you have multiple offers, ask around for advice from people you know or online. Make sure you make an informed decision 🙂

Please help me on the X-th step!

Sure, here are some personal tips and anecdotes for each step.

Resume

If you’re from Indonesia (or maybe most other countries too), you may think of a Resume like a CV. It includes everything about you, from elementary school to that debate competition you won once in high school. Well, that’s exactly what you should not make. Tech companies, at least in Silicon Valley, accept hundreds or thousands of applicants for a single position. Their recruiters are always busy weeding out bad candidates, they spend so little on reading your resume. For this reason, make sure that your resume only contains the important parts that are relevant to the job you are applying too.

Your resume should:

  • Have only one page.
  • Looks good even when skimmed under 30 seconds.
  • Include only your education from undergrad level upwards. No high school.
  • List your GPA if and only if it’s good. Most companies don’t care, but if you list a bad GPA it will only hurt your chances, I think.
  • Be a highlight of your best and relevant achievements. If you’re applying for a software engineering position: list your technical projects, programming competition/hackathon achievements, internships.
  • Have the more impressive stuff first/easily seen.
  • Emphasize on what you did and achieved, not what your title is. Make sure that you explain what you did in your internships or projects, preferably with some real data.
  • Explain things that might not be common knowledge to a technical recruiter. Not everybody knows that ACM ICPC competitions are quite a big deal.

Basically, sell yourself. Make yourself look impressive on paper. I know, it feels really weird and maybe a little bit too boastful. I really hated making a resume and feel bad when adding and explaining achievements, because most of the times I think I’m just too lucky and achieved those by luck. Anyways, it’s just one of those things that you need to do.

Here are some examples for you , my resume through the years:

A very ugly early try on my resume, September 2014: here. This is a pretty bad resume. I will list the bad parts:

  •  I have my address and phone number, which isn’t necessary.
  • I also listed my skills (not impressive, also with frameworks that are easily learned) at the top, and the most impressive part (achievements) at the bottom.
  • My projects and experience are not well explained and does not list things that I did/achieve very well.

A few months later, November 2014: here. After a few commentaries from Kak Veni, I revised my resume and it got better.

  • My achievements went all the way to the top (below education of course)
  • My projects and experience got a little more explanation on what I did and showed  corresponding achievements
  • I removed unnecessary skills

The following month, December 2014: here. This is the resume that I sent to companies. Kak Veni asked for a little more edits before sending referrals to her friends.

  • I added National/International tags on my achievements so it can be skimmed and understood easily
  • I added new projects and an upcoming internship. It is important to keep your resume up to date.

When I started looking for my second internship, August 2015, this is my resume.

  • I changed the template because I hate the previous CareerCup template. Every resume looks the same, so I just want to be different I guess. LOL.
  • I moved work experience to the top because it is now the most impressive.
  • I removed organizational experience because they aren’t too relevant at this point.
  • I summarized my projects into one paragraph, because they aren’t really that cool 😛
  • I still emphasize that I did some open source, because that is pretty impressive to recruiters and the engineers that I talked to like to ask about that too 🙂

And now, here is my last resume. I made it in October 2016 to find some part time job to fill my final semester. Basically the same with the last one, I just added Google and two newer achievements. I hope the example helps!

If you need some advice, I recommend you to ask a friend or go through /r/cscareerquestion‘s Resume advice thread to get some comments from strangers. I did that before I found out about Indo2SV and it actually helps 🙂

Cover Letter

Well, this isn’t really that important. Everybody that I asked about this also responds that it isn’t that important. But if you want to make one, make it short and sweet. I think the biggest reason that I got accepted at Mozilla is my cover letter. I told them a story about my view of the company and how I liked the company a lot. I guess they like having like-minded people with them!

Online Coding Challenge

As I have previously mentioned, this is pretty much straightforward. You are given one or more problem similar to a competitive programming problem, which means it is graded with test cases automatically. If you are not familiar with programming contests before, you can practice problems on leetcode or Codeforces Div 2 problems (usually the maximum difficulty is Codeforces Div 2 B or C). There may or may not be a person reading your code afterwards to see how good your code is. It is important that your code is not only correct, but readable and adhere to best practices. This is a chance to show them that you can be a good software engineer! As a competitive programmer, I had a really bad habit of coding as fast as I can. And if you are one too, you will likely have that bad habit too. Here are some tips for you:

  • Give meaningful names to everything: variables, functions, classes (yes, you might need to do some OOP)
  • Give documentation for things that might not be obvious. Over-explaining is always better than under-explaining.
  • Make your code readable to the human eye! Indent, give space, group clusters of code logically.
  • Don’t repeat yourself. Make your code as modular as possible. Even if something is only used once, if a similar functionality might be needed again in the future, make it as its own function or class.
  • Have a mindset that your code is going to maintained by another person in the future (this isn’t true because it’s an interview, but this is your chance to show it)
  • Read a copy of Clean Code. Pak On, The CTO at my first internship, lent me a copy and it changed me. LOL.

Even if you don’t pass all the test cases, you might still pass. I only got 14 out of 15 test cases correct in my Square coding challenge, but I still got to interview with them and an offer in the end.

Phone/Skype interview

Well, this is pretty much a live version of the previous part. You are having a conversation with an engineer that will give you a few questions. Most of the time it will be filled with algorithmic question, but sometimes they might ask non-algorithmic but CS-related questions. For algorithmic questions, they might be a little bit more difficult than the online challenge, but not too much. Some example of non-algorithmic questions that I have encountered are:

  • What is a friend function in C++?
  • How is Java different from C++?
  • Can you explain what a mutex is?
  • Some case questions about multithreading (might be implicit), what conflict may emerge and how should I deal with them
  • What happens in the background when you open a website in your  browser?
  • System design questions
  • Scalability questions

How do you prepare for those questions? By learning as much as you can, of course 🙂 During my Indo2SV days, I know I am confident with my algorithmic skills, but not so much with non-algorithmic stuff like the ones above. So I tried learning from any source that I can get: I read various books on C++ (my main language at the time), Design Patterns, Computer Networks, and Concurrent Programming. I spent my holidays, even New Year’s Eve, reading books on those topics and try to understand as much as I can. It proved to be useful on my interviews and everyday life. I also discussed this a lot with Kak Veni, and she taught me a new topic each week. Here are the list of topics we discussed:

  • Threading
  • Databases
    • Schema
      • primary key question_id
      • SELECT * FROM questions WHERE user_id = _ and topic_id = %s
        • INDEX(user_id, topic_id)
      • SELECT * FROM questions WHERE source = _
        • INDEX(source)
      • table: question
        • when you shard, questions_1, questions_2, …
        • table = get_table_name_for_qid(qid)
        • SELECT * from {table} …
    • Replication
      • master and slave
    • Transaction
      • set of queries that needs to happen at the same time
      • example: banks, if I send money to you, changes to the accounts should happen at the same time
    • NoSQL

It’s pretty effective and  I learned a lot 🙂

Now, for algorithmic questions: The interviewer will ask you a few questions, depending on how long you take on each question. Usually, it will be increasing in difficulty. The point of these interviews are not just to see if you’re smart enough to solve the problem. They also want to see how you think and communicate. When you are given the problem, you need to explain the solution clearly before coding. If you can’t think of a solution directly, tell them what you are thinking about the problem and your insights, until you find your solution. If you’re struggling, your interviewer might give you some hints. Remember, it is always better to over-communicate, since interviewers can’t read minds 🙂

After getting an agreement of the solution with your interviewer, you can start coding. Again, follow best practices and code cleanly. You will also need to explain what you’re doing and why you’re doing it while you’re coding, which might feel unnatural at first. If you aren’t comfortable with constantly talking while coding, you can also add comments and discuss those later after you finished.

After you finish coding, explain your code to the interviewer and start testing, even if they don’t ask you to test. It shows that you care about the correctness and want to verify it. Make sure you try a variety of test cases and explain each test case and why you’re using them.

Interviews might sound simple, especially if you’re used to doing algorithmic problems. But if you don’t practice a lot beforehand, your brain might panic. I know a few really smart people that forgot how to do Breadth First Search or failed to explain why the complexity of merge sort is O(N lg N) in interviews. I panicked a few times during my mock interviews with Kak Veni, and thankfully it never happened in real interviews.

So, practice. Do mock interviews with your friends. Find friends who also need mock interviews and take turns interviewing each other. Try leetcode and Codeforces, and questions from various online sources such as Interview Cake or read a book like Cracking the Coding Interview (a really good book about interviews). If you struggle at first, it’s completely normal. Interviewing is a skill. It’ll get better.

To fellow Indonesians, be aware that you need to speak in English the whole time, and if you’re not to used to it, it can be a little intimidating. Words won’t come out of my mouth as fast as my thoughts, so I practiced speaking english with my friends a lot and made a “cheatsheet” that I kept in Sublime Text filled with answers to common ice breaking questions like “Tell me about yourself” or “what did you do at project X”. Those questions are typicaly asked at the start of the interview to get to know about you more, and it’s going to be hard forming the right (and impressive) words if you don’t prepare for it beforehand. My cheatsheet definitely helped lowered my anxiety before interviews 🙂

At the end of an interview, if you’re doing well and there are some time left, you can ask your interviewer questions. Try to ask questions about the company that are important to you or questions about the interviewer’s day-to-day life. The former shows that you care about the company and the latter is good since people usually like talking about themselves and your interviewer might like you more 🙂

Other Tips

  • If you get rejected, no hard feelings. It happens. If you’re from overseas like me, it’s even harder to get accepted. Just keep trying and practicing!
  • I too have my fair share of rejections. During my first time (as a freshman), I got a 0% response rate. The following year, I applied to 10+ companies on my own without referrals, and only one gave me an interview. Even with referrals, only 4 companies out of 8+ gave me any interview >,<
  • Build up your resume. Join more competitions, get an internship or two in your country, do some awesome projects (independent projects or paid), gain more skills. Make yourself stand out of the crowd. Open source project is a huge plus!
  • When applying to companies, be organized! When I got mentored by Kak Veni, we keep track of everything – the application status, our mock interview topics, new topics to learn, concerns, interview evaluations. It will definitely help you and lower your stress level.
  • Practice a lot. Learn a lot. Look and sound confident! From my experience, people in the U.S. shows more confidence than others (but not bragging). Leave a good impression with your interviewer. Show them that you’re the kind of person they would love to work with 🙂
  • Apply early! I applied for my first internship in SV around December 2014, and it’s kinda late. Some small companies already finished hiring interns (such as Addepar). I applied for my second internship around August-September 2015 and had a much higher reply rate. Sorry that I published it on December >,<
  • Companies that are outside of US usually hire later than those in the US though, Google APAC offices (Tokyo, Sydney, Singapore, etc) also hires later (actually, they just opened a few weeks ago!)

Welp, I guess that’s all. Feel free to ask more questions in the comments, I’ll update the post accordingly. Also, check out Kak Veni’s answer on Quora and my article on Indonesia Mengglobal 🙂

8 thoughts on “Frequently Asked Questions About Internships

    1. gw bahkan baru sadar :)) itu karena filenya dibuka di komputer yang gak ada font itu terus disave terus lupa balikin lagi kayaknya. Bagusan yang dulu fontnya ya, baru sadar ._.

  1. I have checked your website and i’ve found some duplicate content,
    that’s why you don’t rank high in google’s
    search results, but there is a tool that can help you to create 100% unique content, search for; Boorfe’s tips
    unlimited content

  2. Hi Rakina, thank you for posting this article. Hopefully, it can motivate and inspire me to return to a career like yours, after experiencing several rejections. I can’t wait for the next post, I hope I can connect with you

What do you think?