Yet another list of Interview Preparation Resources

nafSadh // notes // YaGIP / Reading Log / yalipr

Preparing for software engineering interview needs time, attention and practice; and to help with that, there are many resources sprinkled all over the internet and bookshelves. Some of them are wonderful and some of them are meh. Browsing through these can be overwhelming.

Therefore, I have tried to create a curated list of resources – these are just some of the good options you can chose from. To help you decide on which resource to try, I have annotated each item.
By no means, you have to go through all of it. I do not claim that, these are the best resources out there either; there must be resources I don't know about which are even better and there might be some resources which I haven't included but is useful to someone else.

I would suggest you to go through some of the articles and look at some of the study plans. Then pick one learning resource (book/course/lecture series) and one practice resource. It is best to learn something everyday and practice a bit everyday.

Good luck & have fun!

Table of Contents

  • Articles
  • Study Plans and Reading Lists
  • Books
  • Video Lectures
  • Online Learning Resources
  • Coding Practice
  • Mock Interview
  • Cheat sheets
  • On Résumé
  • Official Guides
  • Bookmarks
  • Even if you are not interviewing
  • Job Channels
  • More Stuff



xkcd 1293

Articles

Here are some insightful articles. All of them are personal takes on interview process and/or how to ace them.

  • ABC: Always Be Coding: "there's no silver bullet to getting hired. But, as an engineer, the best thing you can do is to ABC: Always Be Coding" – this is a nice in a nutshell guide for every one.

  • Ex-Googler, blogger Steve Yegge↗ wrote his famous note on how to get that job at Google. This is a bit dated, but still remains relevant.

  • Get that job at Facebook – a former Facebook engineer describes how Facebook hiring works and how to prepare for it.

  • The 2 types of software engineering interviews… discusses about two broad categories of software engineering interviews: (1) domain specific interviews and (2) computer science fundamentals interviews.

  • Crack the System Design interview – tips from a Twitter software engineer.

Following articles, are not about how to ace an interview, but these are for the other side of the table; about how to hire a good engineer.

  • The Guerrilla Guide to Interviewing v3.0 - Joel Spolsky↗.

  • How to Hire a Programmer - by Jeff Atwood↗ of Coding Horror, StackOverflow and Discourse.

  • Future Proof Your Technical Interviewing Process: Hiring or Not - Chris Sells↗.

Study Plans and Reading Lists

  • Coding Interview University – this became a wildly popular compendium of resources for self-paced software engineering training. John Washam wanted to gear up himself as a software engineer and embarked on an 8 month long journey towards being an skilled software engineer. This study plan is overly comprehensive and as John mentioned, several times, you do not need to go through everything he went through. My personal recommendation is to go through some of the articles and pick up at least one algorithm book (more on it later) and one coding prep book/website (more on it later as well). This directory lists a lot of good reading material on specific topic collected from various sources; don't be voracious, eat healthy and read (study) as needed.

  • Ace the coding interview, every time – An Amazon engineer's take on how not to fail any technical interview.

  • Andyy Hope↗ on software engineering interviews – a recent article outlining how he prepared for and got hired at Facebook.

  • The 30-minute guide to rocking your next coding interview – a recent NUS grad's reflection on how he prepared for tech interviews. Yangshun Tay↗ now works as a front-end engineer at Facebook. Oh, and this guide comes with a handbook.

  • Sam Gavis-Hughson↗ from Byte by Byte on interviewing resources.

  • The System Design Primer 🌟 - a comprehensive illustrated guide on how to improve your system designing skills, particularly for interview prep. Includes a flow chart of topics to cover, a study guide and then goes into providing brief overview of each topics along with useful references materials. By Donne Martin, Engineering Manager at Facebook.

  • Awesome Scalability"list of readings to illustrate best practices and patterns in building scalable, available, stable, performant, and intelligent large-scale systems." – Binh Nguyen↗.

  • System Design Preparation"a collection of links/documents for the following use cases: a) Prepare for a system design or open ended rounds. b) Learn more about how large scale systems work and thought process of designing a new system." – Shashank Khare↗.

  • Here is great pinboard containing links to useful resources on system design, curated by Farsan Rashid.

On Books

