Self-Paced Learning: Books

August 14, 2020

Books to help you with your career in software. The first entry in the self-paced learning series aimed to help you continue your education at your own pace.


After working on software as an individual contributor, tech lead, manager, and unofficial product manager, I have read many books on my own with the hopes of being better at my craft and, sometimes, just trying to to make sense of things. Needless to say, not all of those books were as valuable as others and sometimes I read a book at the wrong time. I want to share some of the books that were the most valuable and give some guidance to when I think one should read them.

Early in my career I found myself over indexing on technical books. I spent a lot of time studying algorithms, design patterns, systems, and more. While these strengthened my understanding in these areas, they didn’t give me all the information I needed to be successful in my career. They didn’t help me contribute to making a successful product or help me build and maintain a healthy team.

Later in my career I realized this imbalance and tried to correct for it. You should see this correction reflected in my recommendations below. I would encourage you, just as I have anyone I’ve had the opportunity to mentor or manage, to find a balance that works for you and your career aspirations.

NOTE While I may recommend reading a book framed around college, note that I don’t think you need to go to college to read any of these books college. Nor do I think you need to go to college to have a successful career in software. I merely use college a point of reference based on my personal experience.


The Pragmatic Programmer: From Journeyman to Master

The Pragmatic Bookshelf | #Fundamentals

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. It covers topics ranging from personal responsibility and career development to architectural techniques for keeping your code flexible and easy to adapt and reuse.
Source: Amazon

If you decide to pursue programming as a hobby or career, read The Pragmatic Programmer. It covers a variety of topics that someone early in their career may not even realize they should think about (e.g use a single editor well) and establishes a good baseline of said topics to help start a programmer down a path towards success.

The publisher of The Pragmatic Programmer, The Pragmatic Bookshelf is great, but not infallible, source for literature on a variety of topics; similar to how one may go to O’Reilly,

Soft Skills: The software developer’s life manual

Amazon | #Fundamentals

Soft Skills: The software developer’s life manual is a guide to a well-rounded, satisfying life as a technology professional. In it, developer and life coach John Sonmez offers advice to developers on important “soft” subjects like career and productivity, personal finance and investing, and even fitness and relationships. Arranged as a collection of 71 short chapters, this fun-to-read book invites you to dip in wherever you like. A Taking Action section at the end of each chapter shows you how to get quick results. Soft Skills will help make you a better programmer, a more valuable employee, and a happier, healthier person.

Source: Amazon

I believe this book should be part of the software education curriculum. There are countless algorithm and design books, but this book gives you guidance about your career. I’d recommend reading it before graduating college or early in your career, but various parts can prove useful to those well into their career.

Though it may seem tedious and break your reading flow, I’d strongly encourage you to do the Taking Action sections at the end of each chapters while the subject is fresh in your mind. Seriously, do it.

A Philosophy of Software Design

Amazon | #Fundamentals

This book addresses the topic of software design: how to decompose complex software systems into modules (such as classes and methods) that can be implemented relatively independently. The book first introduces the fundamental problem in software design, which is managing complexity. It then discusses philosophical issues about how to approach the software design process, and it presents a collection of design principles to apply during software design. The book also introduces a set of red flags that identify design problems. You can apply the ideas in this book to minimize the complexity of large software systems, so that you can write software more quickly and cheaply.
Source: Amazon

Two things that stand out to me about this book:

  1. The book offers technical guidance while being technology agnostic. You can take the learnings for this book and apply it to many things you’ll work on throughout your career.
  2. By being technology agnostic, the books arms you with language that you could use with others working in other technical domains. Having a common language and philosophy across technical domains in your organization can prove to be invaluable.

Ideally this book would be read by a new team together when they trying to establish the principles that will guide them each and every day.

But How Do It Know? - The Basic Principles of Computers for Everyone

Amazon | #Fundamentals

For the first time, this book thoroughly demonstrates each of the basic principles that have been used in every computer ever built, while at the same time showing the integral role that codes play in everything that computers are able to do.

It cuts through all of the electronics and mathematics, and gets right to practical matters. Here is a simple part, see what it does. Connect a few of these together and you get a new part that does another simple thing. After just a few iterations of connecting up simple parts - voilà! - it’s a computer. And it is much simpler than anyone ever imagined.
Source: Goodreads

