Is it better to spend all my time on data structures and algorithms rather than side projects, in or
Well, keeping the current interview process in mind, you surely need to spend the biggest portion of your preparation time on algorithm and data structures. Having said that, it is important to note that the interview process at Facebook and Google is evolving (and has already changed to some degree). They are putting a lot more focus on cultural fit and system design interviews. Coding interviews have become a prerequisite for getting an offer, if you can’t code/solve the problem (or have some serious bugs in your code), it’s quite difficult to get an offer.
So you would definitely need to be good in coding questions but don’t forget the other two types of the interviews. Let me explain in a bit more detail about these interviews.
Cultural fit interviews are intended to evaluate following things:
How good programmer/developer/student were you in the past? Your resume, work history, side/open source projects, educational project, all play a major role here.
What kind of co-worker you would be? The interviewer will try to evaluate if they would like to work with you in a team. Your motivation, empathy and perseverance will be assessed.
Do you have any red flag in your personality? How did you handle conflict in the past? How do you handle a difficult co-worker? etc.
Do you strive for success and growth? Remember that you are applying at one of the top companies in the world, they would like to hire above-average people.
System design interviews test your design skills and your ability to work with complex systems. Your performance in these interviews determines what position and salary you will be offered. If you can show above-average design skills, you will get a higher offer. A good resource to prepare for this kind of interview: Grokking the System Design Interview. These interviews become even more important when you are interviewing at the top companies like Google or Facebook. In these companies, if a candidate doesn’t perform above average, they have a limited chance to get an offer. A few sample design problems are: 1) Designing a URL Shortening service like TinyURL, 2) Designing Instagram, 3) Designing Twitter, 4) Designing Uberetc.
Hope this would help.
Terry Lambert, former Sr. Software Engineer at Google (2011-2012)
I like Gayle Laakmann McDowell as a writer.
Her book “Cracking The Coding Interview” is best read as a set of problems that you should try to solve yourself, before you look at the solutions presented in the book. If you can do that, you’ll likely pass the technical part of the interview.
But first you have to get the interview.
In Asian countries there tends to be this huge emphasis on “prestige of your university”. This appears to be a cultural phenomenon.
You can in fact get a good education at nearly any university, as long as it has equipment and a decent library, and you are motivated to learn, rather than just doing the minimum necessary to pass the classes to get the degree.
Just because you go to Harvard Law doesn’t mean that you’re a great lawyer. Just because you go to Johns Hopkins medical doesn’t mean you're not going to be a doctor with a high mortality rate.
This is not what’s going to get you the interview in the first place.
The thing that gets you the interview in the first place is being known. There are different paths to being known, but the most common ones are:
Participate in a popular Open Source project; one of the BSDs or a Linux distribution, or just the Linux kernel are good options, because these projects are used or known at the companies you’ve indicated an interest in.
While it’s great to have some things on GitHub, that’s not really a qualification for anything, if the projects aren’t popular; a popular project has multiple participants, and gets actively committed to on a rather regular basis; otherwise it’s just you publishing some sample code that maybe no one ever finds.
Get published; one paper in one journal is not published; 5 papers published with coauthors known in the field is published. Papers presented at actual conferences people have heard of, and which are printed in the conference proceedings is published — unless it’s a bogus conference, of they type that’s put on by predatory publishers to enable people to pay to pad their resume.
Get some work experience; this not only makes you reliably pinned as someone who can actually do work — it enables you to build your personal network. Your personal network will be how you get most of your jobs, throughout your career. You start this by being in contact with your fellow students, and your professors, so that you feel comfortable asking them “Say do you know anyone who works at Google/Apple/Facebook/Twitter that you can recommend me to?”.
Do something singularly important to the field.
Write a Book on a topic in the field.
So yes, learn data structures and algorithms. Algorithms + Data Structures = Programs (Prentice-Hall Series in Automatic Computation): Niklaus Wirth: 9780130224187: Amazon.com: Books. You won’t pass the technical interview otherwise.
Also do projects. Relevant projects, not just self-publication of your code on GitHub. That probably means working on someone else’s project. Get over it. Not everyone can be Linus Torvalds.
And build your personal network.
Getting known, and knowing people, is how you get the interview in the first place.