There are plethora of books on algorithms, problem solving, software engineering and computer science in general. There are also, as many book-lists. One thing, I'd like to mention is that, picking up a good book is important. In many cases people are in a time crunch. So, you want to study a book which you can cover within a limited time; similarly, you would want to learn enough and understand them correctly.

There are people who have studied and compared a good number of books. What they have to say about these books can give you sufficient insight for picking up the right book.

  • Shawn Bullock's Quora answer on best algorithms and data structures books – this answer is probably one of the most comprehensive overview of good algorithm books. I mostly agree with him, except, I have much more reverence for CLRS than he has. I'm glad that he likes Sedgewick too.

  • Programming Algorithms & Data Structures – a Goodreads list of well recognized and revered books on programming algorithms, data structures, problem solving and programming challenges.

  • A comparison of four algorithms textbooks: Knuth, CLRS, DPV, Skiena.

  • An annotated list of programming books by Dan Luu.

Book List

Following are some books I studied or vetted and are in my to-read list.

See also: r/cscareerquestions/wiki/faq_books

Algorithms and data structures

  • 🚀 Sedgewick – I read his Algorithms in C++ during my freshman and sophomore years and I loved how he handled some very intricate topics. Later on I also looked at the more updated Algorithms 4e in conjunction with his Coursera courses 1, 2. Another book he authored focuses on analysis of algorithms and thus more mathematical in nature.

  • 📜 CLRS – Introduction to Algorithms (3e) by Cormen, Leiserson, Rivest & Stein – this is undoubtedly the most cited algorithm text book. However this is by no means an intro book. A lot of the materials covered here are intended for formal undergrad and grad level algorithm courses. This is one of the best book to study; if you can master this book, you can call yourself a master of algorithms. I specially liked graph related topics here during my sophomore/junior year algorithm class. However, I think this is less accessible for some readers.

  • Skiena – Steven S. Skiena is well known in fields of algorithms, programming challenges and data science. His The Algorithm Design Manual 2e balances between practical applications of algorithms and academic study of it. This book is organized in two parts: (1) text on algorithms and data structures & (2) catalog of algorithms. He resorts to mathematics less often and explains things in detail. This is a nice book to study with and keep as reference material.

  • DPV – Algorithms by Dasgupta, Papadimitriou, and Vazirani. This book's PDF↗ is officially available for free online. People have mixed opinion about it. IMHO, this is a well balanced and venerable algorithm text. This tends to jump too quickly into mathematics; so if you are not math savvy, then this might seem difficult to you. I haven't studied the book in depth yet, but one thing I liked about the contents is that, it appears to be industry appropriate. It breaks up algorithms into classes, and teaches you how to recognize what kind of algorithm should be used to solve a particular problem.

Algorithms Refresher

  • Algorithms Unlocked [AU] by Cormen (the C in CLRS) is a nice refresher. This is much thinner than CLRS and is written more as a tradebook than as a text reference.

  • TopCoder Tutorials lists some great articles written by the TopCoder competitive programming community over the years. "They are very informal, which lets them stay short and to the point - a luxury no serious algorithm book can afford. The goal of these tutorials is to refresh your knowledge if you studied these algorithms before, or to give you an initial direction in exploring a particular group of algorithms." – ↗

  • Software Engineering Interview Preparation – an executive summary of theoretical stuff needed for such interviews. Comes with a tie-in blog post .

Interview Prep Books

  • Virtually everyone is familiar with Cracking the Coding Interview 🌟 [CTCI] by Gayle Laakmann McDowell and probably you would be benefited from it too. Solutions are posted on Github in several languages.

  • Programming Interviews Exposed [PI-Exposed] by John Mongan et al. is a very basic book for people who are totally uninitiated. If CTCI seems difficult for you, you can pick this up to build some foundation.

Design & Development

  • Designing Data-Intensive Applications – The Big Ideas Behind Reliable, Scalable, and Maintainable Systems by Martin Kleppmann

Video Lectures

There are some really good lectures on fundamentals of computer science and some on interview prep.

  • CS50 2017 - Lecture 0 - Scratch – Harvard's CS50 lectures are famous and now most of them are available online. This is a good intro.

  • Jackson Gabbard, one of the early Facebook engineers, made some really great video lectures circa 2016-2017.

  • CTCI/Cracking the Coding Interview lectures on HackerRank – Gayle Laakmann McDowell, author of CTCI made a series of video lectures in collaboration with HackerRank in 2016.

  • MyCodeSchool – YouTube videos explaining fundamentals of computer sciences (data structures and algorithms).

