Similar to our last few recommended reading lists, every developer should read these classics, without exception, regardless of experience, or platform.
Clean Code: A Handbook of Agile Software Craftsmanship - Robert C. Martin - Goodreads
An important read for all developers, Uncle Bob walks readers through a number of concepts and ideas to help you write better and cleaner code. Most of the concepts are simple and easy to apply, however, at times it's not the easiest of reads, with lots of code samples to get through, but I strongly recommend you stick with it. As the book progresses some of the examples are really worth your time and are more real world than many of the problems presented in other books.
Head First Design Patterns - Eric Freeman and Elisabeth Robson - Goodreads
I probably should have listed the original (and controversial) design patterns books by the Gang of Four (Goodreads) but I find the Head First books fun to read. They differ from the normal text book with lots of images and varied formatting, although a little tricky to follow at times well worth it for the entertainment value. As for design patterns, whatever your feelings towards them, they are valuable concepts to be aware of that when applied correctly and confidently can help towards creating a robust system.
The Machine That Changed the World - James P. Womack - Goodreads
The Machine That Changed the World is a 1991 book based on the Massachusetts Institute of Technology's $5 million, five-year study on the future of the automobile, written by James P. Womack, Daniel T. Jones, and Daniel Roos.
Code Complete, 2nd Ed. - Steve McConnell - Goodreads
Widely considered one of the best practical guides to programming, Steve McConnell's original Code Complete has been helping developers write better software for more than a decade. Now this classic book has been fully updated and revised with leading-edge practices and hundreds of new code samples illustrating the art and science of software construction.
Refactoring - Martin Fowler - Goodreads
The bulk of this book is around seventy refactorings described in detail: the motivation for doing them, mechanics of how to do them safely and a simple example.
Refactoring Workbook - William Wake - Goodreads
This example-driven workbook shows how to unleash the significant power of refactoring and improving your software. It aims to help identify where problems in a software application exist or are likely to exist.
Applying UML and Patterns, 3rd Ed. - Craig Larman - Goodreads
Good software starts with a good design, and the subtitle of Applying UML and Patterns, "An Introduction to Object-Oriented Analysis and Design (OOA/D) and the Unified Process" reinforces that that's what this book is about. The first edition of Applying UML and Patterns became a standard.
Object-Oriented Design Heuristics - Arthur Riel - Goodreads
Here is the first object-oriented development book to provide specific experience-based guidelines to help developers make the right design decisions. This book offers the next step for readers that know the basics of object-oriented development and now need to know if they are doing it right and making the right choices.
These books help to move from focusing on the code to seeing the implementation from a higher viewpoint and improving the integrity of the project as a whole.
The Pragmatic Programmer - Andrew Hunt - Goodreads
The Pragmatic Programmer cuts through the increasing specialization and technicalities of modern software development to examine the core process--taking a requirement and producing working, maintainable code that delights its users.
Patterns of Enterprise Application Architecture - Martin Fowler - Goodreads
The practice of enterprise application development has benefited from the emergence of many new enabling technologies. Multi-tiered, object-oriented platforms, such as Java and .NET, have become commonplace.
Test-Driven Development - Kent Beck - Goodreads
Follows two TDD projects from start to finish, illustrating techniques programmers can use to increase the quality of their work. The examples are followed by references to the featured TDD patterns and refactorings.
Refactoring to Patterns - Joshua Kerievsky - Goodreads
In 1994, "Design Patterns" changed the landscape of object-oriented development by introducing classic solutions to recurring design problems. In 1999, "Refactoring" revolutionized design by introducing an effective process for improving code.
These books move towards more "putting it all together," wrangling the software development process, and getting into the "science" behind computer science.
The Mythical Man-Month - Frederick Brooks - Goodreads
Few books on software project management have been as influential and timeless as The Mythical Man-Month. With a blend of software engineering facts and thought-provoking opinions, Fred Brooks offers insight for anyone managing complex projects. These essays draw from his experience as project manager for the IBM System/360 computer family and then for OS/360, its massive software system.
User Stories Applied by Mike Cohn - Goodreads
You’ll learn what makes a great user story, and what makes a bad one. You’ll discover practical ways to gather user stories,even when you can’t speak with your users. Then, once you’ve compiled your user stories, Cohn shows how to organize them, prioritize them, and use them for planning, management, and testing.
Agile Software Development or Agile Principles, Patterns, and Practices in C# - Robert Martin - Goodreads
Written by a software developer for software developers, this book is a unique collection of the latest software development methods.
Applying Domain-Driven Design and Patterns - Jimmy Nilsson - Goodreads
Patterns, Domain-Driven Design (DDD), and Test-Driven Development (TDD) enable architects and developers to create systems that are robust and maintainable. While the examples in this guide are in C# and .NET, the principles can be used by developers using any language and IDE.
Rapid Development by Steve McConnell - Goodreads
A fundamental software engineering project management guide based on the practical requirements of "Taming Wild Software Schedules". Emphasizes possible, realistic and "best practice" approaches for managers, technical leads and self-managed teams.
Extreme Programming Explained, 2nd Ed. by Kent Beck - Goodreads
"In this second edition of Extreme Programming Explained, Kent Beck organizes and presents five years' worth of experiences, growth, and change revolving around XP.
Management with Scrum by Ken Schwaber - Goodreads
The rules and practices for Scrum—a simple process for managing complex projects—are few, straightforward, and easy to learn.
Introduction to Algorithms by Thomas Cormen - Goodreads
This title covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study.
These texts help hone your skills along with improving the efficiency and effectiveness of your team.
Domain Driven Design - Eric Evans - Goodreads
With this book in hand, object-oriented developers, system analysts, and designers will have the guidance they need to organize and focus their work, create rich and useful domain models, and leverage those models into quality, long-lasting software implementations.
Working Effectively with Legacy Code - Michael Feathers - Goodreads
Get more out of your legacy systems, more performance, functionality, reliability, and manageability.Is your code easy to change? Can you get nearly instantaneous feedback when you do change it? Do you understand it? If the answer to any of these questions is no, you have legacy code, and it is draining time and money away from your development efforts.
Agile Estimating and Planning - Mike Cohn - Goodreads
Agile Estimating and Planning is the definitive, practical guide to estimating and planning agile projects. In the book, Agile Alliance co-founder Mike Cohn discusses the philosophy of the agile estimate and planning, and shows you exactly how to get the job done with real-world examples and case studies. This book is a must-have agile estimation tool for your development toolbox.
Lean Software Development - Mary Poppendiecks - Goodreads
This remarkable book combines practical advice, ready-to-use techniques, and a deep understanding of why this is the right way to develop software.
Although not to be seen as compulsory as the above texts, what follows will assist in taking you into the realm of pure computer science. At the very least, they serve to demonstrate that our work has solid foundations in quantitative science.
The Art of Computer Programming, Volume 1: Fundamental Algorithms, 3rd Ed. - Donald Knuth - Goodreads
The first revision of this third volume is the most comprehensive survey of classical computer techniques for sorting and searching.
Concrete Mathematics: A Foundation for Computer Science - Ronald L. Graham, Donal Knuth and Oren Patashnik - Goodreads
This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills.
We have also included a list of some additional reading material not strictly focusing in on developer material.
Deep Work - Cal Newport - Goodreads
Deep work is the ability to focus without distraction on a cognitively demanding task. It's a skill that allows you to quickly master complicated information and produce better results in less time. Deep work will make you better at what you do and provide the sense of true fulfillment that comes from craftsmanship.
How to Win Friends and Influence People - Dale Carnegie - Goodreads
In today’s world, where more and more of our communication takes place across wires and screens, Carnegie’s lessons have not only lasted but become all the more critical. Though he never could have predicted technology’s trajectory, Carnegie proves a wise and helpful teacher in this digital landscape.
The One Thing: The Surprisingly Simple Truth Behind Extraordinary Results - Gary Keller - Goodreads
The One Thing explains the success habit to overcome the six lies that block our success, beat the seven thieves that steal time, and leverage the laws of purpose, priority, and productivity.
Grokking Algorithms - Aditya Y. Bhargava - Goodreads
An algorithm is nothing more than a step-by-step procedure for solving a problem. The algorithms you'll use most often as a programmer have already been discovered, tested, and proven. If you want to take a hard pass on Knuth's brilliant but impenetrable theories and the dense multi-page proofs you'll find in most textbooks, this is the book for you.
Elegant Objects - Yegor Bugayenko - Goodreads
This book is about object-oriented programming from an idealistic and, maybe, a bit of a futuristic point of view. There are 23 independent recommendations for a practical OOP designer on how to make code cleaner, classes more solid, and architecture more visible.
The Imposter's Handbook - Rob Conery - Goodreads
You've had to learn on the job. New languages, new frameworks, new ways of doing things - a constant struggle just to stay current in the industry. This left no time to learn the foundational concepts and skills that come with a degree in Computer Science.
As in our previous reading list, there is a large amount of content online from articles to blog posts, we have compiled a few of our favourites below.
Things You Should Never Do, Part I - Joel Spolsky - read here
Joel Spolsky is a software developer in New York, and although this post was written in 2000, it's still just as relevant now as it was then, if not more.
12 best practices for user account, authorization and password management - Ian Maddox - read here
Chrome will start marking all HTTP sites as not secure in July - Emil Protalinski - read here
Blazor: a technical introduction - Steve Sanderson's Blog - read here
The Practical Test Pyramid - Ham Vocke - read here
Netflix Technology Blog - read here
Moving away from developer articles, this blog post was recommended by our infrastructure team, which covers Linux Performance Analysis in 60,000 Milliseconds.