But How Do It Know? book is helpful if you have been away from the metal for too long and want a refresher or you haven’t learned much about the internal workings of a computer.

The book starts with the simplest components (well, actually the book starts with a story) and builds from there. It continues until you get to a functional computer.

Head First Design Patterns: A Brain-Friendly Guide

O’Reilly | #DesignPatterns

At any given moment, someone struggles with the same software design problems you have. And, chances are, someone else has already solved your problem. This edition of Head First Design Patterns—now updated for Java 8—shows you the tried-and-true, road-tested patterns used by developers to create functional, elegant, reusable, and flexible software. By the time you finish this book, you’ll be able to take advantage of the best design practices and experiences of those who have fought the beast of software design and triumphed.
Source: O’Reilly

For design patterns, I used to recommend Design Patterns: Elements of Reusable Object-Oriented Software to everyone. Over time I started to notice that most people didn’t finish the book or even start it. I’ll admit the Design Patterns book arguably serves as a better reference book than Sunday afternoon read, but I does have a wealth of information.

Head First Design Patterns does its best to present material equivalent to Design Patterns in a fresh and engaging way. The book not only includes examples, but has many exercises for you to do, further reinforcing what you are learning.

Design Patterns are helpful to learn early in your career after you’ve had some experience. A word of warning, as you start learning design patterns do not fall victim to misusing them!

Grokking Algorithms: An illustrated guide for programmers and other curious people

Amazon | #Algorithms

Grokking Algorithms is a fully illustrated, friendly guide that teaches you how to apply common algorithms to the practical problems you face every day as a programmer. You’ll start with sorting and searching and, as you build up your skills in thinking algorithmically, you’ll tackle more complex concerns such as data compression and artificial intelligence. Each carefully presented example includes helpful diagrams and fully annotated code samples in Python.
Source: Amazon

Algorithms aren’t magic and don’t have to be intimidating. Grokking Algorithms serves as a solid introduction to algorithms. It helps the reader get a base understanding of the subject and overcome any doubts they may have that they can’t understand them or use them.

Data Structures and Algorithms in Java

Amazon | #DataStructures #Algorithms

Data Structures and Algorithms in Java, Second Edition is designed to be easy to read and understand although the topic itself is complicated. Algorithms are the procedures that software programs use to manipulate data structures. Besides clear and simple example programs, the author includes a workshop as a small demonstration program executable on a Web browser. The programs demonstrate in graphical form what data structures look like and how they operate. In the second edition, the program is rewritten to improve operation and clarify the algorithms, the example programs are revised to work with the latest version of the Java JDK, and questions and exercises will be added at the end of each chapter making the book even more useful.
Source: Amazon

If you didn’t use Data Structures and Algorithms in Java in a course in college already, I’d recommend giving it a read early in your career.

I found the explanations and examples in this book to be second to none. I usually sum the book up as, if you understand everything in this book, you shouldn’t have to worry about a typical coding challenge. So, the book can be handy if you’re looking to get a new job too :)

Domain-Driven Design: Tackling Complexity in the Heart of Software

Amazon | #Domain

The software development community widely acknowledges that domain modeling is central to software design. Through domain models, software developers are able to express rich functionality and translate it into a software implementation that truly serves the needs of its users. But despite its obvious importance, there are few practical resources that explain how to incorporate effective domain modeling into the software development process. Domain-Driven Designfills that need.
Source: Goodreads

Maybe it is a consequence of the types of article I read, but I can’t go a week without seeing a reference to the concepts covered in this book. A common one I see is bounded context.

Domain-Driven Design teach how to design sustainable and understandable software based on the software’s domain. It is much more than UML diagrams. The book gives you language and guidance to designing and applying a domain to software.

Similar to Soft Skills, I think Domain-Driven Design should be required reading in every software curriculum. We’d probably have less “helper” classes.

Building Microservices: Designing Fine-Grained Systems

Amazon | #DistributedSystems

Distributed systems have become more fine-grained in the past 10 years, shifting from code-heavy monolithic applications to smaller, self-contained microservices. But developing these systems brings its own set of headaches. With lots of examples and practical advice, this book takes a holistic view of the topics that system architects and administrators must consider when building, managing, and evolving microservice architectures.
Source: Amazon

