Most upvoted comment
Most popular programming book on Reddit. rank no. 27
Interested in interview questions? Here are 80+ I was asked last month during 10+ onsite interviews. Also AMAA.(r/programming)
I go to Tech and interned at Google last year, so I believe I can answer this one.
Let me start by saying that GPA and the courses that you take do not matter at all (as long as you’re not failing)! Unfortunately, academia does not prepare you very well for working as a software engineer in Silicon Valley (there are rare exceptions; courses like CS 6300 SDP). You will have to work very hard outside of the classroom to turn your dream of working at Google into a reality. There are two major hurdles to be passed:
Step 1: Getting called for an interview. There are tons of students who also want to work at Google, so how do you get noticed? Things that really help are:
Past internship at another tech company in Silicon Valley (SV). If you can’t get into Google the first time around, you work your way up. Start at Yelp, DropBox, Zynga, eBay; anywhere! It is important to be in SV because once you’re there, it is ridiculously easy to network with and interview with other companies. Want to attend Google I/O? No problem, that’s a 5 minute drive away. Got in touch with a recruiter at Facebook who wants to interview you? No problem, you can take an afternoon off and ride Caltrain to get there. It is very common for people to move up the industry ladder once you’re in the area already. Also, seeing 1000 other people walking around with Google, Apple, Facebook, etc T-shirts all day tends to keep you focused and motivated. I want to be one of them too.
Programming projects that you worked on outside of the classroom. Who would you rather hire: someone that hangs around Stack Overflow everyday and has 10 decent projects on GitHub, or someone with a 4.0 GPA that worked on the same projects as everyone else that took the same classes? You have to like writing code and challenging yourself, and not want to work at Google just because of the brand. Working on projects during your free time and then putting that on your resume will get you noticed. More on this in the next point.
Georgia Tech hosts an incredible career fair (the College of Computing one) with companies like Google, Apple, Facebook, Microsoft, etc. attending. You need to prepare your resume (see previous point), an amazing elevator pitch, and walk up to a recruiter and just talk to them. We are incredibly lucky to be given such an opportunity; these companies take recruiting through top universities very seriously, and you often get streamlined. It is much easier to get called for an interview by talking to a recruiter face-to-face at a career fair than it is by blindly applying online. When you apply online, your resume might get filtered by keyword, and you’ll be a needle in a haystack of applicants from around the world. Take advantage of the career fair! Talk about why you’re unique, the projects you worked on during your free time, why you want to work for that company specifically (do your research), and try and show (hopefully genuine) passion for software development. If they like you, you’ll get your first interview call: a telephone screen.
Step 2: Doing well on the interviews. Great, they invited you for an interview call! Now starts the second big phase of getting in: technical problem-solving and algorithmic questions. There are three distinct worlds out there, and unforunately they are all far removed from each other:
The type of problems you solve in academia and research.
The type of problems you solve for technical job interviews at Silicon Valley.
The type of problems you actually work on when you start working in Silicon Valley.
There is a plethora of information online on passing these technical interviews, but the main take-away is this: practice makes perfect. You need to get on a whiteboard (because that’s the medium you’ll be coding on during on-site interviews) and solve problems everyday. Your mission in life is to get into Google, and you can do just that through practice and perseverance. You should be able to write tree-traversal algorithms like DFS and BFS from scratch in your sleep, and should be able to look at an algorithm and tell its runtime complexity within seconds. Instead of going on about how to beat these interviews, I will leave these excellent resources that you should definitely take advantage of:
Cracking the Coding Interview: Solve every question in this if you have the time.
Programming Interviews Exposed: Second optional book if you want more questions.
Steve Yegg’s rant on getting into Google: An insightful and funny rant.
9001 other sources online. Just search. Cormen is a good resource for fundamentally understanding algorithms.
Remember to practice! The interview questions test your thinking and problem-solving skills! If you know a question or have seen it before: tell the interviewer and move on. The point is to get to a question you do not know how to solve, and then demonstrate how you arrive at the solution. Think out aloud and keep talking. Start with a basic solution, and then try to improve on it. Don’t spend ages thinking for an O(n) solution. If you are stuck, it is okay to ask for hints – you don’t have to know the answer straight away; remember, they want to see you arrive at the solution. Be humble and honest, not disingenuous. Once you solve enough questions, you’ll begin to recognize patterns in every new question you solve. Try and identify which data structure fits well with the given problem (example: Would hashmaps work here? Why: which property of a hashmap makes it good here?), and with enough practice – those nebulous questions will begin to excite you.
That’s all I have for now. Feel free to reply if you have any other questions. Good luck, you can do it!