- C++ Primer: book
- Head First Design Patterns: book
- Designing Data-Intensive Applications: book
- Data Structures and Algorithms: book
- Cracking the Coding Interview: book
The last time I used C++ seriously was in 2009. I know that the language has evolved and changed quite a bit since then, so I'm not sure how relevant this book has remained. However, this book gave me both a deep understanding of the language as well as a great overview of OOP priniciples.
Head First Design Patterns
Even if you don't program in Java, in my opinion this is the best book to learn design patterns from.
Designing Data-Intensive Applications
I've been reading this book off and on for almost a year now and I'm still not done with it. However, I've found this book extremely enlightening and fun to read (if you're into this kind of thing).
I loved how the first few chapters describe how databases and other systems efficiently store data on disk. The middle chapters got a little boring and I ended up skimming them. But now we're in Hadoop territory and I'm really enjoying the book again!
Data Structures and Algorithms
This book should be owned by every software developer. I don't think I've ever read it end-to-end, but it covers all the major data structures and algorithms that a developer should understand.
Cracking the coding interview
If you're planning to apply to any major software company, this is the book to help you prepare for those coding interviews.