Online Learning Resources

MOOCs on Algorithm, Data Structures etc.

  • Tim Roughgarden, a Stanford Professor, offers a 4 part algorithms course on Coursera. This is one of the earliest algorithms course on Coursera and is well received.

  • UCSD offers Data Structures and Algorithms Specialization on Coursera with 6 well designed courses.

  • Sedgewick – the famous author offers a course in two parts: Part I and part II.

  • Grow Your Technical Skills with Google

Interview Prep Courses

  • Udemy Technical Interview – "This course provides an introduction to topics that often show up on technical interviews." Also check out their other courses about career in software engineering.

  • 💎 InterviewBit has six tracks: Programming, System Design, Scripting, Databases, Mock Interviews and Puzzles. Their courses are, in a nutshell, genius. It is organized as gamified levels. Each level has some tutorials and then relevant problems/challenges. You have to achieve certain score to unlock next level. This, imho, is very affective. You can learn fundamentals of comp-sci and solve interview style problems side-by-side in a well structured plan.

  • Interview Camp – created by Harsh Goel↗, who worked for NetApp, Google and sold his Pext app to Pinterest. From the looks of it, this seems to be a good camp; but this is paid content and I haven't purchased it yet.

  • Interview Cake – this is money-back guarantee freemium interactive course. The reading materials are free, but interactive problem solving steps are not.

  • Hired in Tech – Algorithm design

Design & Development

  • Software Development Process on Udacity, in collaboration with GATech; also part of Georgia Tech's Online Masters Degree (OMS) as CS6300. Lead by Alex Orso.

  • UIUC offers a Cloud Computing specialization on Coursera. It has 5 courses, 2 on cloud computing concepts, 2 on applications of it, 1 on cloud network and one capstone project. Looks interesting. A more succinct course could be better, but this offers more up to date understanding of this now growing field.

Coding Practice

Best way to sharpen your algorithm and problem solving skills is by engaging in competitive programming. But if ACM, TopCoder or Codeforces are not your cups of tea, then you can resort to one of the following:

  • LeetCode – This site originally hosted some two-three hundred programming interview problems. It is run by Winston Tang↗, an engineer at Google, Amazon and Intel. Recently he started working full time on LeetCode and since, the problem archive has grew to about a thousand. It now also organizes contests regularly, resulting in the surge of problems. First two-three hundred problems cover a wide range of everything; so you do not have to solve all 900 of them. Also, a good thing about this site is that, with premium subscription, you can filter problems by company tags. So, if you are preparing for a particular company, you can review their trend.
    • My personal suggestion is to, solve a few problems everyday and not to exhaust yourself. They also have a revisit and favorite list. You should definitely utilize these. Also, session is a nice feature.
  • HackerRank evolved from InterviewStreet. It originally provided a tool for companies to arrange online coding tests. Later, they started HackerRank for programmers to practice and solve coding problems. Their problem set ranges nicely from ACM/TopCoder style competitive programming problems to technical interview focused problems.
    • They now have a Interview Preparation Kit
    • I like how they have arranged their problems in different domains
    • They also arrange contests – some of them are often sponsored and doing well on them may result in direct interview invite.
    • ProjectEuler+ is a nice touch on Project Euler.
  • InterviewBit – organizes contests, collaborates with software companies and has some wonderful prep courses.

  • GeeksforGeeks – it has a lot of articles, some are really good while some are meh. So use with caution. I have found a lot of their explanations to be spot on and very useful in understanding difficult problems.


xkcd 1185

Mock Interview

Doing some mock interview is a good idea. Specially, if you can get feedback.

  • interviewing.io - anonymous interview with potential employers. Interviews are conducted by engineers from companies that are actually hiring; after a successful interview the company may ask you to unmusk if they want to bring in for on-site.

  • Pramp "is a FREE, online peer-2-peer platform for practicing technical interviews." It matches you with other engineers for doing 1-on-1 video sessions.

Cheat sheets

  • VisuAlgo – visually explains algorithms and data structures in action. By Steven Halim.

  • Cracking the Coding Skills – from CTCI companion website.

