Skip to content
Discuss a project···
josip
All articlesAug 5, 20235 min readbooks
Field notes

Software Engineering Books Worth Reading

Software Engineering Books Worth Reading

Most programming material is tied to a tool or release cycle. The books below have stayed useful because they explain how programs, computers, and engineering teams work. I have grouped them by the problem they helped me understand.

Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Jay Sussman

SICP uses Scheme to examine abstraction, recursion, state, streams, and interpreters. The language has a small core, so the examples expose the structure of each idea instead of hiding it behind a framework. Working through the exercises improved the way I decompose programs and judge abstractions.

Cover of Structure and Interpretation of Computer Programs

How to Design Programs by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi

HtDP presents program design as a repeatable process. Its design recipes connect data definitions, examples, function signatures, templates, and tests. That sequence is useful for beginners, but it also exposes gaps in the way experienced developers approach unfamiliar domains.

Cover of How to Design Programs

Introduction to Computation and Programming Using Python by John V. Guttag

Guttag uses Python as the vehicle for computational thinking. The book covers algorithms, data structures, complexity, probability, and simulation with enough code to make the ideas testable. It is a practical bridge between an introductory programming course and more formal computer science material.

Cover of Introduction to Computation and Programming Using Python

Concepts, Techniques, and Models of Computer Programming by Peter Van Roy and Seif Haridi

This book compares programming paradigms through a common model. Declarative, object-oriented, concurrent, constraint, and distributed approaches appear as tools with different properties. It helped me separate a problem from the habits of whichever language I happened to be using.

It is also useful interview preparation because it develops the underlying models instead of encouraging memorized solutions.

Cover of Concepts, Techniques, and Models of Computer Programming

The Algorithm Design Manual by Steven S. Skiena

Skiena combines algorithm analysis with a catalog of common problem types. The catalog is the section I consult most often. It helps map a concrete problem to established algorithms and data structures before implementation begins.

Cover of The Algorithm Design Manual

Designing Data-Intensive Applications by Martin Kleppmann

DDIA explains storage engines, replication, partitioning, transactions, batch processing, and stream processing through their tradeoffs. It gives precise language to failures that otherwise get described as vague distributed-systems problems. I also found it useful while preparing for system design interviews.

Cover of Designing Data-Intensive Applications

Compilers: Principles, Techniques, and Tools by Aho, Lam, Sethi, and Ullman

The Dragon Book covers lexing, parsing, semantic analysis, intermediate representations, optimization, and code generation. It is dense and works best as a reference or course text. Reading selected chapters makes compiler errors, language tooling, and generated code easier to understand.

Cover of Compilers: Principles, Techniques, and Tools

The Elements of Computing Systems by Noam Nisan and Shimon Schocken

Also known as Nand2Tetris, this book builds a computer from logic gates through an instruction set, assembler, virtual machine, compiler, and operating system. The projects make the hardware and software boundary concrete. Few books connect so many layers with such a small working system.

Cover of The Elements of Computing Systems

Books about engineering teams

Technical decisions happen inside teams. Communication, feedback, and organizational context determine whether a sound implementation survives contact with a real project.

How to Win Friends and Influence People by Dale Carnegie

Some examples are dated, but the core advice about listening, disagreement, and giving people room to change their minds remains practical. I found it useful for reviews and technical discussions where the relationship matters as much as the immediate decision.

Cover of How to Win Friends and Influence People

Crucial Conversations by Kerry Patterson, Joseph Grenny, Ron McMillan, and Al Switzler

This book focuses on conversations where the stakes are high and participants disagree. Its techniques apply to delayed projects, performance feedback, architectural disputes, and compensation discussions. The useful habit is noticing when safety has disappeared from a conversation and restoring it before continuing.

Cover of Crucial Conversations

The Missing README by Chris Riccomini and Dmitriy Ryaboy

The Missing README covers the working knowledge new engineers rarely find in code documentation: navigating an unfamiliar codebase, asking for help, reviewing code, managing projects, handling incidents, and planning a career. It is concise enough to give to someone joining a professional team.

Cover of The Missing README

The book links in this post are affiliate links. If you buy through one of them, I receive a small fee.

Found this useful? Share on X or send a note.Josip
Read next
More notes.
All articles