avatarAlexander Nguyen

Summary

The author shares a list of resources they used to prepare for coding interviews at Amazon, Microsoft, and Google, covering coding resources, algorithm learning, system design, object-oriented design, and software engineering.

Abstract

The author, who has worked at Amazon, Microsoft, and Google, shares a list of resources they used to prepare for coding interviews at these companies. The resources cover coding resources, algorithm learning, system design, object-oriented design, and software engineering. The author emphasizes that they did not go through all the resources cover to cover and that the resources are not meant to be a one-size-fits-all study plan. They recommend focusing on grasping the core concepts in each category before moving on to the next one.

Opinions

  • The author recommends "Cracking the Coding Interview (CTCI)" for beginners and "Elements of Programming Interviews (Python, Java, C++)" for those with more experience.
  • The author suggests using NeetCode.io for data structures and algorithms practice and CSES Problem Set for a more challenging algorithm practice.
  • The author recommends "Introduction to Algorithms (4th Edition)" for learning algorithms and following MIT's algorithm course for a traditional classroom setting.
  • The author suggests using "The System Design Interview (Online Course + Community)" and "System Design Primer" for system design preparation.
  • The author recommends "Design Patterns: Elements of Reusable Object-Oriented Software" and "Head First Design Patterns" for object-oriented design preparation.
  • The author suggests reading "Clean Code" and "Working effectively with legacy code" for software engineering best practices.
  • The author emphasizes that the resources are not meant to be a one-size-fits-all study plan and recommends focusing on grasping the core concepts in each category before moving on to the next one.

Resources that got me into Amazon, Microsoft, and Google

Quick Context

After 1-year tenures at Amazon, Microsoft, and Google, I’m sharing an updated list of 2024 resources everyone should be using to work in big tech.

Regardless, these are the resources I recommend both purchasable and free.

Also, if you’d like to see a more condensed version of this list, save it on Github here

Coding Resources

Photo by Oskar Yildiz on Unsplash

Cracking the Coding Interview (CTCI)

This book is perfect for kicking off your journey into coding interviews. If you’re just starting out, I suggest giving it a go.

The explanations for the questions are super clear and easy to grasp, especially if you’ve got a basic handle on algorithms and data structures.

Elements of Programming Interviews (Python, Java, C++)

If you’ve got some experience under your belt, the questions in this book match what you’ll face in interviews at big tech companies. Once you nail these questions, you’ll be totally prepped for your average tech interview.

It might not be as beginner-friendly as CTCI, but it lays out a study plan tailored to your prep needs.

NeetCode.io

Neetcode offers an amazing list of coding interview questions that he goes through in depth.

He has been a gold standard for anyone beginning their data structures and algorithms journey.

CSES Problem Set — Tasks

These problems pose a significant challenge, particularly for those unfamiliar with algorithm practice. This book isn’t geared towards beginners.

Mastering the sorting and searching section will prepare you thoroughly for coding interviews, surpassing the skills of the average LeetCode user and most other interview candidates.

If you find LeetCode’s medium questions easy and CTCI too simplistic, this book offers the level of difficulty you seek for any coding interview.

If you want to improve your system design skills, checkout this sponsored newsletter! Byte-sized design, is a free system design newsletter that sends system design summaries from the biggest tech companies!

If you need looking for a full list of system design blogs, check out their list here!

Algorithm Learning

Photo by ThisisEngineering RAEng on Unsplash

Introduction to Algorithms (4th Edition)

This textbook is widely regarded as the best resource for learning algorithms. It was also personally used by my university to teach the core and essential algorithms for most coding problems.

The 4th edition was recently released and is still relevant to MIT students. If you need structure and a traditional classroom setting to study, follow MIT’s algorithm course here.

William Fiset — Data structures and algorithms

William does an amzing job explaining complex data structures and algorithms at a fundamental level.

This is different from studying just for coding interviews because you’ll have an in-depth understanding of underlying data structures and algorithms through his videos.

CSES.fi Handbook

This handbook is tailored for individuals who are highly proficient with most LeetCode algorithms. It serves as a valuable complimentary resource to the CSES.fi curriculum and is available for free.

Competitive Programming 4th Ed.

For the seasoned algorithm enthusiasts, this book delves into every niche data structure and algorithm that could potentially be asked in any coding interview. While such extensive preparation may not typically be required for FAANG-type companies, it can be relevant for roles in hedge fund-type companies.