I truly believe any team working on distributed systems would benefit from having a baseline understanding of Building Microservices.

It is a very approachable book for someone who isn’t well versed in microservices. For those that feel they have some expertise, I am confident you will find some learnings and at the very least language around some best practices.

I view this book as an optional primer for Designing Data-Intensive Applications.

Designing Data-Intensive Applications

Amazon | #DistributedSystems

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.
Source: Amazon

Let me start by saying this is one of my favorite technical books. I read it like a sci-fi novel… one that I took notes of as I went through it.

Designing Data-Intensive Applications covers a breadth of different technologies, ties them together, and goes into enough depth to feel that you have a foundational understanding. All the while providing the reader with the principles to evaluate technologies that relate to distributed applications. From an execution standpoint it is able to be read front to back and you can jump into a subject and get references.

It is a strong recommendation you are serious about being a senior backend engineer and a must read for a principal backend engineer architect.

Patterns of Enterprise Application Architecture

Amazon | #DistributedSystems

Patterns of Enterprise Application Architectureis written in direct response to the stiff challenges that face enterprise application developers. The author, noted object-oriented designer Martin Fowler, noticed that despite changes in technology—from Smalltalk to CORBA to Java to .NET—the same basic design ideas can be adapted and applied to solve common problems. With the help of an expert group of contributors, Martin distills over forty recurring solutions into patterns. The result is an indispensable handbook of solutions that are applicable to any enterprise application platform.
Source: Amazon

Don’t let the Enterprise scare you. Patterns of Enterprise Application Architecture can prove useful to anyone working on a project more complicated than Hello, World.

I view this book as the systems equivalent to Design Patterns: Elements of Reusable Object-Oriented Software. It is a great resource to have when you are designing or evaluating a distributed system.

Clean Code: A Handbook of Agile Software Craftsmanship

Amazon | #Mastery

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.
Source: Amazon

Clean Code contains many best practices and examples of how to design clean, maintainable, object-oriented code. Not sure what clean code is or how to identify it? Don’t worry, the book will cover that too.

I recommend this book to junior and mid-level engineers.

Refactoring: Improving the Design of Existing Code

Amazon | #Mastery

As the application of object technology—particularly the Java programming language—has become commonplace, a new problem has emerged to confront the software development community. Significant numbers of poorly designed programs have been created by less-experienced developers, resulting in applications that are inefficient and hard to maintain and extend. Increasingly, software system professionals are discovering just how difficult it is to work with these inherited, non-optimal applications. For several years, expert-level object programmers have employed a growing collection of techniques to improve the structural integrity and performance of such existing software programs. Referred to as refactoring, these practices have remained in the domain of experts because no attempt has been made to transcribe the lore into a form that all developers could use… until now. In Refactoring: Improving the Design of Existing Software, renowned object technology mentor Martin Fowler breaks new ground, demystifying these master practices and demonstrating how software practitioners can realize the significant benefits of this new process.
Source: Goodreads

Not everything is greenfield and you may be surprised how long software sticks around. Refactoring is something you’ll do time and time again in your career. This book serves as a good reference to understanding why and how to refactor, all the while keeping your software working and you and your team’s sanity.

I recommend this book to junior and mid-level engineers.

The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win

Amazon | #Operations #Management

In a fast-paced and entertaining style, three luminaries of the DevOps movement deliver a story that anyone who works in IT will recognize. Readers will not only learn how to improve their own IT organizations, they’ll never view IT the same way again.
Source: Amazon

The Phoenix Project is a story (yes, story) of how an IT manager improves his organization by applying the Three Ways as described in The DevOps Handbook. While the characters and delivery can be campy, the problems and solutions are very real. If you organization is struggling with poorly received products, missing deadlines, and/or degraded quality, this book has some relevant lessons for you.

This book is helpful for leads looking to reason about Devops.

Site Reliability Engineering

Google - Site Reliability Engineering | #Operations

