Late autumn I was asked by Kristina Makarova, a wonderful coach, why don’t I upgrade my skills by doing internships? I understood clearly what stopped me from applying all these years and apparently it was a limiting belief. It sounds like: “If I get that internship at this company, I will lose the opportunity to … “. E.g. an opportunity to catch up with your publications, to miss the whole summer, to be misunderstood by the professor, to lose lots of energy in vain since getting there is hard, everyone has its own answer. As soon as you question those limiting beliefs asking: “Am I 100% sure it works like that, why getting an internship can limit me?”, you are on the way to making yourself free and ready for a new challenge. Probably, for most of the people the limiting belief sounds like: “You? Applying? No way! There are a bunch of people, more skillful than you, be realistic!”.
“People think that computer science is the art of geniuses but the actual reality is the opposite, just many people doing things that build on each other, like a wall of mini stones.”Donald Knuth
Next step is about networking and finding the way to contact Google recruiter directly without going through a website application, that can be left without any attention. In Machine Learning or generally in research communities places to meet a recruiter or seniour researchers are well-respected conferences, like NIPS, ICML, etc. and summer schools like Machine Learning Summer or Deep Learning school in Montreal. I met a recruiter at NIPS Women in Machine Learning workshop. Believe me or not, but this WiML workshop was the best place to meet plenty of industry stars during NIPS conference… Still happy about the opportunity of talking to Christopher Bishop, who wrote Machine Learning “Bible” Machine Learning for Pattern Recognition. Believe me, he is one of the kindest and attentive people, I have ever seen. Well, this is a different story…

NIPS 2016 BARCELONA
So I sent CV and within the week of applying I had a phone call with a recruiter. She asked general non-technical questions and mostly spoke herself, explaining the process of the interview. The recruiter gave me materials to prepare for the coding interview, scheduled in one month period. Google recruiters are extremely flexible with respect to coding interview scheduling and let you choose the data and time yourself within some limits!
“Talk is cheap. Show me the code”Linux Torvalds
Let us switch to the most interesting part: coding interview preparation! A candidate is supposed to code interactively with the recruiter in a google document. By interactive coding I mean coding on the spot, where you can build up your function iteratively while getting useful hints from the interviewer. The whole point of it is to check your coding fluency, the knowledge of basic data structures, like stacks, lists, queues, dictionaries and how they are implemented in your favourite language <3. For Google, opmitization and nicely written code is out of the question. One surprizing fact about the position you apply is that there is only one type of internship position called SOFTWARE ENGINEER. This role in practice can be anything, from pure research to heavy coding, but while being interviewed you are expected to have excellent coding skills combined with algorithm design skills. Up to my knowledge there are two types of problems: to create a class implementing some functionality or to implement a set of functions. Hashs, sets and binary search trees will be one of the mostly used structures.
One of the most helpful advices I got before preparation – do not spend your time trying to solve difficult coding tasks, meant to be for olympiad programming. In practice, a candidate needs to be fluent in solving the tasks similar to those given in Cracking the Coding Interview book (considered to be the classics for preparation) Better to solve the tasks from: https://careercup.com/, as they are the real ones at least! On the other side, if you have plenty of time ahead, you can practice using the following sites:
- www.topcoder.com,
- http://code.google.com/codejam/contests.html,
- http://projecteuler.net/
- https://oj.leetcode.com/
In addition to algorithmic questions, I went through python related questions, checked this handy complexity cheat sheet: http://bigocheatsheet.com/ and read about the complexity of the most commonly used operations for python specifically! One month is a relatively good amount of part-time preparation, but be better generous to yourself by asking more time to prepare from Google recruiter 😉 Those who speak russian or use actively google translator, should definitely check this website: http://larrr.com/, most of my gratitude goes to a woman-googler who shared a lot useful tips about Google interview process, that made me feel more confident.
Believe me or not, but preparing can be hard even to a researcher! Solving algorithmic tasks requires fresh practice and don’t be sad if the first problem takes you several hours … If you can choose between Python and C, I recommend the first one, since Python is a Google language and your life becomes easier when it comes to a bunch of algorithm implementations. I was pleasantly surprized to see very concise pythonic tree implementations with print, delete and insert being short and not scary 😀
While preparing get some help from the peer’s who already went through the interview and organize mock interviews Your friend will act as an interviewer giving your hints on the way and getting some useful feedback to you. Quite important to find a person familiar with the process, being able to help if you are stuck and to assess critically your performance. Mock-interview is a vital step in your preparation, by having those, you significantly increase your chances !!!
Personally, I was given relatively easy problems related to implementing a class with a certain functionality, sorting and probability distribution related tasks. The challenging part was to take into account corner cases, optimize my code, reason about the requirements, etc. Interviewers prefer assessing your skills using simpler tasks. They see how you reason, go deeper, take into account resources and see more than one solution on the toy problem. It is not something a personc can output on the spot, it is purely the result of good preparation or strong background
Overall, I had 3 coding interviews, 45 minutes each (usually there are only two!). Interviewers were extremely helpful. I am telling you, everyone has a chance to apply to Google, given enough dedication and willingness to study. Although I did not get there this time, my first two interviews went well in my opinion. In the end I got an enormous practice, refreshed in my memory some vital topics and let the fear of applying to any big company go away. Of course, there were a moment of frustration, since my preparation has started before the new year and even on the 31st I spend a bit of time to study I needed to make lots of compromises choosing between seing people, doing sports, etc and this preparation. In such periods of time, I try to keep the balance, allowing pleasant moments to happen in my life as well.
So dare to apply and if you want the continuation of this post, please write your question in the comment below!
Luiza <3
To summarize, here is your action plan:
- Step 1: Rethink your limiting beliefs that govern your decision about the internship. The decision should depend on your values, priorities but not on your fears of being not good enough, etc.
- Step 2: Find the way to apply to Google through a recruiter or through googlers that you can meet at respected conferences or summer schools. Meanwhile start searching for a person to give you a reference, Google asks that after the first talk to a recruiter. You can mention in the form the team and location preferences.
- Step 3: Send carefully prepared CV to a recruiter and have a scheduled call withing 1-2 weeks. Agree on the date of the next coding interview, please take enough time for preparation.
- Step 4: Find a mock-interview assistant who acts as an interviewer. It is vital to find a person familiar with the process, being able to help if you are stuck.
- Step 5: Go through “Cracking the code interview book” and other mentioned materials and arrange several mock-interviews, the more the better for you!
- Step 6: Make the best during the interview and wait patiently for a couple of weeks until you get a verdict