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.
I swear, there is probably still a library in the town you're reading this from!
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.
According to the College Board, the average college student will spend more than $1,100 on non-fiction textbooks and supplies this year. Fortunately, even the most ridiculous purchasing spree of computer science books won't get you there.
"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").
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.
- Code Complete 2
- The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition)
- Don't Make Me Think: A Common Sense Approach to Web Usability
- Rapid Development
- Peopleware: Productive Projects and Teams, 2nd Ed.
- The Design of Everyday Things
- About Face 3.0: The Essentials of Interaction Design
- The Inmates Are Running the Asylum: Why High Tech Products Drive Us Crazy and How To Restore The Sanity
- GUI Bloopers: Don'ts and Do's for Software Developers and Web Designers
- Programming Pearls (2nd Edition)
- The Pragmatic Programmer: From Journeyman to Master
- Designing Web Usability: The Practice of Simplicity
- The Visual Display of Quantitative Information
- Visual Explanations: Images and Quantities, Evidence and Narrative
- Envisioning Information
- Mastering Regular Expressions, Second Edition
Full Jeff Atwood Amazon book package - ~$350
On the bottom of this Amazon book package list page you can invest in all of Jeff's recommended books at once:
That's 16 books. You might need to build a bookshelf.
Steve Yegge's Recommended Reading
Steve's selections are heavily code and algorithm focused, especially compared to Jeff Atwood's. Jeff's books are more holistic, Steve's are more algorithm / OO design focused.
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.
- The Pragmatic Programmer: From Journeyman to Master
- Refactoring: Improving the Design of Existing Code
- Design Patterns
- Concurrent Programming in Java(TM): Design Principles and Pattern (2nd Edition)
- Mastering Regular Expressions, 2nd Edition
- The Algorithm Design Manual
- The C Programming Language, Second Edition
- The Little Schemer
Full Steve Yegge Amazon book package - ~$400
On the bottom of this Amazon book package list page you can invest in all of Steve's recommended books at once:
That's almost 10 books. You might want to get a ladder with wheels.
Interact with your book
Skimming through a book might teach you a bit, but we learn best through interactive experiences.
When you read the books, do something to solidify what you're reading.
- Spend an hour trying the exercises at the end of each chapter.
- Work on a relevant project.
- Take notes and blog your summaries.
- Write a review of the book once you're finished.
Compiled by Brian with ♥
Thanks to Greg Jordan for reviewing this before publication!