This book is a collection of essays by one company, with a single common vision. The fact that the contributions are aligned around a single company’s goal is what makes it special. There are common themes, and common characters (software systems) that reappear in several chapters. We see choices from different perspectives, and know that they correlate to resolve competing interests. The articles are not rigorous, academic pieces; they are personal accounts, written with pride, in a variety of personal styles, and from the perspective of individual skill sets. They are written bravely, and with an intellectual honesty that is refreshing and uncommon in industry literature. Some claim “never do this, always do that,” others are more philosophical and tentative, reflecting the variety of personalities within an IT culture, and how that too plays a role in the story. We, in turn, read them with the humility of observers who were not part of the journey, and do not have all the information about the myriad conflicting challenges. Our many questions are the real legacy of the volume: Why didn’t they do X? What if they’d done Y? How will we look back on this in years to come? It is by comparing our own ideas to the reasoning here that we can measure our own thoughts and experiences.
Source: Google - Site Reliability Engineering

This should be required reading for anyone doing anything related to being on call to support a system and strongly recommended reading for anyone who ships work to production.

I’ve used many of these accounts and practices to help improve and expedite my team’s progress towards operational excellence.

The Design of Everyday Things

Amazon | #Design

The Design of Everyday Things shows that good, usable design is possible. The rules are simple: make hings visible, exploit natural relationships that couple function and control, and make intelligent use of constraints. The goal: guide the user effortlessly to the right action on the right control at the right time.
Source: Amazon | #Design

Whether you are making websites or APIs for internal or external customers, usability can be a big factor in whether your solution succeeds or fails. The Design of Everyday Things offered me a fresh perspective on things I interact with everyday and taught me some fundamental design principles.

Peopleware: Productive Projects and Teams

Amazon | #Management #Leadership

Two of the computer industry’s most popular authors and lecturers return with a new edition of the software management book that started a revolution. With humor and wisdom drawn from years of management and consulting experience, DeMarco and Lister demonstrate that the major issues of software development are human, not technical — and that managers ignore them at their peril.

Peopleware shows you how to cultivate teams that are healthy and productive. The answers aren’t easy — just incredibly successful.
Source: Goodreads

Peopleware should be essential reading for any aspiring or current technical lead or manager. It is opinionated and harps on some thing to the point of nausea (office layout), but the book provides guidance, backed by years of experience and research, on how to establish an environment in which your team can succeed.

This is a book that I find myself rereading every year or so as a refresher.

The Five Dysfunctions of a Team

Amazon | #Management #Leadership

Throughout the story, Lencioni reveals the five dysfunctions which go to the very heart of why teams even the best ones-often struggle. He outlines a powerful model and actionable steps that can be used to overcome these common hurdles and build a cohesive, effective team. Just as with his other books, Lencioni has written a compelling fable with a powerful yet deceptively simple message for all those who strive to be exceptional team leaders.
Source: Amazon

The Five Dysfunctions of a Team is a story, similar to The Phoenix Project, that follows a freshly minted CEO facing the challenge of bringing together the poorly aligned leadership to save the company. Along the way, the author delivers their leadership principles for you to (ideally) use in your leadership position.

I read this book very early in my career and it didn’t really resonate. Reading it again while in a leadership position, where some things didn’t seem quite right, helped me recognize some of the problems and address them.

Source: The Five Dysfunctions of a Team - Wikipedia

The No Asshole Rule: Building a Civilized Workplace and Surviving One That Isn’t

Amazon | #Leadership

The definitive guide to working with — and surviving — bullies, creeps, jerks, tyrants, tormentors, despots, backstabbers, egomaniacs, and all the other assholes who do their best to destroy you at work.
Source: Amazon

I have to admit that on occasion I still think of the hypocrisy and condescending remarks of DBA I worked with early in my career. I came to believe that working with toxic people was just something I’d have to accept in my career. And it is, to some extent. The No Asshole Rule reassures you that you are not alone and provides you guidance on how to deal with such people and work towards an environment without… well, assholes.

The Lean Startup

Amazon | #Entrepreneur

The Lean Startup approach fosters companies that are both more capital efficient and that leverage human creativity more effectively. Inspired by lessons from lean manufacturing, it relies on “validated learning”, rapid scientific experimentation, as well as a number of counter-intuitive practices that shorten product-development cycles, measure actual progress without resorting to vanity metrics, and learn what customers really want. It enables a company to shift directions with agility, altering plans inch by inch, minute by minute.
Source: Amazon

I think the description does a good job of summing up this book. I’ll add that The Lean Startup is for anyone interested in being more than a worker drone and positively contributing to the delivery of a meaningful product.

