Every book listed here would definitely make you a better software developer. No matter what languages or technologies you choose, there are certain best practices that are universally applicable. Some of them relate to the way you write code, while others relate to how you conduct yourself as a professional software developer.
The books listed below cover all of these topics. Every single one of them is well-known in the software development industry and has a good rating among reputable software engineers. Every one of these books was either fully read by me or used as reference material. I have personally improved my knowledge from every shingle one of them.
All of the books language- and technology-agnostic, although some of them choose a specific programming language to show examples in. Nevertheless, the principles taught in every one of these books are universally applicable.
Every single one of these titles is a timeless classic. And every book has been written by a reputable software developer (or a team of reputable software developers) who are well-known within the IT industry.
For example, Clean Code, Clean Coder and Clean Architecture have been written by Robert Cecil Martin, who is known in the industry as “Uncle Bob”. The book on Design Patterns has been written by four authors, who are collectively known within the industry as “Gang of Four”. They are, in fact, the ones who have systematized the design patterns in object-oriented software development.
The following descriptions were taken directly from the shop listings for each of these books.
Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin
Even bad code can function. But if code isn’t clean, it can bring a development organization to its knees. Every year, countless hours and significant resources are lost because of poorly written code. But it doesn’t have to be that way. Noted software expert Robert C. Martin presents a revolutionary paradigm with Clean Code: A Handbook of Agile Software Craftsmanship . Martin has teamed up with his colleagues from Object Mentor to distill their best agile practice of cleaning code “on the fly” into a book that will instill within you the values of a software craftsman and make you a better programmer—but only if you work at it. What kind of work will you be doing? You’ll be reading code—lots of code. And you will be challenged to think about what’s right about that code, and what’s wrong with it. More importantly, you will be challenged to reassess your professional values and your commitment to your craft. Clean Code is divided into three parts. The first describes the principles, patterns, and practices of writing clean code. The second part consists of several case studies of increasing complexity. Each case study is an exercise in cleaning up code—of transforming a code base that has some problems into one that is sound and efficient. The third part is the payoff: a single chapter containing a list of heuristics and “smells” gathered while creating the case studies. The result is a knowledge base that describes the way we think when we write, read, and clean code. Readers will come away from this book understanding How to tell the difference between good and bad code How to write good code and how to transform bad code into good code How to create good names, good functions, good objects, and good classes How to format code for maximum readability How to implement complete error handling without obscuring code logic How to unit test and practice test-driven development This book is a must for any developer, software engineer, project manager, team lead, or systems analyst with an interest in producing better code.
Get a copy:
Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
The Gang of Four’s seminal catalog of 23 patterns to solve commonly occurring design problems
Patterns allow designers to create more flexible, elegant, and ultimately reusable designs without having to rediscover the design solutions themselves. Highly influential, Design Patterns is a modern classic that introduces what patterns are and how they can help you design object-oriented software and provides a catalog of simple solutions for those already programming in at last one object-oriented programming language.
- Describes the circumstances in which it is applicable, when it can be applied in view of other design constraints, and the consequences and trade-offs of using the pattern within a larger design
- Is compiled from real systems and based on real-world examples
- Includes downloadable C++ source code that demonstrates how patterns can be implemented and Python
From the preface: “Once you the design patterns and have had an ‘Aha!’ (and not just a ‘Huh?’) experience with them, you won’t ever think about object-oriented design in the same way. You’ll have insights that can make your own designs more flexible, modular, reusable, and understandable – which is why you’re interested in object-oriented technology in the first place, right?”
Get a copy:
Perhaps the only disadvantage of this book is that it’s not beginner-friendly. To be able to understand design patterns, you will need to understand the context they are used under. To help you with this, I have written a beginner-friendly book on design patterns. It doesn’t delve as deep into the detail as the above title. But it provides an easy to follow introduction to those who aren’t familiar with design patterns.
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems by Martin Kleppmann
Data is at the center of many challenges in system design today. Difficult issues need to be figured out, such as scalability, consistency, reliability, efficiency, and maintainability. In addition, we have an overwhelming variety of tools, including relational databases, NoSQL datastores, stream or batch processors, and message brokers. What are the right choices for your application? How do you make sense of all these buzzwords?
In this practical and comprehensive guide, author Martin Kleppmann helps you navigate this diverse landscape by examining the pros and cons of various technologies for processing and storing data. Software keeps changing, but the fundamental principles remain the same. With this book, software engineers and architects will learn how to apply those ideas in practice, and how to make full use of data in modern applications.
- Peer under the hood of the systems you already use, and learn how to use and operate them more effectively
- Make informed decisions by identifying the strengths and weaknesses of different tools
- Navigate the trade-offs around consistency, scalability, fault tolerance, and complexity
- Understand the distributed systems research upon which modern databases are built
- Peek behind the scenes of major online services, and learn from their architectures
Get a copy:
The Clean Coder: A Code of Conduct for Professional Programmers by Robert C. Martin
Programmers who endure and succeed amidst swirling uncertainty and nonstop pressure share a common attribute: They care deeply about the practice of creating software. They treat it as a craft. They are professionals.
In The Clean Coder: A Code of Conduct for Professional Programmers, legendary software expert Robert C. Martin introduces the disciplines, techniques, tools, and practices of true software craftsmanship. This book is packed with practical advice – about everything from estimating and coding to refactoring and testing. It covers much more than technique: It is about attitude. Martin shows how to approach software development with honor, self-respect, and pride; work well and work clean; communicate and estimate faithfully; face difficult decisions with clarity and honesty; and understand that deep knowledge comes with a responsibility to act.
Listeners will learn:
- What it means to behave as a true software craftsman
- How to deal with conflict, tight schedules, and unreasonable managers
- How to get into the flow of coding, and get past writer’s block
- How to handle unrelenting pressure and avoid burnout
- How to combine enduring attitudes with new development paradigms
- How to manage your time, and avoid blind alleys, marshes, bogs, and swamps
- How to foster environments where programmers and teams can thrive
- When to say “no” – and how to say it
- – When to say “yes” – and what yes really means
Great software is something to marvel at: powerful, elegant, functional, a pleasure to work with as both a developer and as a user. Great software isn’t written by machines. It is written by professionals with an unshakable commitment to craftsmanship. The Clean Coder will help you become one of them – and earn the pride and fulfillment that they alone possess.
Get a copy:
Clean Architecture: A Craftsman’s Guide to Software Structure and Design by Robert C. Martin
By applying universal rules of software architecture, you can dramatically improve developer productivity throughout the life of any software system. Now, building upon the success of his best-selling books Clean Code and The Clean Coder, legendary software craftsman Robert C. Martin (“Uncle Bob”) reveals those rules and helps you apply them.
Martin’s Clean Architecture doesn’t merely present options. Drawing on over a half-century of experience in software environments of every imaginable type, Martin tells you what choices to make and why they are critical to your success. As you’ve come to expect from Uncle Bob, this book is packed with direct, no-nonsense solutions for the real challenges you’ll face – the ones that will make or break your projects.
- Learn what software architects need to achieve–and core disciplines and practices for achieving it
- Master essential software design principles for addressing function, component separation, and data management
- See how programming paradigms impose discipline by restricting what developers can do
- Understand what’s critically important and what’s merely a “detail”
- Implement optimal, high-level structures for web, database, thick-client, console, and embedded applications
- Define appropriate boundaries and layers, and organize components and services
- See why designs and architectures go wrong, and how to prevent (or fix) these failures
Clean Architecture is an essential book for every current or aspiring software architect, systems analyst, system designer, and software manager – and for every programmer who must execute someone else’s designs.
Get a copy:
Clean Agile: Back to Basics by Robert C. Martin
Agile Values and Principles for a New Generation
“In the journey to all things Agile, Uncle Bob has been there, done that, and has the both the t-shirt and the scars to show for it. This delightful book is part history, part personal stories, and all wisdom. If you want to understand what Agile is and how it came to be, this is the book for you.” (Grady Booch)
“Bob’s frustration colors every sentence of Clean Agile, but it’s a justified frustration. What is in the world of Agile development is nothing compared to what could be. This book is Bob’s perspective on what to focus on to get to that ‘what could be.’ And he’s been there, so it’s worth listening.” (Kent Beck)
“It’s good to read Uncle Bob’s take on Agile. Whether just beginning, or a seasoned Agilista, you would do well to read this book. I agree with almost all of it. It’s just some of the parts make me realize my own shortcomings, dammit. It made me double-check our code coverage (85.09 percent).” (Jon Kern)
Nearly 20 years after the Agile Manifesto was first presented, the legendary Robert C. Martin (“Uncle Bob”) reintroduces Agile values and principles for a new generation – programmers and nonprogrammers alike. Martin, author of Clean Code and other highly influential software development guides, was there at Agile’s founding. Now, in Clean Agile: Back to Basics, he strips away misunderstandings and distractions that over the years have made it harder to use Agile than was originally intended.
Martin describes what Agile is in no uncertain terms: a small discipline that helps small teams manage small projects…with huge implications, because every big project is comprised of many small projects. Drawing on his 50 years’ experience with projects of every conceivable type, he shows how Agile can help you bring true professionalism to software development.
- Get back to the basics – what Agile is, was, and should always be
- Understand the origins, and proper practice, of SCRUM
- Master essential business-facing Agile practices, from small releases and acceptance tests to whole-team communication
- Explore Agile team members’ relationships with each other, and with their product
- Rediscover indispensable Agile technical practices: TDD, refactoring, simple design, and pair programming
- Understand the central roles values and craftsmanship play in your Agile team’s success
If you want Agile’s true benefits, there are no shortcuts: You need to do Agile right. Clean Agile: Back to Basics will show you how, whether you’re a developer, tester, manager, project manager, or customer.
Get a copy:
Cracking the Coding Interview: 189 Programming Questions and Solutions by Gayle Laakmann McDowell
I am not a recruiter. I am a software engineer. And as such, I know what it’s like to be asked to whip up brilliant algorithms on the spot and then write flawless code on a whiteboard. I’ve been through this as a candidate and as an interviewer.
Cracking the Coding Interview, 6th Edition is here to help you through this process, teaching you what you need to know and enabling you to perform at your very best. I’ve coached and interviewed hundreds of software engineers. The result is this book.
Learn how to uncover the hints and hidden details in a question, discover how to break down a problem into manageable chunks, develop techniques to unstick yourself when stuck, learn (or re-learn) core computer science concepts, and practice on 189 interview questions and solutions.
These interview questions are real; they are not pulled out of computer science textbooks. They reflect what’s truly being asked at the top companies, so that you can be as prepared as possible.
- 189 programming interview questions, ranging from the basics to the trickiest algorithm problems.
- A walk-through of how to derive each solution, so that you can learn how to get there yourself.
- Hints on how to solve each of the 189 questions, just like what you would get in a real interview.
- Five proven strategies to tackle algorithm questions, so that you can solve questions you haven’t seen.
- Extensive coverage of essential topics, such as big O time, data structures, and core algorithms.
- A behind the scenes look at how top companies like Google and Facebook hire developers.
- Techniques to prepare for and ace the soft side of the interview: behavioral questions.
- For interviewers and companies: details on what makes a good interview question and hiring process.
Get a copy: