
This is a list of books highly recommended to be in every software engineer’s library.
This list of books are selected due to their enduring relevance to the software engineering profession. It includes books that cover the fundamentals to expert level.
Fundamentals – for beginners who want to learn the foundations.
- Think Like a Programmer: An Introduction to Creative Problem Solving – Anton Spraul
- Introduction to Algorithms – Comen, Leiserson, Rivest, and Stein
- Beginner’s Step-By-Step Coding Course: Learn Computer Programming the Easy Way – Craig Steele, David Krowitz
Software Engineering – mastering the craft of building reliable systems
- Code Complete: A Practical Handbook of Software Construction – Steve McConnell
- The Pragmatic Programmer: Your Journey To Mastery – Andy Hunt and David Thomas
- Domain-Driven Design: Tackling Complexity in the Heart of Software – Eric Evans
- Design Patterns: Elements of Reusable Object-Oriented Software – Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
- Extreme Programming Explained – Kent Beck
- Clean Code: A Handbook of Agile Software Craftsmanship – Robert Martin
- Bridging the Communication Gap: Specification by Example and Agile Acceptance Testing – Gojko Adzic
- BDD in Action: Behavior-driven development for the whole software lifecycle – John Ferguson Smart
- Software Engineering at Google – Titus Winters, Tom Manshreck and Hyrum Wright.
- Software Engineering Body of Knowledge (SWEBOK) – by IEEE Computer Society
User Interface – What Your Customers See and Interact With
- Don’t Make Me Think: A Common Sense Approach to Web Usability – Steve Krug
- Web Design with HTML, CSS, JavaScript and jQuery Set 1st Edition – Jon Duckett
- Learning Web Design: A Beginner’s Guide to HTML, CSS, JavaScript, and Web Graphics – Jennifer Niederst Robbins
Note that this list is agnostic to programming language, platform, framework, library and software vendor. What tools to choose is a separate topic and is open to free deliberation among implementing teams depending on what is most suitable for their intended customers.