The Mom Test

Amazon | #Product #Entrepreneur

Talking to customers is one of the foundational skills of both Customer Development and Lean Startup. We all know we’re supposed to do it, but nobody seems willing to admit that it’s easy to screw up and hard to do right. This book is going to show you how customer conversations go wrong and how you can do better.
Source: Amazon

People usually scoff at the title when I recommend The Mom Test to them. But if you are talking to customers, I’d consider this required reading. The book covers how to make the most out of your customer conversations by asking the right questions to the right people.

The Mom Test helped me realize that many of the customer meetings I was participating in were mostly telling us what we wanted to hear (or nothing) and not what we needed to hear. Incorporating some of the practices from this book helped us get more valuable information, reduce the number of customer meetings, and get better results.

Forgive me. I’m starting to sound a bit like an infomercial.

Measure What Matters: How Google, Bono, and the Gates Foundation Rock the World with OKRs

Amazon | #Strategy

In Measure What Matters, Doerr shares a broad range of first-person, behind-the-scenes case studies, with narrators including Bono and Bill Gates, to demonstrate the focus, agility, and explosive growth that OKRs have spurred at so many great organizations. This book will help a new generation of leaders capture the same magic.
Source: Amazon

If you use OKRs or are thinking about using them, this book is an essential read. If you are looking for a tool to help set and track goals at work or even in your personal life, this book has one possible solution for you. The book teaches you what OKRs are, how they came to be, and covers different case studies relating to OKRs.

I must admit, I wish the book spent less time trying to convince me to use OKRs. I mean I bought the book. But, the book will give you a solid foundational understanding of OKRs to better enable you to use them successful.

For those that don’t want to commit to reading an entire book on OKRs, I recommend watching Startup Lab workshop: How Google sets goals: OKRs - YouTube. It is an hour and twenty minutes long.

Sprint: How to Solve Big Problems and Test New Ideas in Just Five Days

Amazon | #Product

A practical guide to answering critical business questions, Sprint is a book for teams of any size, from small startups to Fortune 100s, from teachers to nonprofits. It’s for anyone with a big opportunity, problem, or idea who needs to get answers today.

Coming from practicing _traditional_Agile, this disrupted my complacency around how to do things. The book covers prototyping a customer-facing product in one week. Including how to run meetings, make decisions, and brainstorm.

I must admit, I haven’t done a true Sprint as defined in the book. But, I have found success in taking parts of the process and incorporating them into my team processes.

I’d recommend this book to a team lead on a product team.

A Programmer’s Introduction to Mathematics

Amazon | #Mathematics

A Programmer’s Introduction to Mathematics uses your familiarity with ideas from programming and software to teach mathematics. You’ll learn about the central objects and theorems of mathematics, including graphs, calculus, linear algebra, eigenvalues, optimization, and more.
Source: Amazon

If you’re a self-taught engineer with minimal formal higher-level mathematics education, I’d recommend this introduction to mathematics.

A Programmer’s Introduction to Mathematics helps programmers have the mathematics knowledge to prepare them for many of the advanced applications they’d come across in their career.

When going though the book, make sure you do the exercises to reinforce and validate your learnings.

Statistics in Plain English

Amazon | #Mathematics

This introductory textbook provides an inexpensive, brief overview of statistics to help readers gain a better understanding of how statistics work and how to interpret them correctly. Each chapter describes a different statistical technique, ranging from basic concepts like central tendency and describing distributions to more advanced concepts such as t tests, regression, repeated measures ANOVA, and factor analysis. Each chapter begins with a short description of the statistic and when it should be used. This is followed by a more in-depth explanation of how the statistic works. Finally, each chapter ends with an example of the statistic in use, and a sample of how the results of analyses using the statistic might be written up for publication. A glossary of statistical terms and symbols is also included. Using the author’s own data and examples from published research and the popular media, the book is a straightforward and accessible guide to statistics.
Source: Amazon

Whether A/B testing or trying to make sense of operational metrics, Statistics in Plain English helps establish a baseline understanding of statistics in approachable manner. I’d recommend this book to any engineer on a team, but especially to those practicing experimentation.

Statistics in Plain English also serves as a good reference book for times when you can’t quite recall something like a t Test is and when to use it.


Josh Aaseby
Software Engineer