The reason why I wanted to talk about this is mainly because
when I started telling my friends that I passed the Google
Software Engineer interview they were all mainly interested
in how I did that and how the interview looked like.
So.. here we are! I won't be able to tell you the secret
recipe for an easy and quick win, but I'll share my
experience and I hope it will be helpful to you.
There are different opinions when it's about facing software
engineer interviews, mine is the following: you need to
prepare and study in order to be ready and successful. It's
not only that: believe it or not, you need to be in your
lucky day which means that you are in a positive mood, you
meet good interviewers and the questions you are asked
matches your background. Easy! 😊 The simple reason behind
that is because my daily routine as a software engineer has
always been completely different from what I was asked
during interviews and also from what I studied during my
university: I don't think there is anything wrong, I just
believe that in some moments of your life you have to
demonstrate someone else that you would be ready to do
challenging things that sooner or later they will happen in
your work like. Interviews should be one of them. During
interviews you have to demonstrate the company can invest on
you not only for the daily routine that directly depends on
where you work (in-house tools, e-mails, meetings,
maintenance/operations) but also on those engineering and
programming skills that are (or should be) the real core of
our job.
There are many types of software engineering interviews and
they really depends on what company you are applying for. On
this story I will focus on two of the most important tech
companies for which I did the interview and for both of them
the outcome has been successful: Amazon and Google.
Note: What I'll report here will not reveal any
particular secret in order to cheat during the interview.
This is about my personal experience and knowledge. It is
also important to clarify that I am not writing this article
on behalf of these companies and because what I am saying is
built upon my personal experience, it may not be totally
true for yours, given that these companies are really big
and different teams can have slightly different processes.
Amazon
Amazon means a lot for me. I worked in this company (in AWS
CloudWatch specifically) as a software development engineer
in Dublin for 3 years. Here I learned a lot, I improved my
skills, I understood what it means build software on a large
scale but of course I don't want to say is the perfect place
to work in, because there is no perfect place in this world!
😊
Amazon is a company focused on soft-skills. When living in
the company, you can hear about soft skills everywhere and
everytime. You may have heard about the
Amazon leadership principles, which undoubtly led the company where it is now. Because
of their importance, leadership principles are scrutinously
checked during the interview. Your interview will most
likely be made of three main steps:
1. The first step is a coding test where Amazon wants to
check your coding skills. Usually this test is not
particularly difficult and depending on the team that is
hiring, you may not need to get 100% of overall score as
long as you've demonstrated that you did not cheat and your
proposed coding solution makes sense (even if it does not
work in all cases).
2. If you succeed the first step, a phone screen will
follow. During the phone screen, the goal is usually to
check if basic software engineering skills are met (data
structures, basic design scaling systems questions,
programming principles) but it is imporant to mention that
already in this phase the interviewer would probably ask you
questions to check your soft-skills. Usually he will try to
analyse 1-2 of the leadership principles I mentioned above.
3. The third and last step consist of an on-site interview
which lasts 5 hours. During this time you will meet 5
different interviewers for one hour each. Usually a lunch
break will be offered together with a meal (Amazon does not
usually have canteen in the offce - it depends on where you
apply - so likely you would go outside the office with an
Amazonian that will be there for a chat with you). It can
also happen that during the same hours, 2 interviewers may
appear: no worries, that means that one of them is shadowing
the interview in order to become an interviewer (that should
be mentioned by the interviewer).
This is definitly the toughest step of the interview, but I
would not be too much worried becuase it's not a full 5-hour
technical session where you will be asked extremely weird
complicated questions: usually every interviewer is in
charge to cover a leadership principle in addition to its
responsibility of covering some technical aspect. Most
likely you will meet two managers and three engineers: the
two managers will be in charge of anayling your soft skills
(and maybe also your problem solving skill), while the three
engineers will focus not only on leadership principles but
also on data structures, coding and system design.
As you can see, leadership principles are extermely
important in Amazon and I want to spend some words on that:
it is easy to come prepared to those questions and invent
something, but please don't do that! Just be yourself, tell
about your real work experience, your real life and your
real knowledge. Amazon is a challenging environmen and no
one in this company is free to do less than what other
people are doing. Assuming you will be able to cheat and
demonstrate your soft-skills are valid to be hired, you
won't last long in the company because your team and manager
would be different from you and they would soon realise you
don't work well for them. Really, don't cheat! 😊 As a final
recommendation, here's what you should do:
- Read more about the leadership principles, it's always
good to know what the company bevieves before to join
- Practice some coding questions (LeetCode
and
HackerRank
should be okay)
- Practice about system design interviews (these interviews
should be "easy"
if you have experience, but if you want to have an idea on
how this interview should be structured, just go on YouTube
and search for some dry-run interviews for system design -
in my mind it's the fastest way to learn)
- ...and of course good luck with that! 😊
If you are a software engineer, you may know that Google is
the #1 place where all engineers would like to be at least
once (yes, even the ones they say they hate it.. 😜).
I am one of those guys that always wanted to work for
Google. The idea of being part of such an amazing company
that owns high-scalable, customer-friendly, wide-impact
suite of services used all over the world can be really
challenging. People can argue that it is also exciting
working in start-ups, creating your own and I honestly 100%
agree with that. I just believe this is all personal. The
interview in google is known as to be one of the most
difficult software engineer interviews. It was also known to
be one of those interviews where you were asked weird
questions to check your reasoning skills. I think that this
is not happening anymore and at least no such questions were
asked to me 😃
The process is highly focused on checking your engineering
skills but it also focuses on your soft skills to check if
you have the googliness (if you compare it to Amazon,
they prioritize checking if you really are a good software
engineer, but still soft skills are important when you work
in a big company).
Similarly to Amazon, I had to complete two main steps (in
this case no initial coding quiz was required but I can't
really tell if this is the standard):
- The first step was a phone screen where the interviewer
only focused in asking me a technical question: it was an
excellent well structured question where he could almost
infinitely keep asking questions to make it harder and
harder until you are not able to give an answer, and that
was the case for me. You usually end up feeling that the
interview was a failure because it most likely ends at a
point where you don’t know how to answer.
- The second and last step is the on-site interview. This
consists of 1-hour 5 different interviews and you usually
have a 1-hour break with a google engineer to have lunch and
ask him questions. Google usually provides food in all the
offices, so most likely you will end up having lunch there;
they will also provide you a quick tour around the office.
Depending on the seniority you are applying for, you may or
not may have a system design interview, therefore you will
have to face with 3-4 coding/data structures questions, 1
system design (optional as I said) and one about your soft
skills.
As you can see, my interview in Google was more focused on
checking my technical skills. At least in my case, questions
they asked me in Google were more difficult than the ones I
was asked in Amazon. Nothing really impossible if you try to
prepare, and that’s why I am giving you here some links to
help you:
-
Project Euler: this is a challenging mathematical set of questions that
you need to solve by providing the solution. Only by writing
a program in an optimized way will give you the answer
(otherwise an O(n^2) will take ages);
-
LeetCode:
this is the place where you can keep practicing with coding
questions;
-
HackerRank: this is like LeetCode;
-
GitHub Repo
to practice with coding, data stractures and many other
things: I love this link!
-
Cracking the Coding Interview: this is the most famous book if you want to prepare for
the coding interview; I personally did not use it, but it's
really really famous and also tech companies recommend it to
read it;
-
Algorithms in C: this is where things get really interesting: if you want
to have a proper preparation about data structures and
algorithms you can go with this one and you won't regret it.
I love studying and this was a pleasure to read, but of
course it takes time;
-
The Algorithm Design Manual: Steven Skiena wrote this excellent book and like the
previous one gives you an excellent preparation in terms of
algorithms and data structures;
-
Algorithm and Data Structures explained by Abdul Bari: during my preparation I randomly ended up on a video made
by this person and I really enjoyed it. It explains
algorithms and data structures in a very easy way. In my
opinion YouTube is just the best way to have a basic
understanding of things
-
High Scalability: a website that tells you a lot about most recent news in
terms of scalable systems.
-
InfoQ:
you may already know this; if you don't, this is just a
website that collects all the latest articles about
technology in general.
- To prepare for system design questions, you should just go
on YouTube and search for "System Design Interview" - you
will get lots of videos that will explain you how to
approach for this question.
Not everyone agrees that you should prepare for an
interview, someone believes that it’s like cheating. I have
no harm in accepting that opinion, but for the reason I
explained above I am one of those people that like to come
prepared and show that you really want to take that job: I
don’t like saying things like: “I don’t remember this topic”
or “I’ve never heard about that”.
I would like to say one last thing: interviewers in these
company are always willing to put you in a comfortable
situation and they rarely are arrogant or annoyed by you.
When you decide to be an interviewer in these companies you
go through a training process where they teach you the way
to hire and then you have to attend a certain number of
interviews in shadow mode. I know that because I was an
interviewer when I worked in Amazon. The reason why I’m
saying that is because I really want to tell you that you
should not be scared of who you have in front of you, that
guy may be your colleague one day and vice versa, so relax
and try to trust him/her.
I would never say this is the perfect process to hire a good
software engineer just because I believe there is no perfect
process as well as there is no perfect company. I think a
good hiring process can be defined like that as long as it
works well with that company.