How do you intern in Silicon Valley companies if you’re a Computer Science student in Indonesia?
Recently, I had the chance to mentor a Computer Science sophomore from Universitas Indonesia as part of Indo2SV mentorship program, in collaboration with Indonesia Mengglobal. In this post, I’ll go through some of the advice and learnings I imparted to my mentee. I hope this will be helpful to more of you!
This advice is originally written on Quora.
1. Getting an interview
Plenty of resources on this on the internet, but some pitfalls I see often in Indonesian resumes:
- resume should only be one page — the exception is if you’re a PhD student with a long list of papers. Even then, it’s a good idea to weed out the more minor accomplishments to make your resume more succinct.
- if you have many accomplishments (most competitive programming people have been in multiple competitions), choose 3-4 of the most prominent (e.g. only the regional / international level). Do not have a laundry list of > 5 competitions.
- no need to put gender, date of birth, address.
- the list of activities should be result-oriented. If you’re coaching a training camp, put in what’s the result, for example.
- your list of projects should give a rough sense of what the technical challenge is. The reader should be able to understand what you’re writing about.
- put the impressive part of your resume first. If you’re a successful competitive programmer, put the ‘Honors / Achievements’ near the top. Same thing if you win hackathons / have impressive projects.
- your resume needs to stand out – in 30 seconds – 2 minutes that a recruiter looks at your resume, there needs to be something that makes him/her think that you have potential. Work towards having that stand-out factor: compete in programming competitions, do hackathons, do interesting projects (open-source stuff maybe), intern at good companies at home.
- Apply early. Internship recruiting here starts and ends pretty early – it can start September the previous year, and by the time it’s January, most of the spots will already be filled out. If you’re applying in February, or later than that, it’ll be tougher.
- Get a referral if you can – ask people you know whether they can put in a good word for you.
- Do HackerRank competitions – if you do well, good chance you’ll get called for an interview.
- Cover letter can help a little but can also hurt a lot – if you want to send one, be sure to have someone with good English to proofread them.
- If the company you’re applying for has programming challenges like http://quora.com/challenges, if you do well on those, your resume will get more visibility.
Very important: apply to many companies. Many Indonesian students I know just apply to the obvious ones like Facebook and Google, but that’s really trying your luck. There’s a lot of luck that goes into an internship recruiting (especially if it’s your first one, and if you’re international, or you’re a non-senior). I interviewed with eight-ish companies my freshman year, and similarly advised my mentee to apply to ~10 companies herself. It’s better to have too many interviews than too few. Don’t limit yourself — your first internship recruiting is not the time to be too picky or too proud.
If you’re freshman or sophomore, there are companies that have freshman / sophomore program that’s probably easier to get to. On top of my head: Facebook University, Google Engineering Practicum, Explore Microsoft Internship.
Some companies that accept international interns:
Generally, bigger companies are more likely to accept international interns, just because they have more room for interns.
2. Interviewing Materials
Algorithmic things to know (non-exhaustive):
- time and space complexity
- data structures: stack, queue, priority queue, heap, arrays, linked list
- trees <- singling this out since it’s very commonly asked.
- simple graph algorithms: BFS, DFS, Dijkstra
- sorting: at least the n^2 algorithms and merge sort
- dynamic programming basics
- the idea of hashing
- binary search
Non-algorithmic technical things to know (also non-exhaustive):
- What happens when you put a URL into a browser?
- The idea of pushing / pulling
- Disk I/O – Understanding Disk I/O – when should you be worried?
- I/O bound / CPU bound I/O bound / CPU-bound
- Caching – LRU cache, cache locality, eviction strategy
- basic UNIX commands
- Threading: Producer–consumer problem, How to solve the producer consumer problem using thread?
- Databases: primary key, index, making basic schema, replication, transaction
- Be prepared to answer about things you like and things you don’t like about the company’s product.
Other non-technical questions:
- tell me about your background and what you’re interested in.
- the projects on your resume
- why you want to work there?
- what’s exciting about their work?
- what would you ask their engineers?
- what would you improve about their product?
3. Interviewing Preparation
- Find problems related to the algorithmic questions on HackerRank and solve some / lots of them. Coding on paper / whiteboard / online pad is slightly different from coding on the IDE – I think it’s good to get used to not having your trusty compiler / interpreted around, and rely solely on yourself. Also get used to explaining your solution in concise words. This is the checklist I gave my mentee this checklist:
- For non-algo things, most companies have pretty low bar for system design for interns – as long as you know the basic concept, enough to surface the idea / concept when you see a problem, you’re probably OK. Just read wiki pages for them and be able to answer “What is _?”
- For product, it’s good to be able to walk through a specific product and be able to say why this part of the product is working and why some other part don’t, and what can be improved.
- Always be prepared to answer those non-technical questions above to the companies you’re interviewing. Have canned responses for them if you don’t think well on your feet in English. Be excited, be specific, be concise.
- When explaining your resume, it’s important to be concise and pick out the details that are understandable, but interesting. Don’t ramble.
- I heard good things about Gayle Laakmann McDowell‘s Cracking the Coding Interview (5th Edition), pick it up if possible.
Other interviewing skills
- try to get someone with good English and interviewing experience to mock interview you, multiple times.
- err on the side of over-communicating than under-communicating, explain your thought process before, during, and after implementing
- don’t be over-confident – don’t start the implementation before discussing the solution with your interviewer, don’t be sure that your solution is right before you actually check them.
- write good code, not algorithmic-competition-quality code. Comment well, and name your variables right.
- have long conversations with other people in English — speaking with a foreign person for 45 minutes can be overwhelming / nerve-wracking.
- be confident and enunciate what you’re saying.
Don’t take it personally if companies don’t respond to your resumes, or you got rejected. There’s a lot of luck involved with first-time recruiting, and sometimes companies look for different things in a candidate.
Interview process for getting an internship can be an overwhelming process, but with tenacity and positive mindset, it can be an enjoyable process. You’ll get to talk with really smart people and learn about exciting companies along the way. To read more about how to enjoy your internship search better, you can read this.
Have fun, and good luck!
Photo credit: http://www.panoramio.com/