Software Engineering Books to Read in 2020
By: André Pitombeira
Tags: Books, Programming, Software Engineering, Software Development

Software development is constantly changing and it is difficult to catch up with so many things going on. There are so many resources out there to help you to learn anything you want, but is it everything worth reading?

This is a difficult question and it depends on your learning goals. But if you’re like me and you prefer to really understand how things work. I’d like to recommend a couple of books I read in the last months that improved my skill set and gave me a different perspective on how to build things right and with quality.

Design Data-Intensive Applications

This book is currently considered one of the main references for Distributed Systems. The author does an amazing job of describing the main issues you might face while developing a distributed application. It covers everything you need to know about scalability, consistency, reliability, efficiency, and maintainability. It presents some trade-offs between different technologies and tools that will help you decide what is more suitable for your application. This combination of theoretical knowledge with pragmatism makes it a must-read book.

Building Microservices

Distributed systems have become quite popular in the last years and the microservices architecture became mainstream. But microservices are not so easy as some people say. In order to take full advantage of this architecture, we have to take into consideration many aspects, such as testing, deploying, monitoring, organization, and so on. This book gives an overview of what needs to be considered and it has numerous practical advice on how to get microservices right.

Continuous Delivery

The software release process is for some organization a painful activity. This book introduces the principles and technical practices to enable any organization to take advantage of incremental releases without many hassles. It introduces a systematical approach that when implemented correctly can leverage an organization by having value being aggregated frequently and with high quality.

Release it

Testing is an essential activity for software development, but no matter how much effort and investments you make in your testing infrastructure you won’t be able to reproduce all the possible scenarios your software face in production. Having this in mind this book presents the main issues your software might face in production and gives a toolbox of techniques you can use to minimize the impact when something goes wrong and your company ends up having a big financial loss.

Building Evolutionary Architectures

The software development process is a difficult activity and to get the architecture right you have to take into consideration many businesses and technical aspects. On top of that, you have technologies evolving all the time, new paradigms, organization changes, and different business requirements. This book shows you how you can design your architecture to embrace change and still keep your system decoupled and easy to evolve.

I ❤️ Logs

This is a short book from the LinkedIn principal engineer Jay Kreps. It shows how logs can be used in databases and distributed systems. It has many practical examples and it demonstrates how logs are essential to intensive data systems, real-time stream processing, and data integration. This book is a must-read if you’re working with Kafka.

Remote Work

Due to the recent events in the world, many people started to work from home for the first time. I believe that for many of us this is not something easy because we’re not used to that. It is, however, not so difficult to learn how to properly do this. In this short and entertaining book from the folks at Basecamp. You can get many tips and strategies that you and your colleagues can use to work effectively from home.

Refactoring 2nd edition

This is a classic software engineering book and it requires no introduction. The second edition has examples in JavaScript and it is thus smaller and easier to follow than the previous edition in Java. This is a must-read for any developer who cares about code quality.

Accelerate

Organizations face constantly changes due to new technologies, paradigms, architectures, practices, methodologies, and so on. But not necessarily everything that is new is better. Given that, this book collects scientific researches on software development productivity to show what really brings value to businesses. It shows that performance can be measured and what factors can increase productivity. These findings are presented in a way that makes it easier for anyone to apply them to their organization.

Composing Software

A systematic approach for programming consists of breaking down complex problems into small ones and composing small pieces of code. This seems easy, but in practice, it turns out not so intuitive. This book brings many techniques you can use to help you to better compose software. It goes through the main concepts of Object-Oriented and Functional programming in JavaScript. It has many examples that show you when you can use those concepts and the advantages it brings to your code. Thereby, you can improve your toolset and use different techniques according to the problems you’re working on.

I hope you enjoy your reading and leave a comment if you have a suggestion for a book 🤓