Table of Contents
Over the past 20+ years, I have been avidly collecting technical books on writing code, management, etc. One of my pet projects is to get people around me to read some of these when I see an opportunity to share what I learned. Here they are !
The mythical man-month⌗
The tale of how the IBM-360 systems got built. A timeless classic on what makes software projects late.
The Art Of Project Management⌗
A look at every facet of managing software projects and the people who build them. This book contains a very good bibliography that inspired a lot of the references here.
Quality Software Management⌗
Gerald M. Weinberg:
- vol 1: Systems Thinking,
- vol 2: First-Order Measurement,
- vol 3: Congruent Action
- vol 4: Anticipating Change
Dry but always meaningful context about how to balance delay, features, and quality in the face of changing business parameters, and humans.
Software Engineering Economics⌗
Super dry, dated, but still interesting to understand how things worked back in the days of the waterfall model
The ten-day MBA⌗
If you do you have any financial background, this is a great introduction to the basics of finance. It should help engineers who would like to understand why business people seem to always pick the wrong side of an argument.
The innovator’s dilemma⌗
A classic on how to manage innovation in changing markets.
Dealing with Darwin⌗
Another classic on how to manage business development in different phases of an evolving market.
The lean startup⌗
A classic on how to build an MVP and iterate to success (?)
Understand how sales teams work.
The hard thing about hard things⌗
The author shares annecdotes about his experience building a successful business. I did not go down that path all the way down but I can tell that a lot of it is true, sound advice.
The art of the long view⌗
Learn how to understand the forces at play around you that shape the world around you long term.
High output management⌗
Only the paranoid survive⌗
The soul of a new machine⌗
This book won a Pulitzer prize in 1982: it tells the story of how a 32-bit minicomputer was built by a small team of engineers led by Tom West. He became a model for what I thought a great manager should be.
Back into the Storm⌗
Maybe the reason I feel so ambivalent about this book is because I am probably more similar to Bil Herd than I’d like to admit. It’s still a fascinating look into how seemingly impossible projects still hapen to be delivered on time.
Sources of power⌗
The cheesiest title of all that does not give justice to its content. The subtile is a lot more descriptive: How people make decisions. A great read to understand how we work under pressure. Ops people, this book is for you.
Understand an play politics at work.
The new peoplemaking⌗
I think this helped me understand a bit better the dynamics between people around me. I am not sure it helped me become a better person, but who knows :)
Thinking, Fast and Slow⌗
How we learn.
Understand what happens when you focus hard at work.
The laws of simplicity⌗
Simple is not easy.
Simple and Usable⌗
What is good Design ?
100 things every designer needs to know about people⌗
This book attempts to help designers understand how people work.
Design for the real workd⌗
A classic on the relationship between design and ecology. It was ahead of its time for many many years.
The design of everyday things⌗
Cradle to Cradle⌗
The visual display of quantitative information⌗
Learn what makes great representations of quantitative data.
The elements of style⌗
Algorithms in C++⌗
There are versions in C and C++. I own a C++ version but they are all classic, extremely readable introductions to basic algorithms.
It is dense, it covers a lot of content, some of which is dated, but it is a terrific reference on algorithms for computer graphics
Algorithms on strings, trees, and sequences⌗
A super dry reference on lots of types of algorithms useful for searching in text or other types of content.
Distributed systems, Principles and Paradigms⌗
A very approachable introduction to distributed systems.
A classic textbook on algorithms for distributed computing. A bit more dry than the Tanenbaum above.
Data-intensive Text Processing with MapReduce⌗
The map-reduce paradigm for large-scale parallel processing of text content. i.e., the magic behind Google’s scaling up its search engine during its early years.
A very approchable introduction to early search engine algorithms.
Compilers: Principles, Techniques, and Tools⌗
A dated but still classic introduction textbook on the topic.
Modern compiler implementation in Java⌗
A more modern introduction textbook.
Advanced Compiler Design & Implementation⌗
An in-depth treatment of optimization passes and algorithms.
Structure and Interpretation of Computer Programs⌗
Aka, MIT CS101. A terrific introduction to programming.
Refactoring: Improving the Design of Existing Code⌗
Every program starts empty and gets refactored incrementally to production: learn how to write code.
This is a very dry dictionnary of design patterns. It is well worth a read, but it will take years to incrementally reading it over and over until you can master what it describes.
Design Patterns Explained⌗
This is the book that I have always wanted to write about design patterns. It is the best introduction to the topic I have ever read. It will allow its readers to get started much faster than by reading the Design PAtterns book.
The art of Software Testing⌗
I own a first edition. I heard that the second edition is at least as good. This is a must-read to understand the practicalities of testing and debugging in software
Debugging: the 9 Indispensable Rules for Finding Event the Most Elusive Software and Hardware Problems⌗
Despite the absurd title, this is a terrific book about debugging in general. This is an entertaining and easy read, most probably the book that I have had the most success to get others to read it.
Find the bug: A Book of Incorrect Programs⌗
A great introduction to learn how to read code. Entertaining puzzles for all.
Linkers and Loaders⌗
Most computer books are useless, destined to fill landfills once the technology they describe is not trendy anymore. This is a timeless classic that describes how one of the littlest known pieces of system software works and how you would go about implementing one.
I own almost no book about specific software technologies. This is an exception because I know of no other way to use C++ Templates.
How buildings learn: What Happens After they’re Built⌗
Understand how the world around you changes over time.
Why buildings fall down⌗
An introduction to the basics of structural engineering in architecture. A must-read to understand what you see around you.
The timeless way of building⌗
The gang of four applied design patterns to software. Christopher Alexander invented Design Patterns.