System Design

Photo by ThisisEngineering RAEng on Unsplash

The System Design Interview (Online Course + Community)

In my view, you’ll be fully prepared for any system design interview with these resources. The diagrams are easy to understand, and the explanations in both books are straightforward, aiding in quick comprehension of system design concepts.

This subscription is worthwhile because the Discord community, including mock interview partners, salary discussions, and comprehensive overviews of system design topics for collaborative study with fellow users.

System Design Primer

The system design primer is the best free resource on all things system design. Dig deep into the Git repository and you will learn everything you need to know on system design. It’s all curated in a single repository and the clearly structured to give you a guided curriculum.

Grokking the System Design Interview

If you need something more in-depth, then you can checkout this resource that gives you clear industry standard system design explanations for the worlds largest products. A complete read through this and The System Design interview should be enough to pass any interview with system design.

Designing Data-Intensive Applications

If you’re further along in your software engineering career, Designing Data-Intensive Applications is a must read. This book will guide any reader on the basics of how to scale large web applications like Facebook or Netflix.

If you’re still unsure about the differences between a NoSql and Sql databases, this book will give the most comprehensive explanation you’ll ever need.

While this isn’t necessarily a book you read end to end, it’s an amazing supplement if you’re curious about databases and scaling your applications. It’s an all-time favorite for anyone who’s been working as a software engineer for at least a year.

Object Oriented Design

Photo by Ben Griffiths on Unsplash

Design Patterns: Elements of Reusable Object-Oriented Software

Regardless if you’re learning design patterns for the object-oriented programming interview, you will need to know design patterns as a software engineer at these large companies.

The book is the origin of the world’s most common design patterns today and showing proficiency in these for your object oriented interview is a requirement for certain large technology companies like Amazon.

Head First Design Patterns

The above resource is dense and written in language that’s hard to understand. While the original source material in design patterns is great, it doesn’t help much if it’s difficult to understand.

Consider Head First Design patterns to study a simplified explanation of those common design patterns. It might not be as in-depth as the original source material, but your understanding in design patterns will be more than enough to crack any object-oriented interview.

(Bonus) Software engineering

Photo by Danial Igdery on Unsplash

After you show off your skills to get the job, you can always be learning more as a software engineer. Here’s a few more resources I recommends working in big tech.

Clean Code

By the end of reading Clean Code, you’ll be able to spot the difference between good and bad code, whip up clean and efficient code, and understand the importance of clear names, functions, and classes.

Plus, you’ll pick up tips on formatting code for readability and mastering error handling without losing sight of your logic. It’s a must-read for anyone in the software game who’s serious about leveling up their coding skills.

Working effectively with legacy code

You’ll find this book a lifesaver for dealing with old code issues without breaking the bank on full rewrites. It provides practical strategies to rein in existing software affordably and effectively.

You’ll learn the importance of writing tests to safeguard against unintended changes while optimizing code. With examples in Java, C++, and C#, plus language-independent advice, it’s a valuable resource for developers like you.

The Mythical Man Month

This book is a timeless classic. If you’ve ever pondered why Amazon advocated for two-pizza teams (where teams shouldn’t exceed what two pizzas can feed) or why your teams typically consist of no more than 10 members, it’s because of insights from this book.

“The Mythical Man-Month” introduced the concept that adding more people to a team increases communication overhead with everyone else. While this idea is the most famous essay in the book, all the other essays are equally valuable.

Domain-Driven Design

“Domain-Driven Design” may feel like a textbook, but it’s essential for budding software engineers. It clarifies concepts often heard in the workplace, such as breaking down objects and interactions. Understanding entity vs. value objects can clarify database schemas.

Unlike “Designing Data-Intensive Applications,” which focuses on high-level architecture, this book dives into lower-level details like database interaction and object design. Despite its complexity, it’s a must-read for improving engineering skills.

Closing Thoughts

Honestly, I didn’t go through all of these resources cover to cover. If you manage to do so, you probably won’t need to study for another interview again.

Once you grasp the core concepts in any of the above categories, focus your time on moving to the next one. These are the resources I used, but they don’t cover everyone else’s study plan.

Hope this helps.

FAANG resume tips that got me into Amazon, Microsoft and Google

And follow me on my quest to 200,000 followers on LinkedIn Alex Nguyen | LinkedIn

Software Development
Coding
Programming
Technology
Interview
Recommended from ReadMedium