Code Interview Reading List

A few Coding for Interviews group members asked what books I would suggest reviewing before going into interviews, as they were preparing for their first. As Dan Blumenthal, Director of Engineering at TripAdvisor noted in his post on preparing for technical interviews:

"I only had one shot to get it right, and I wanted to make sure I didn’t screw it up. So though time was tight, I invested time in rereading both Design Patterns and The Algorithm Design Manual before sending out resumes."

A couple of quick notes before my suggestions:

Free from the library

I believe non-fiction books are one of the best no-brainer investments a person can make. But if you're strapped for cash or are not sure you'd really enjoy a certain book, hit the library.

Even if they don't have one of these books, you can request to borrow a book through inter-library-loan. If it's not available at nearby libraries, your friendly local librarian will order the book just because you asked.

That said, if you take a book out through inter-library-loan, make sure you return it in time. You don't want to start a librarian turf war.

"You blew 150k on an education you could have gotten in $1.50 in late fees from the library."

-- Matt Damon with a Boston accent, Good Will Hunting

Five essential books

To fully prepare for your programming interviews, you should have access to information on at least these five key topics:

Algorithm design - The Algorithm Design Manual - this book came highly suggested by Steve Yegge (see below) and Dan Blumenthal. The best part is a collection of "War stories" in which Skiena describes engineering challenges and how algorithmic solutions are put together to solve them. Compared to CLRS, this book doesn't go as deep in to the gritty details of analysis, but rather discusses algorithm design at more length. It is also very readable—a good thing when you're doing a full pass through a book for review.

Data structures and algorithms - Introduction to Algorithms (CLRS) - if you've been following Coding for Interviews for a while, you've noticed that a handful data structures come up in tons of different interview questions. Whether you took data structures courses in the past or not, any data structure review is worth it. Being able to describe the tradeoffs between different data structure implementations will give you serious bonus points. This book is data structure and algorithm canon.

Programming interviews - Cracking the Coding Interview - if you have a week before your interview, get this book and cram. Ideally, you should pace yourself, review a bit of each topic each day, and at least attempt to do the problems without peeking at the solutions—no easy feat, which is why I feel the Coding for Interviews weekly review and question are also valuable. Cracking is a great way to gain exposure to the types of interview questions you'll see and etiquette to follow fast.

Design patterns - Design Patterns: Elements of Reusable Object-Oriented Software - Even though you end up seeing design patterns in many software engineering job interviews, many CS programs don't cover them in their core curricula. If you didn't happen to take a software engineering course, you might not be aware of the nomenclature software engineers use to describe "that thing I did where I had a function with no parameters that just calls another function with a default argument". This book will help you become a better programmer. Another option, if you fall asleep easily while reading and like cheesy book covers: Head First Design Patterns

Your favorite programming language - You should know one programming language well enough to discuss its nuances and best practices:

Java: Effective Java (2nd ed.) - you could probably get away with reading this in lieu of Design Patterns as well. Effective Java will introduce you to a number of Java dos and don'ts, and gives a nice overview of the nuances of generics, enums and annotations.

Python - Expert Python Programming - I haven't read this yet myself, but John D. Cook considers it the Effective C++ for the pythonistas. Do you have another favorite? Let me know.

C++ - Effective C++ - I haven't read this myself either, but I've heard this is the C++ professional's book to read.

Ruby - The Ruby Programming Language - If you already have Ruby experience, this book by David Flanagan and Matz is a great way to solidify a deep understanding of the Ruby language. If you're still an early beginner, you might want to stick with the classic Programming Ruby ("The Pickaxe Book").

Javascript - Secrets of the Javascript Ninja - This book is new. As of this writing, the book has not been released yet. Perhaps it is the Effective C++ of Javascript. John Resig certainly knows how to write Javascript libraries, and this book uses library writing as to teach better Javascript programming.

List of Reading Lists

Jeff Atwood's Recommended Reading

Jeff's selections, especially compared to Steve Yegge's below, are more focused on UI and usability than software patterns and algorithms. In his own words,

"It's really a question of focus. I'm more interested in UI and usability."

Especially if you are looking at positions in web development, product management, front-end development or project management, use Jeff's books to branch out and learning a bit about topics outside of what's considered "core" computer science.

Jeff's selections give you a dangerous skillset. Anyone who has consumed all of these books should not have trouble finding or creating work for the rest of their life.

If you are thinking of interviewing at Google, Amazon, Facebook, etc., these books will be directly useful. I won't be surprised if you end up using at least one nugget of knowledge you learned from each one of these books in a given interview.