Recommended books for software developers
Not all books have the same lifespan
Some people believe that since technology advances so rapidly, books become obsolete the moment they hit the shelves. Although that’s true in some occasions, it ignores an important distinction between different book types.
Knowledge is divided into two categories, information and fundamentals. The former includes specific knowledge that helps people deal with certain problems and usually has a short lifespan, whereas the latter includes broadly applicable knowledge which isn’t constrained to a specific implementation and can be relevant for years.
Especially books around people and behavior can be relevant for a lifetime, as technology changes but people don’t.
Having a solid skill set based on fundamentals can help us learn new technologies on demand, rapidly adapt to new requirements and ultimately live a more fulfilled professional life. Skills based on information have to be built on top of fundamentals.
I have also included a few exceptional books that live in the cross section between information and fundamentals. These are tagged as
Niche and make the most sense for people who work day to day with these specific technologies.
Don’t judge a book by its
cover programming language
Some books that target fundamental knowledge utilize specific programming languages to illustrate their examples. You shouldn’t get discouraged and reject the book if you haven’t worked with that language before, or even if you don’t intend to use it in the future. Fundamental knowledge is widely applicable, and you might notice that reading material about a different programming language makes you a stronger programmer at your main one.
My book collection (Updated Dec 2017)
This is a hand-picked collection of books that have greatly helped me skyrocket my career and become a better professional. I’ve read most of them more than once, as the additional experiences I acquire between reads help me see those books in a different light, so and every single time I get to learn something new. I strongly believe that these books worth your time and deserve a spot at your bookcase.
The Complete Software Developer's Career Guide
I’ve been following John Sonmez’s work for quite some time now, and he never ceases to amaze me. This book is no exception.
Technical knowledge alone is not enough for having a successful and fulfilling career, so this book touches pretty much every aspect of a developer’s life except actual programming. John’s engaging words will help you create a career roadmap, including solid advice on how to plan and execute.
It is a massive 796 pages-long book, comprized of bite-sized chapters that are easy to read and pleasant to digest. If you enjoyed his other masterpiece, Soft Skills, you will love this one as it’s an extensive deep dive into even more soft skill topics.
I’m confident that you will find value in this book regardless of your level of experience. Whether you are just starting or you are a veteran programmer, there will be lots of good information to build your future decisions upon. It’s also one of the best gifts you can make to a fellow programmer.
Clean Architecture: A Craftsman's Guide to Software Structure and Design
Uncle Bob strikes again! I had been waiting for this book for about a year, and had set high expectation. It ended up exceeding my expectations and providing value in areas of technical architecture I was completely oblivious about.
Find what architecture is really about, and most importantly what it’s not about. Learn the difference between architecturally critical elements and mere details. Get to know how important are layers and boundaries, and how to successfully define them. Brush up on numerous design principles for tackling function, component separation, and data management. Finally, become familiar with common architectural failures in the industry, and figure out how prevent and fix them.
Whether you are tasked with designing a new architecture or executing someone else’s design, Clean Architecture is where you want to start from. It’s a pleasant read that I was able to finish cover to cover within just a few days.
Building Microservices: Designing Fine-Grained Systems
Ah, microservices, what a topic! Everybody seems to be doing it, but in their own, “unique” ways.
Sam Newman has put together an excellent guide on microservices, explaining all the ins and outs of moving from monolithic systems to smaller, fine-grained and self-contained services. Of course this approach comes with a whole new set of practices, challenges and plenty of potential pitfalls, which the book does a great job depicting.
Whether you are already working with distributed systems, or you are planning to do in the near future, this book can put things into perspective and give you a good taste of what to expect. It also comes with plenty of external references so you can keep expanding your knowledge on specific subjects if you need to.
|Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems|
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
No technical architect’s library is complete without this gem.
Data is in the heart of most challenges related to systems design today. Architects have plenty of data-centric challenges to tackle, including scalability, consistency, reliability, efficiency, and maintainability. On top of that there are numerous platforms and tools that can be leveraged to achieve each project’s design goals, including relational / document / graph databases, stream / batch processors, web APIs and message brokers.
Martin Kleppmann not only helps you make sense of all the buzzwords, but also guides you through this diverse landscape by doing deep dives of how each piece of technology works under the hood, what are their pros and cons, and under which circumstances it’s a good idea to use them. Apart from the theory, the book comes with plenty of practical advice you can start leveraging on your day to day work right away.
As of today, this is the most well-written, comprehensive and modern book about working with data. It’s destined to become a classic.
Clean Code: A Handbook of Agile Software Craftsmanship
As programmers we tend to optimize for writing code fast, which is unfortunate as we typically spend up to 80% of our time reading and changing existing code. We should instead optimize for reading code fast, and be able to make changes easier without causing regressions. You could say that we need to be producing software that is actually
What is the difference between good and bad code? How bad code can be transformed to good code? What are the best practices for formatting, naming things, writing tests, or implementing error handling without clouding the business logic?
This book is another must-read by Robert C. Martin (aka Uncle Bob). It is highly recommended for programmers, technical architects and team leaders who are interested in producing better, high-quality and highly-effective code.
97 Things Every Programmer Should Know
This is a great collection of tips from a wide range of industry professionals, including Michael Feathers, Pete Goodliffe and Diomidis Spinellis. It provides practical knowledge and principles that can be applied to all types of software projects.
A great advantage of this book is that each chapter is autonomous and relatively short (1-2 pages long), so it’s convenient to read between pomodoro sessions during the day.
Soft Skills: The software developer's life manual
An excellent book from a fantastic author, which became an instant classic the moment it hit the shelves.
John Sonmez does a great job in providing quality advice and unique insights on numerous topics such as career development, personal branding, learning, productivity, finance, even fitness and psychology. It is broken down into many small chapters, which make it easier to read and digest.
I was totally amazed by Soft Skills. It gave me a fresh perspective on professionalism and life in general, and encouraged me to become a better version of myself while thriving as a programmer.
If you have already read and enjoyed Soft Skills, make sure to check out John’s newest hit, The Complete Software Developer’s Career Guide.
The Clean Coder: A Code of Conduct for Professional Programmers (Robert C. Martin)
In this book, legendary software expert Robert C. Martin (Uncle Bob) offers a comprehensive code of conduct for professional programmers, which includes disciplines, techniques, tools and practices of true software craftsmanship. It’s not about code, but rather about the appropriate state of mind to produce high-quality code.
The wisdom contained within those pages has emerged through decades of real-world work experience, not in some vacuum. Of course you don’t have to agree with everything in the book, but I guarantee that this will be one of the most useful reads you will ever come across as a software professional.
Smart and Gets Things Done: Joel Spolsky's Concise Guide to Finding the Best Technical Talent
We all know how terrible the recruiting process of most companies is. Even professional recruitment agencies are more often than not unable to evaluate talent; they mostly base their process on matching keywords or look for X years of experience on technologies that don’t even exist for that long. Joel shows us how the recruiting process is meant to be, and what recruiters and hiring managers need to do to fix it.
Why would this be your concern as a programmer, you ask. Knowing what the recruitment process is meant to be can help you identify companies that do it right. Chances are that these will be great places to work at, not only because they will know their stuff, but also because your colleagues will have been hired through the same reliable process.
On top of that, you will learn how to ask the right questions during the interview, and identify red flags that will help you avoid wasting time at a workplace that is not aligned with what you are looking for.
The Pragmatic Programmer
This was the first technical book I ever read, back in the early 2000’s. I wasn’t quite ready for it then, but some of its concepts stuck in my head and helped me become who I am today.
Instead on focusing on code, the authors present a number of practical approaches they have found to work in real world scenarios, accompanied with solid advice and outstanding analogies.
As Ward Cunningham, the father of wiki, said:
If I’m putting together a project, it’s the authors of this book that I want… And failing that I’d settle for people who’ve read their book.”
Code Complete: A Practical Handbook of Software Construction
This book made me realize, among other things, that quality assurance in software is not just a standard procedure that takes place towards the end of the development cycle, but rather a continuous effort which starts from the very beginning, at the stage of defining the problem and gathering requirements.
Its various concepts are described using colorful metaphors so that they’re easier to comprehend and simpler to explain to a non-technical audience, such as business analysts and project managers.
Code Complete 2 is one of the best investments you can make if you really care about your craft.
The Art of Unit Testing: with examples in C#
What is legacy code? According to Michael Feathers, it’s code without tests. Even if it was written yesterday! If you write legacy code for a living, this book is for you.
The Art of Unit Testing will get you started from zero, and teach you enough to be dangerous. You will learn about a number of different testing approaches, their pros and cons, and how to choose which one you need on a case by case basis. The examples might be in C#, but writing good tests goes beyond the programming language.
xUnit Test Patterns: Refactoring Test Code
Automated tests are right at the center of agile software development and the DevOps culture. Tests have your back, and given they are done right, they can help you move faster and more effectively by taking huge risks out of the equation.
This book by Gerard Meszaros is the bible of software automated testing, and can greatly help you step-up your engineering game. It describes a total of 68 well-defined patterns for writing better, more readable, and much more maintainable tests. It also depicts a number of common code smells of automated tests, and provides detailed guidance on how to refactor and end up with a good solution.
There are code samples in several programming languages, and although the book is focused on the xUnit family of testing frameworks, the patterns and practices it contains apply to several other modern testing frameworks, such as NUnit, RSpec, JBehave, Fit and Fitnesse.
Refactoring: Improving the Design of Existing Code (Object Technology Series)
Martin Fowler introduces a series of refactoring techniques that focus on improving the internal design of existing code without changing its external behavior. Each refactoring type is given a name and it’s described in small, easy to comprehend steps.
My favorite quote from the book is:
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
The book’s code examples are presented in Java, but the concepts illustrated are 100% applicable to any object-oriented language.
Head First Design Patterns
Design patterns is one of the most essential concepts of software engineering. Essentially, some of our every-day problems in software design have already been solved by others. Instead of reinventing the wheel, we can tap into the experience tank of those people and find solutions that we probably wouldn’t think by ourselves.
For people who work in large corporations, their boss or client may not want to see this book on their desk, mostly because it’s playful and funny, it uses an informal style of communication, and overall it doesn’t look very professional, but it is! I strongly believe that it’s the best choice one has to get introduced to the mindset of designing software based on well-defined patterns.
The book’s examples are written in Java, but the designs are applicable to every OOP language, especially to the strongly-typed ones.
Design patterns: elements of reusable object-oriented software
For the more experienced engineers, I recommend the all-time-classic Design patterns : elements of reusable object-oriented software, written by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides, a group of authors also known as The Gang of Four.
I made several attempts to read this book over the last few years, just to find out that I wasn’t ready yet. Only after reading Head First Design Patterns and getting some more experience in the field I was finally able to read and understand the GoF book. I believe that no one should get discouraged if their initial attempts fail.
The book’s examples are written in C++, but the designs are applicable to every OOP language, especially to the strongly-typed ones.
Design Patterns in Ruby
Russ Olsen has done a great job at adapting fourteen commonly-used GoF design patterns to the Ruby language. He doesn’t just list the patterns one by one, rather he presents a real-world problem, builds an initial solution for it, outlines its shortcomings, and then refactors it using design patterns.
The Lean Startup
There is incredible failure that precedes every entrepreneurial success. Even the most promising idea can be doomed from day one if the entrepreneur is not familiar with a suitable process needed to turn that idea into a successful company.
In The Lean Startup, Eric Ries lays out a scientific method for building a sustainable business and minimizing the time needed for a desired product to reach the customer’s hands. This method provides a solid foundation for driving a startup, understanding when to change course (pivot), when to persevere and ultimately learning how to achieve growth in the fastest pace possible, along with avoiding the waste of development talent, energy, and effort.
It’s a marvelous book that have totally transformed my way of thinking in terms of designing a new product or adding features to an existing one. I’ve also written an extensive review on the Lean Startup.
The Accidental Creative: How to Be Brilliant at a Moment's Notice
You go to work each day tasked with (1) inventing brilliant solutions that (2) meet specific objectives by (3) defined deadlines. If you do this successfully you get to keep your job. If you don’t, you get to work on your resume. The moment you exchange your creative efforts for money, you enter a world where you will have to be brilliant at a moment’s notice. (no pressure, right?)
Spot on, Todd Henry!
Designing and creating software is a highly creative process, one that makes us squeeze our brain on a daily basis. The big question is, is it possible that you can stay creative at a sustainable pace? As it turns out, creativity is a muscle, hence the more you train it the best it performs. Left untrained for long and you can find yourself struggling.
This book is a great tune-up between the two halves of the brain, can make a big difference on how you deal with your day to day work, and can also help you formulate habits that keep your creativity muscle alive and kicking.
Steal Like An Artist
OK, this book is not actually about stealing but rather finding inspiration and fuel creativity. I’ve read Steal like an artist more than three times so far, each of them in one hit. It’s short and perfect.
Software development is a highly creative process. Sometimes that creativity is greatly impaired by stress, lack of self-confidence, deadlines or extremely demanding bosses/clients. The truth is that nobody is able to force creativity, but they can certainly invite it, and that’s the whole essence of this book.
Show Your Work!: 10 Ways to Share Your Creativity and Get Discovered
Austin Kleon never disappoints. His first book, Steal like an artist, is one of the biggest sources of inspiration I’ve ever come across. It was only natural that his next book would also a blast, and this time is about sharing the results of your inspiration with the world.
We love our work, we’re passionate about it, but it’s often the case that people around us don’t know or understand exactly what that is. This book will help you tell your story, get your message across and get discovered. Don’t wait any longer, show your work!
This is the definite guide for Human-Computer Interaction (HCI). It outlines all the principles involved in designing minimal, effective, appealing and delightful interfaces for interactive services and devices. It’s also an ideal resource for learning about the skills required for interaction design, human computer interaction, information design, web design, and ubiquitous computing.
Anyone who is involved in the process of designing new user experiences or transforming existing ones should definitely read Interaction Design, beyond human-computer interaction, and most software developers are constantly involved in such activities.
Agile Principles, Patterns, and Practices in C# (Robert C. Martin)
This is the bible of agile software development. Robert C. Martin (aka Uncle Bob) presents a variety of case studies explaining the fundamentals of agile development and extreme programming. Every single technique is proven in real-world scenarios, and it is accompanied by numerous code examples.
Apart from agile fundamentals, the book also discusses various other topics, such as planning iterations & releases, TDD, refactoring, unit testing, acceptance testing, pair programming, and design smells.
Agile Principles, Patterns, and Practices in C# is highly recommended for every software developer and technical architect, regardless of whether they work in C# or some other language.
Pro ASP.NET Core MVC
ASP.NET Core MVC is an open-source and cross-platform web framework that promotes separation of concerns and clean code architecture. It can be directly compared to Ruby on Rails and NodeJS. Having developed solutions on all of these frameworks, I find that I’m much more productive and happy with ASP.NET.
Adam Freeman, is an excellent author who never ceases to amaze me. He has a unique way of transmitting his knowledge and making it stick to the reader’s mind. This book is excellent for getting you started with the MVC pattern and how it is utilized within the ASP.NET Core MVC framework. It is a must-read for anyone that works or intends to develop web applications or APIs using the Microsoft stack.
C# in Depth, 4th Edition
This is THE book to read about C#. It describes all of the core features of the language in great detail, from every-day-use to more advanced ones. It also provides some historical information about each of them.
I wouldn’t recommend it as an introductory book on C#, as it is addressed towards more intermediate developers. Beginning C# Object-Oriented Programming by Dan Clark would be a more suitable choice for that cause.
Jon Skeet always makes my brain melt. His deep knowledge about C# is reflected both in this book, as well as in his Stack Overflow profile.
Programming F# 3.0: A Comprehensive Guide for Writing Simple Code to Solve Complex Problems
In 2017 I got to work extensively with F# and functional programming, and I can say with confidence that this is by far the best book on F# out there.
In contrast to what you can typically find on the internet about functional programming, Chris Smith gives you the no bullshit version. No big bloated words, no false promises.
You will learn about F#’s unique characteristics and core syntax, including Object Oriented and Imperative styles. You will see how you can take advantage of advanced features, such as computational expressions and tail recursion. You will become familiar with parallel and asynchronous programming; you will also figure out the difference between the two. And these are just a few of the topics covered in the book.
If you would like to find out more about F#, how it fits into the .NET ecosystem, and what really makes it tick, this book is exactly what you’re looking for.
Peopleware: Productive Projects and Teams (3rd Edition)
The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition)
User Stories Applied: For Agile Software Development
CLR via C# (4th Edition) (Developer Reference)
Working Effectively with Legacy Code
Real-World Functional Programming: With Examples in F# and C#
Pro ASP.Net MVC 5 (Expert's Voice in ASP.Net)
Since ASP.NET Core MVC is released and production ready, this book is now only recommended for those who still work with ASP.NET MVC 5, based on the classic .NET framework.
The MVC 5 framework has long term support from Microsoft and will still be around for years, but for any greenfield development the suggestion is to use ASP.NET Core MVC.