I interned at Google’s San Francisco Office during Summer 2015. Working for Google was like a dream come true for me. I worked with the cloud datastore team to create a sample application that demonstrates the best practices to use datastore. Here’s how I got to where I am:
1. Good Grades – Yes, I was able to get attention because of good grades. It made my resume worth looking at.
2. Awareness – Many good programmers that I know, don’t even know about the career opportunities available. They take whatever they get. They do not try to get better offers. So being aware helped me a lot. I interviewed with multiple organisations which prepared me for more important interviews.
3. Contact with Seniors – Having a good relationship with all the great programmers in my senior batch helped me a lot. They constantly guided me to improve my skills. Some people also get employee referrals due to their connection with alumni working at Google. Mock interviews with seniors [came in handy]. Also, after listening to their story, I made sure I don’t repeat the mistakes they made. [Afterall], there is something to learn from those who fail too.
For example, While preparing for my interviews, I got in touch with some people who had previously interviewed with Google before. They told me what went wrong and what went right with their interviews. The general list of dos and don’ts.
One particular senior of mine asked me a question during a mock interview (He repeated the same question which he had encountered during his interview). I was shocked when he asked me to implement such an easy question, as I found it very easy to come up with the most optimal solution, but then he pointed out how my implementation had aliasing issues,which was a mistake he has made as well. This particular instance, made me realize that the pointer handling was not as simple as I thought.
Later in my interviews, I was asked to complete a function that accepted multiple pointers as arguments. I promptly remembered what my senior had taught me and took care of it. My interviewer asked me the reason for such a round about approach and I was able to explain the aliasing issue, to him. He probably didn’t think of it himself and was pretty impressed with the way I took care of the corner cases and the side effects of the function. So yes, learning from other’s experience helps a lot.
4. Constant Hard Work – Hard work and quick learning attitude along with positivity and confidence helped me during interviews. Confidence during interviews can create a good vibe between you and the interviewer. It creates that necessary first impression. After all it’s all about those 45 to 60 mins. I prepared hard for my interviews. Read up a lot of sample questions.
5. Competitive Programming – I think my experience with competitive programming helped me in understanding data structures and algorithms. I am not a very good at competitive programming. I only did it for few months, but during those months there was a steep learning curve. I really gained confidence in my own coding abilities. After competitive programming I could easily reduce problems into simpler ones and implement it.
However, it is important to understand that competitive programming is the not the only criteria that is required to get an internship at Google. Rather most companies won’t even bother if you are good at competitive programming.
I am not ranked higher on Codechef or Codeforces, I was once ranked 10th in a Codechef Long. My peak codechef rank is ~200, I think. That’s all.
Competitive programming improves your basics – Data structures and Algorithms – which indeed is useful in solving a lot of real life problems. Then again, to be good at Data structures and algorithm you need not be good at competitive programming. I think I am decent enough at Algorithms. I know most of the basic algorithms. I can implement some basic to medium-hard data structures – and I can adapt them to solve a given problem.
6. Open Source Contributions – Working with large code bases and working in collaboration with other programmers will improve your software engineering skills. Most of the time, you won’t be building things from scratch and therefore, you must know how to understand a piece of code written by other programmers and edit it. That being said, you should also know how to re use codes as much as possible.
And open source contributions really improved my coding style overall. I learnt to write readable codes with no memory leaks or missing corner case.
All in all, Google interviews focussed on the basics. My questions were related to Binary Search Trees, Linked List and Arrays. One of the design question required the use of Tries.
I knew all of those things in and out. I wrote good codes. My little experience with competitive programming helped a lot. My grades were high because of which I got interview calls. I practiced a lot of questions for interviews.