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 !

Project Management

The mythical man-month

Frederick P. Brooks

The tale of how the IBM-360 systems got built. A timeless classic on what makes software projects late.

The Art Of Project Management

Scott Berkun

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:

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

Barry W. Boehm

Super dry, dated, but still interesting to understand how things worked back in the days of the waterfall model

Business

The ten-day MBA

Steven Silbiger

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

Clayton M. Christensen

A classic on how to manage innovation in changing markets.

Dealing with Darwin

Geoffrey A. Moore

Another classic on how to manage business development in different phases of an evolving market.

The lean startup

Eric Ries

A classic on how to build an MVP and iterate to success (?)

Predictable Revenue

Aaron Ross & Marilou Tyler

Understand how sales teams work.

The hard thing about hard things

Ben Horowitz

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

Peter Schwarz

Learn how to understand the forces at play around you that shape the world around you long term.

High output management

Andrew S. Grove

Only the paranoid survive

Andrew S. Grove

War stories

The soul of a new machine

Tracy Kidder

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

Bil Herd

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.

People

Sources of power

Gary Klein

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.

Power Plays

Thomas Quick

Understand an play politics at work.

The new peoplemaking

Virginia Satir

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

Daniel Kahneman

How we learn.

Flow

Mihaly Csikszentmihalyi

Understand what happens when you focus hard at work.

Design

The laws of simplicity

John Maeda

Simple is not easy.

Simple and Usable

Giles Colborne

What is good Design ?

100 things every designer needs to know about people

Susan M. Weinschenk

This book attempts to help designers understand how people work.

Design for the real workd

Victor Papanek

A classic on the relationship between design and ecology. It was ahead of its time for many many years.

The design of everyday things

Donald A. Norman

Cradle to Cradle

Michael Braungard & William McDonough

The visual display of quantitative information

Edward R. Tufte

Learn what makes great representations of quantitative data.

Writing

The elements of style

William Strunk & E.B. White

Computer Science

Algorithms in C++

Sedgewick, Parts 1-4, Part 5

There are versions in C and C++. I own a C++ version but they are all classic, extremely readable introductions to basic algorithms.

Computer graphics

James D. Foley, Steven K. Feiner, John F. Hughes, Andries van Dam

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

Dan Gusfield

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

Andrew S. Tanenbaum & Maarten Van Steen

A very approachable introduction to distributed systems.

Distributed algorithms

Gerard Tel

A classic textbook on algorithms for distributed computing. A bit more dry than the Tanenbaum above.

Data-intensive Text Processing with MapReduce

Jimmy Lin and Chris Dyer

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.

Information retrieval

Stefan Büttcher, Charles L.A. Clarke, Gordon V. Cormack

A very approchable introduction to early search engine algorithms.

Compilers: Principles, Techniques, and Tools

Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman

A dated but still classic introduction textbook on the topic.

Modern compiler implementation in Java

Andrew W. Appel

A more modern introduction textbook.

Advanced Compiler Design & Implementation

Steven S. Muchnik

An in-depth treatment of optimization passes and algorithms.

Software

Structure and Interpretation of Computer Programs

Harold Abelson, Gerald Jay Sussman, Julie Sussman

Aka, MIT CS101. A terrific introduction to programming.

Refactoring: Improving the Design of Existing Code

Martin Fowler

Every program starts empty and gets refactored incrementally to production: learn how to write code.

Design Patterns

Erich Gamma, Richard Heml, Ralph Johnson, John Vlissides

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

Alan Shalloway, James R. Trott

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.

Software Technology

The art of Software Testing

Myers

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 Even the Most Elusive Software and Hardware Problems

David J. Agans

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 share with others.

Find the bug: A Book of Incorrect Programs

Adam Barr

A great introduction to learn how to read code. Entertaining puzzles for all.

Linkers and Loaders

Levine

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.

C++ Templates

Vandevoorde, Josuttis

I own almost no book about specific software technologies. This is an exception because I know of no other way to use C++ Templates.

Architecture

How buildings learn: What Happens After they’re Built

Stewart Brant

Understand how the world around you changes over time.

Why buildings fall down

Matthys Levy, Mario Salvadori, Kevin Woest

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

Christopher Alexander

The gang of four applied design patterns to software. Christopher Alexander invented Design Patterns.