Thursday, March 16, 2017

So you want to work for Google?

Image Credit: HBO's Silicon Valley

Two of my colleagues and I recently attended the SIGCSE 2017 Symposium. My favorite talk was given by a Google engineer and a Google recruiter, and it discussed the Google interview process. You might not necessarily want a job at Google, however I think that the advice and best practices would be helpful to anyone looking for a software engineering position. No slides were made available from this talk, so I will  summarize the key points below.
I should give credit to the two presenters, however I don't know their names, so thank you Google for this informative presentation.

1. You need a CS degree to apply at Google. 

It doesn't have to be BSCS, but it has to be 4 year BS degree.  A BS degree is not sufficient. Google also wants to see your participation in hackathons, competitions and other CS related extra curricular activities.

2. What coding skills do you need?
  • Proficiency in an OOP programming language (e.g. Python, Java, C++)
  • Ability to write tests and debug
  • CS project outside of the classroom; can be an internship or research project
  • Ability to read & understand existing code
  • Basic understanding of formal logic
  • Familiarity with GitHub

3. Sequence of programming skills acquisition for college students:
  • Introduction to Programming Concepts
  • Object-Oriented Programming (Java)
  • API Documentation (Javadocs)
  • Version Control (GitHub)
  • Understanding of Data Structures (Java)
  • Discrete Structures
  • Collaboration & Team Projects
  • Algorithms (Java)
  • Computer Organization (Assembly) - Yes, you read this correctly.  The reason Assembly makes the list is not because of an expectation for coding in assembly, but so that students are exposed to low level code that takes away the "magic" of high level language abstractions.
  • Time and Space complexity
  • Internship experience in software engineering

4. The Interview process: At Google technical interviews are by phone (two or three phone interviews), and in person, on campus. Each lasts about 45 minutes.

5. Interview topics:
  • Short Introduction
  • Technical Assessment: Working through questions on a whiteboard or Google doc.
  • Close with your questions (so have some ready).
  • No puzzles/brainteaser questions.

6. Software engineering skills assessed during the interview:
  • Language syntax, core libraries, idioms, performance
  • Algorithms & Data Structures
  • Analytical skills
  • Sound design

7. Categories of questions:
  • Coding: Java, Python, C++, Recursion
  • Math: Basic probability, Powers of 2, Div/mod
  • OS concepts: Threads and processes, Memory management, File systems and networking
  • Algorithms: Sorting, Searching, Graph Traversals, Big-O analysis
  • Data Structures: Lists, Stacks and queues, Trees and Graphs, Sets, Hashmaps, Heaps

8. Communication Skills:
  • Think out loud and show your work
  • Draw pictures to help you visualize your solution, especially for graphs
  • Ask for help if stuck
  • Listen to the interviewers. They are trying to help you. Treat the interview as a discussion. Are they giving you a hint?

9. What the interviewer is thinking?
  • How did the candidate analyze the problem?
  • Did the candidate consider edge cases? Did they miss any?
  • Was the problem approached methodically and logically?
  • Does the candidate have strong foundation skills in basic CS concepts?
  • Did the candidate produce working code? Was the code tested?
  • Is the code clean and easy to read and maintain?
  • Can the candidate explain their ideas clearly?
  • Is the candidate pleasant to work with?

10. Internship Opportunities at Google and scholarships are available. Be sure to apply as early as possible. Don't wait for the deadline. Positions are filled as candidates become available.

11. Global competition. You will be competing globally for both full time and internship positions.

12. Additional resources:

I hope that you found this post helpful.