On Résumé

  • Joel on Getting Your Résumé Read

  • Both CTCI and PI-Exposed have very good sections on resume. Look at them.

Soft Skills

  • 7 Software Engineer Interview Questions and Answers
  • Software engineer interview questions

Official Guides

Software industry is probably that odd industry where they reveal all secrets about their interview process. Most large companies have standardized their interview process so much so that, and they want interviewees to succeed so much that they actively generate and provide prep materials.

Facebook

  • Preparing for your Software Engineering Interview at Facebook
  • Code Lab – coding practice arena made in collaborarion with InterviewBit.
  • Preparing for Your Instagram Interview
  • CS50 Lecture by Mark Zuckerberg – Given in 2005 at Harvard as guest lecture.

Google

  • How We Hire
  • How to: Work at Google — Candidate Coaching Session for Technical Interviewing – YouTube video from 2012.
  • Grow Your Technical Skills with Google – not specifically for interview.

Medium

  • Medium's engineering interview process

Palantir

  • Interview Process – guide on getting hired
  • How to Ace a Systems Design Interview – article.

Bookmarks

  • http://bigocheatsheet.com/
  • https://www.youtube.com/watch?v=PJKYqLP6MRE
  • https://codelab.interviewbit.com/dashboard/
  • https://techdevguide.withgoogle.com/paths/advanced/

From Reddit

  • https://www.reddit.com/r/cscareerquestions/comments/n5spv/getting_a_job_in_software_development_a_reddit/
  • https://www.reddit.com/r/cscareerquestions/comments/1jov24/heres_how_to_prepare_for_tech_interviews/

Even if you are not interviewing

Since you are here, and I got you reading this far, I am going to share some of my favorite resources. These do not directly help you in acing your technical interview but they are really useful to software engineers in general.

  • Write Code Every Day – how John Resig↗, creator of jQuery picked up pace for his pet project(s).

  • Programming Pearls (2e) by Jon Bentley – some time tested articles originally published on CACM.

  • Joel on Software [JoS] – Joel Spolsky, the guy behind StackOverflow, Trello, FogCreek and other wonderful things, posts read-worthy articles here.

  • Project Euler – a collection of mathematical problems for which answers can be found using computer programs.

Job Channels

I found the following channels to be a good source for job search:

  • Triplebyte – Triplebyte is a platform which makes finding new opportunities and hiring great talent - both easier. First anyone can take their online quiz. This is a comprehensive quiz covering various topics a generalist software engineer is expected to know. Don't worry, none of these are tricky or arcane. If you pass this quiz you are invited to schedule a 2hr Skype interview. You'd be provided enough prep material for those. Once you pass this step, you'ld be matched with upto 200 potential companies based on your skills and interests. They'd also send you some really nice swag (I got an wireless charger and a nice jacket). Their portfolio includes a lot of top tier companies. Once you match with some companies, they'd give you pitch calls to tell you about their job opportunities. Then you are expected to set up 3-5 on-site interviews. They'd arrange them in a way so that you can just travel once and be done with it. There have been historically a 50% on-site to offer rate. So, if you go for 5 on-sites you'd easily get 2-3 offers to chose from. One thing great about this service is that, they eliminate the messy sourcing and phone screening steps. Another great thing is that, you can arrange your interviews together making it easy to secure multiple offers in a short window. On top of all that, Triplebyte will give you three grands if you accept and offer through them.

  • Hired.com – After you sign up with them, they'd review your profile and one hiring advocate may have a phone chat with you to better understand your profile and career goal. They usually focus on candidates in (located at or willing to relocated to) major US tech hubs such as SF Bay Area, NYC etc. They advise on your career progression and once you are ready your profile would go live for 1-2 weeks. Going live means, your profile will be advertised to a pool of potential employers who in turn will contact with you about potential opportunities. I found Hired.com to be very useful. On top of hooking up to a lot of good employers, you'd get a cash bonus if you get hired through them.

not so random though

  • I failed my effing coding Interview!?
  • Coding Interview Tips
  • The ultimate guide to acing your technical interview
  • System Design Interview
  • 5 things you need to know …

2018-2019 © nafSadh
Maintained on GitHub by nafSadh.
Please report issues and add suggestions here.