Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Ask HN: Good books on philosophy of engineering?
271 points by s3micolon0 on Jan 19, 2024 | hide | past | favorite | 132 comments
I am a software engineer by passion. I love computers, I am curious. I love to learn new things / concepts. I love to see the beauty in existing concepts being applied in completely unexpected ways, which makes you wonder that every boring thing has myriad of variations which are not obvious.

Through my college education & industry experience & curiosity, I have learned a lot. But, even after trying to search about books on the philosophy of engineering or the art / craft of engineering - I have fallen short.

I would love to hear what books / and projects that you have seen that have inspired you as an engineer & have provided you with your own philosophy of engineering.

I am talking about general "engineering" here, not just specifically "software engineering".

Requesting the universe to enlighten me :)




Don't overlook books that are critical of engineering as it is often practiced and how it fits into our society:

Computer Power and Human Reason by Joseph Weizenbaum (1976). Weizenbaum wrote Eliza, the first AI chatbot, almost sixty years ago and was appalled at the reception. This book is still very pertinent, especially the Introduction, Chapter 1 On Tools, chapter 9, Incomprehensible Programs, and chapter 10, Against the Imperialism of Instrumental Reason. Chapter 4, Science and the Compulsive Programmer, is one of the first written accounts of the hacker culture.

Weizenbaum's original paper on Eliza (1966) [0] is still very pertinent to the present generation of chatbots, especially the introduction and discussion.

Tools for Conviviality, Ivan Illich (1973) [1]. Influenced recent work by the computer scientists Steven Kell [2],[3] and Kartik Agaram [4].

Computation and Human Experience, Phil Agre (1997) (excerpt at [5]). Agre got a PhD in AI at MIT in the 80s and 90s and became very critical of the field. I think his shorter writings [6][7] are a better introduction, especially the personal memoir at [6]: "about how I became (relatively speaking, and in a small way) a better person through philosophy."

0. https://dl.acm.org/doi/10.1145/365153.365168

1. http://akkartik.name/illich.pdf

2. https://www.humprog.org/~stephen//research/talks/kell19de-es...

3. https://www.humprog.org/~stephen//research/talks/kell19softw...

4. http://akkartik.name/akkartik-convivial-20200607.pdf

5. https://pages.gseis.ucla.edu/faculty/agre/che-intro.html

6. https://pages.gseis.ucla.edu/faculty/agre/notes/00-7-12.html

7. https://pages.gseis.ucla.edu/faculty/agre/critical.html


A critical book I enjoyed when I read it (before starting my career) was The Real World of Technology: https://www.goodreads.com/en/book/show/1291973. Worth it just for the first chapter where she defines technology as practice, which helps clarify why the classic “technology X is a neutral tool that can be used for good or ill” argument isn’t very satisfying.

That said, I haven’t read it in a long time so not sure how well it holds up.


I need to read Illich. I've been following The Convivial Society, a newsletter whose author is very influenced by Illich.

My introduction to tech criticism was To Save Everything, Click Here by Evgeny Morozov. He describes a lot of tech culture as "solutionism" which I think is a great lens to have in your pocket.


I’ll second this. A philosophy for engineering is nestled I think in the larger “philosophy of technology”, but this field of philosophy has traditionally been a lot more critical of technology than most of us can stomach today. This is a really good map of the field that not many know about, written in 1995:

https://shaunlebron.github.io/chandler-1995.pdf


I can recommend a Philosophy of Software Design Paperback by John Ousterhout. I've been programming for 15 years and it closely parallels my own current beliefs about programming. He stands above the lower aspects of programming/code/modules, raising the discussion to a conceptual level, that you seem to be wanting. I think there were only 2 areas out of approximately 10 that I thought I had a few better ideas but a)He may have simplifying it to more easily allow explanation. b) His explanations are much better than mine and if I tried to explain it, maybe I'd fail.


Haven't read this, but based on looking through the table of contents (so take what I'm saying with a grain of salt), I agree with your choice. You mentioned that you've been programming for awhile, you might have heard of Grady Booch and "Object-Oriented Analysis and Design with Applications." Object oriented techniques has fallen a little out of fashion now, which may be part of the reason why this book isn't as popular, but it was big around 20 years ago. It also discusses on the many topics of your choice: - Complexity, what it is and how to manage it - Encapsulation (Information Hiding). - Interfaces - contracts for your encapsulated code - Abstraction

And am certain that Grady Booch's book was itself mostly based on older material.

I also really like any really good book on doing requirements (they all have 80% of the same info). Getting the true needs of all your stakeholders (your users, the business people, the devs themselves, and the technical needs of the system) is probably the step that is done the poorest in most organizations, and the one that could save project the most time and money if done well.


His idea to keep interfaces small and powerful bothered me - I don’t think it expresses any truth about programming despite being a good rule of thumb. I kept feeling frustrated while reading. The lambda calculus has the best interface to functionality ratio possible but you don’t see humans using it to program. This objection led me to the conclusion that a better heuristic would be: programs should try to communicate intent primarily to another reader, and then to the computer. He does touch on this a little by saying aim for ease of reading over ease of writing, but I don’t think it was a main point. I agreed with almost everything else he had to say including the “taking it too far” chapter (I don’t actually think we should be using lambda calculus to program lol). Curious to know which parts you disagreed with. I am only 2yoe


Most so the book is meant to be taken as a rule of thumb. I personally think simple interface hiding deep functionality is a really good one. I was looking at the langchain codebase last year after having read the book and the point was struck home. Many of the functions in Langchain are one line wrappers of other functions. I try to think of functions as atomic units of knowledge. Very short functions are a good indicator that you're not organizing that knowledge effectively. When you have a simple interface with deep logic, you're encapsulating logic in a single place. This is very good for reducing the cognitive load of a developer. Shallow functions fragment that knowledge across multiple classes/functions/files. The developer needs to hold more of the world in their head to make sense of things. This increases complexity.

Additionally, you can sort of intuit this by looking at very successful commercial products like Google Search, the iPhone, and ChatGPT. Search is a single text input. The iPhone is a screen with a very small number of buttons. Chatgpt has a simple chat interface. All of these systems are incredibly complex, but they're able to present a simple interface to the public to allow most people to leverage that complexity without having to think about it.

Just my 2 cents.


To people who are experienced in writing out the full interface of modules, ie their assumptions and guarantees, it's quite clear that being a "deep module" in Ousterhout's sense is quite rare and often undesirable, and that Ousterhout's examples of deep modules are actually shallow. See https://www.pathsensitive.com/2018/10/book-review-philosophy...

He gets a lot of other stuff right though. Love his writing on comments


I think I might be missing something from that article, but I don't think they're in so much disagreement with Ousterhout.

Ousterhout's core argument is this: consider a module as its interface (measured, say, in # of edge cases) multiplied by its effect (measured, say, in # of features achieved). When comparing two modules, we should prefer modules with smaller interfaces and larger implementations, i.e. of two modules with equally sized interfaces, prefer the one which does more, and of two modules which do the same thing, choose the one with the simpler interface.

Narrow vs wide in this context seems to me to mainly be a point of comparison - in practice, narrow and wide don't make much sense when talking about a module on its own, because the dimensions of interface and implementation are not comparable.

However, this article seems to mainly be about comparing interface to implementation and arguing that, because interfaces can be very complex, often as complex or more as the implementation itself, then Ousterhout is wrong. Or in other words, if we convert "# of edge cases" and "# of features achieved" to a single comparable unit like "# of lines of code", then for Ousterhout's advice to hold, then the implementation must be more lines of code than the interface.

To me, that's kind of missing the point of the advice, which is less to do with the amount of code needed to implement something, and more to do with the capability of code vs its interface. Yes, lines of code can be a useful proxy for both dimensions, but the dimensions aren't meant to be directly comparable.

I might be missing something, though.


As one example, I think his formula for overall complexity is mostly correct: Total Complexity = Sum[ componentComplexity x timeSpentWorkingOnThatPart] However I would replace the timeSpentWorkingOnThatPart with the sum of the square roots of all separate times. i.e. Working on a component for 2 days straight versus working on it 1 hour every 2 weeks are quite different. But heh I'm sure there's other refinements and if I was writing a book I wouldn't necessarily include them. It slightly goes against the point of the book to nitpick these things as it's trying to help us think abstractly at a higher level.


If you've never used lambda calculus I would highly recommend trying haskell.


I was about to recommend the same book - lots of good nuggets of wisdom in here, without the dogma you sometimes find in this kind of literature.


Richard Hamming’s The Art of Doing Science and Engineering is one that’s really shaped my philosophy on CS. It pushes for the importance of reasoning from first principles, experimentation, and taking on extraordinary work. There’s also a fascinating and prescient section on AI and the limits of computers and how we think about them. Stripe Press makes a nicely bound hardcover edition of the book, too:

https://press.stripe.com/the-art-of-doing-science-and-engine...

Heartily recommend!


I read this and I was really surprised by how dismissive he was of his peers! Like it was almost catty. Great book tho.


Oh Hamming is amazing to read! His "the art of probability" too is an amazing read. As the title says, he explains why probability isn't math but an art and philosophy!


That was the one I was going to recommend.

https://www.youtube.com/watch?v=AD4b-52jtos


I'm not sure if these books really are what you're looking for, because each of them is a mix of engineering history, and the description of how a group of people end up doing amazing things. In each of the books, there were nuggets of wisdom that I've tried to bring along with me in my job (as best I can). Like:

- Doing things as simply as possible to start off

- Keeping iteration time to a minimum, for maximum exploration of ideas

- Being willing to think outside the box

My takeaways above, hardly do these books justice, but they are as follows:

- Skunk Works: A Personal Memoir of My Years at Lockheed [0]

- Hackers: Heroes of the Computer Revolution. [1]

- The Dream Machine: J.C.R. Licklider and the Revolution That Made Computing Personal [2]

[0]: https://www.goodreads.com/book/show/101438.Skunk_Works

[1]: https://www.goodreads.com/book/show/56829.Hackers

[2]: https://www.goodreads.com/book/show/722412.The_Dream_Machine


+1 for Skunk Works. Great story, well written and the engineering challenges they overcame were astounding.


I love your passion!

When I was CTO of a software startup, I wrote a blog post reviewing various books about engineering and software teams, neatly organized into six sections. The three sections that you might find interesting, each featuring a few relevant books:

- Debugging dysfunctional product cultures: https://amontalenti.com/2020/11/28/definitive-reading-list#d...

- The psychology of deep work: https://amontalenti.com/2020/11/28/definitive-reading-list#p...

- Programmer mindset and philosophy: https://amontalenti.com/2020/11/28/definitive-reading-list#p...


The Design Of Everyday Things by Don Norman might be something of interest

https://www.goodreads.com/en/book/show/840


Seconding this. It's an important book for all kinds of design

I would also recommend "Clean Code: A Handbook of Agile Software Craftsmanship" by Robert C. Martin. It focuses on crafting higher quality code, which is the property of it not only running well, but being easy to understand and to work on


I personally don't like Clean Code, but understand that a lot of people I respect do. I do want to throw Clean Architecture into the ring though since we're in the topic.

That book is a top three software book for me. It made me understand why OO is a thing and what concepts I should pretty much always use from that ecosystem.

The concept of interfaces (not just the programming construct, but the general idea) was massive and it changed my view on the testability of code.

Martin has some other good stuff related to professionalism as a programmer. He has a few talks and The Clean Coder and those are absolutely worth it as well.


I'm curious as to how you feel about this[1]?

[1]: https://qntm.org/clean


While the criticism is valid, I think it misses the points of the book. It's worth reading both but the book definitely has helpful perspectives that eclipse what's mentioned on that webpage


I am so happy to get all these responses! All of the resources look interesting!! I am going to start with Richard Hamming's The Art of Doing Science & Engineering. It looks to be something to get started.

I have been wondering this question ever since, I wish I had reached out to request help earlier. I am glad I did, nonetheless. I am 26, hope there is a lot more to learn, apply & build.

I am grateful to the universe (and the internet/hackernews). Thank you :)


A Philosophy of Software Design by John Ousterhout. The principles / approaches (e.g. problem disaggregation) apply to other engineering disciplines.


I recommend Shop Class as Soulcraft, which contrasts blue-collar work (motorcycle repair) with knowledge work. It's not specifically "tech"-related, but it does a good job of exploring how corporatization has diminished the ability to be a craftsperson in modern careers.


+1

I thought Shop Class as Soulcraft was excellent and found the author's theories on the lack of job and life satisfaction among those doing "knowledge work" compelling.

It reminded me of the movie Margin Call when Kevin Spacey's character, who manages a trading floor for a wall street investment firm, laments that if he'd been a ditch digger, at least he'd have a bunch of holes left behind as evidence he accomplished something.


You can get an overview of "Shop Class as Soulcraft" here: https://news.ycombinator.com/item?id=8280379


Philosophy of Computer Science: An Introduction to the Issues and the Literature

by William J. Rapaport - ( https://www.apaonline.org/news/254862/William-Rapaport-is-th... )

> The APA is pleased to announce that William Rapaport (University at Buffalo) has been selected by the APA committee on philosophy and computers as the winner of the 2015 Barwise Prize!

This corresponds to the class https://cse.buffalo.edu/~rapaport/510.html

https://hn.algolia.com/?dateRange=all&page=0&prefix=true&que...

The table of contents can be read at https://www.wiley.com/en-us/Philosophy+of+Computer+Science%3...

You are likely interested in sections 3.12 through 3.18

    3.12 CS as Engineering 64
    3.13 Science xor Engineering? 66
    3.14 CS as “Both” 66
    3.15 CS as “More” 68
    3.15.1 CS as a New Kind of Science 68
    3.15.2 CS as a New Kind of Engineering 70
    3.16 CS as “Neither” 71
    3.16.1 CS as Art 71
    3.16.2 CS as the Study of Complexity 71
    3.16.3 CS as the Philosophy(!) of Procedures 72
    3.16.4 CS as Computational Thinking 72
    3.16.5 CS as AI 73
    3.16.6 Is CS Magic? 74
    3.17 Summary 76
    3.18 Questions for the Reader 77
And section 5 which starts out with:

    5 Engineering 95
    5.1 Defining ‘Engineering’ 95
    5.2 Engineering as Science 97
    5.3 A Brief History of Engineering 98
    5.4 Conceptions of Engineering 99
    5.5 What Engineers Do 100


A couple favorites that haven't been mentioned:

'An Introduction to General Systems Thinking', Weinberg, and he's got a dozen more worthwhile books behind it.

'The Logic of Failure: Recognizing and Avoiding Error in Complex Situations', Dietrich Dorner


The Secret of Our Success: How Culture Is Driving Human Evolution, Domesticating Our Species, and Making Us Smarter

Engineers (and scientists) often boast ourselves as master of causality. We solve problem by understanding the domain. We laugh people as cargo-culting - not knowing why one does things. The Secret of Our Success shows it is a feature rather than a bug. The effect of "culture" takes much longer to manifest, often beyond our comprehension. One example given by the book is how we process cassava, lots of superfluous ritual. Without those processing culture, people get poisoned slowly. Only with modern chemistry do we comprehend the full extend of those ritual. But people have been eating cassava way before modern science were available. Similar can be said about medicine, lots of folk remedies don't work. But when they do, they do. Is not understanding a feature or a bug?

With the advent of LLM, things seem to come in full cycle. We now prompt the engine and get a result/an opinion of sort. No longer is understanding required. I see the use of LLM in software engineering very anti-engineering, hindrance to learning and understanding. But it might not be a bug after all.


Coincidentally I just started reading Engineering: A Very Short Introduction by David Blockley. I was very excited after the first chapter: it has a lot of profound ideas about engineering at large. Did you know that "engineer" does not derive from "someone who cares for Industrial Revolution era engines" but rather stems from a Latin / old French word for "ingenious"?? The second chapter feels a bit thrown together; i.e. the author seems to struggle a bit to unite all the events coherently. I think it's safe to say however that this book will give a broad overview of the long-term historical trends in the discipline, which is foundational for any type of philosophical understanding.

P.S. I love the VSI series. Fits in my back pocket and usually gives a satisfying overview of a discipline. I always get a few fascinating ideas from every book. I've read probably 20 from the series at this point.


You did say philosophy of engineering, right?

Look no further than “The Specialist” by Charles Sale

“YOU'VE heard a lot of pratin' and prattlin' about this bein' the age of specialization. I'm a carpenter by trade. At one time I could of built a house, barn, church, or chicken coop. But I seen the need of a specialist in my line, so I studied her. I got her, she's mine. Gentlemen, you are face to face with the champion privybuilder of Sangamon County.”

Sometimes the best books are also the shortest.

https://www.toiletrevolution.com/wp-content/uploads/The-Spec...


Thank you so much for that. It is wonderful. So therefore you must be. I am from Ireland and the whole sense of it resonates with me; the soft humour, the self-confidence, the sheer loveliness of his outlook, the different times. And the beautiful "nartural" language used is a joy. Cheers.


I found an small old copy of The Specialist without any attribution in a junk shop a few years ago and went down a short research rabbit hole about Chic Sale. Thanks for the reminder!


That was a great read! Thank you for posting this gem.


For software engineering, I recommend A Philosophy of Software Design. It has principles that I think translate well to other engineering fields.

For engineering in general: To Engineer is Human - Henry Petroski The Art of Doing Science and Engineering - Richard Hamming Structures: Or Why Things Don't Fall Down - J.E. Gordon


A city is not a tree. It is more about the limits of systems thinking. Must read for Smart-City IoT but applies to anything where you might think Tech is an easy fix to some social problem:

http://worrydream.com/refs/Alexander%20-%20A%20City%20Is%20N...


Yes! Christopher Alexander is a must-read for engineers. Notes on the Synthesis of Form is also very excellent.


They say naming is one of the hard problems of computer science, but there's not much concrete work addressing it.

I'd recommend Elements of Clojure[0].

Don't be fooled by the title, it's not really about Clojure, it just uses Clojure as an illustration as it discusses a very subtle general problem. From the website:

> The first chapter, Names, explains why names define the structure of our software, and how to judge whether a name is any good.

> The second chapter, Idioms, provides specific, syntactic advice for writing Clojure which is clean and readable.

> The third chapter, Indirection, looks at how code can be made simpler and more robust through separation.

> The final chapter, Composition, explores how the constituent pieces of our code can be combined into an effective whole.

I find it a thoughtful and considerate overview of an area that everybody has some implicit knowledge of, and something that leads to a more abstract concept of quality.

[0]https://elementsofclojure.com/


Tao Te Ching, seriously

There is a lot of emphasis on simplicity and that things are the best when they work seamlessly.

Chapter 17, from the translation by Derek Lin, which I wholeheartedly recommend:

    The highest rulers, people do not know they have them
    The next level, people love them and praise them
    The next level, people fear them
    The next level, people despise them


There are several ways to approach the Tao Te Ching, including the mystical, but I think that there's a great book that explains the underlying approach the Chinese have, called, Treatise on Efficacy.

Essentially, in Chinese philosophy, any given situation has a propensity (water tends to run downhill). It is therefore more effective to work with that propensity, than it is to work heroically against that propensity. This is very much a layer in what the Tao Te Ching talks about.


> Essentially, in Chinese philosophy, any given situation has a propensity (water tends to run downhill). It is therefore more effective to work with that propensity, than it is to work heroically against that propensity.

Interesting, this is similar to the Hindu/Indic idea of dharma (e.g. the dharma of water is to flow) and the idea of working with/towards dharma (both of oneself and the world generally). (Dharma refers to both the proper order of things and to the actions one takes to uphold it.)

Edit: The "See also" section on the Wikipedia page for Ṛta is interesting:

• Asha (Zoroastrianism) https://en.wikipedia.org/wiki/Asha

• Maat (Egyptian religion) https://en.wikipedia.org/wiki/Maat

• Me (Sumerian religion) https://en.wikipedia.org/wiki/Me_(mythology)

• Tao (Chinese Taoism) https://en.wikipedia.org/wiki/Tao

and a few others. In Hinduism there are Ṛta, Dharma, etc. (https://en.wikipedia.org/wiki/%E1%B9%9Ata https://en.wikipedia.org/wiki/Dharma) (also in Buddhism Jainism etc)


What's also interesting to me is that there are enough similarities between Vedic and ancient Greek thought, and yet here we are with Aristolean ideas in the West, and in India, things went the way of the Puranas. (Treatise of Efficacy went into the flaw baked into Aristolean thoughts separating Theory and Practice, and how going with the propensity bypasses that).

The Chinese word for this propensity of the situation is shi (勢), rather than dao (道). There are other texts that talk about exploiting and profiting from propensity (shi), rather than what the Dao De Jing talks about with wei wuwei (為無為).


The notion of propensity/flow made me question if one's life is not best when being able to see and surf trends as you need. Tiny soft and round exchanges between all parties.. a kind of dance.


Mindfulness — being alive to the changing circumstances — is the key.


And if you want something a bit more relaxed and updated, The Dude De Ching[1], is quite good. It's a rewrite based around the core concepts of Dudeism, a fan-made spiritual practice based on the character "The Dude" from The Big Lebowski.

> The rug is a fabrication which ties our ruminations together.

1. https://dudeism.com/thedudedeching/

Edit: There is an online version available as well, https://aui.me/text/the-dude-de-ching/


Discussed most recently/productively here at https://news.ycombinator.com/item?id=37686713 I think.


This very thread inspired me to read not only this book, but also this particular translation.


Read through the thread and didn't see references to the translation by Derek Lin, could you point to why you selected that version?


It is in the linked post, not - comments.


For Eastern Influence.

I think AI Engineers would be interested in a more Zen take, examining 'conceptual mind', 'subjective experience'.

""The Zen Teaching of Huang Po: On the Transmission of Mind""

https://www.goodreads.com/book/show/276779.The_Zen_Teaching_...


Another great translation is by Witter Bynner - the book is titled The Way of Life rather than Tao Te Ching.


Zen and the Art of Motorcycle Maintenance


I've never understood what engineers find in this book. It looks like a shallow kitchen philosophy of a guy next door to me.

What you think is so good about this book for engineers, in a nutshell?


Pirsig's book is not really about engineering, but about how we engineers relate to the world.

In engineering school I was taught to see the world in a special and unique way, to be able to solve engineering problems as a professional. In the book, this worldwiew is very well laid out.

An example:

  > Precision instruments are designed to achieve an idea, dimensional precision, whose perfection is impossible. There is no perfectly shaped part of the motorcycle and never will be, but when you come as close as these instruments take you, remarkable things happen, and you go flying across the countryside under a power that would be called magic if it were not so completely rational in every way. It's the understanding of this rational intellectual idea that's fundamental. John looks at the motorcycle and he sees steel in various shapes and has negative feelings about these steel shapes and turns off the whole thing. I look at the shapes of the steel now and I see ideas. He thinks I'm working on parts. I'm working on concepts.


The core thing is exploring just exactly what is subjective and what is objective, and whether quality is subjective or objective. Pirsig came up with an answer, and then goes on to talk about excellence (arete). Thinking back, this discourse seems like it was deliberately embedded in a kind of every day, guy-next-door narrative in order to touch on lived experience of "quality".

Although Pirsig didn't explore it, quality is very much at the heart of any engineering, particularly when you try to quantify it. How effective is ISO-9000? GE was big on that. Boeing measured quality of their builds, until they compromised the process. What about Deming's approach (Total Quality Management)?

What is quality in software engineering? (We often sidestep that question and call it Software Craftsmanship instead). And there's a whole can of worms when we try to apply this to AIs.


i donknow... wasting so much time just to get a basic idea that quality is important looks like a terrible book to me.

Of course in the context of "books useful for engineers".

If you just enjoy someone's couch philosophy - i can totally understand that and agree that the book may be great.


The idea isn’t about that quality is important though. It is that, even though people feel it is important, no one has been able to rationalize it or measure it. And that sometimes we act and talk as if we can.

I’m not sure why you keep denigrating it as a couch philosophy. Just curious, are you doing that because you have worked through philosophies from academia or the classics?


Maybe you should try reading it before dismissing it like this.


For me, the way he approached debugging was worth it. The way he went about creating hypotheses and testing them is something I've gone back to again and again.


It's about how quality is fundamentally unmeasurable.


Did you read the whole book yourself or just skim it? (asking sincerely)


I read the book completely. The book was on a second year reading list for my industrial design department.

I absorbed as an introduction to the philosophical aspects of quality. Quality is truly a tough concept if approached as a universal truth.


That makes sense to me. I'm not sure how to articulate what I got out of that book exactly but I did enjoy it. Some of the more 'spiritual' books I find, the value of them doesn't really hit you until you're older or have had some tragic life experiences happen. Until then some of it can just make you feel "this is some vapid feel-good hippie crap." Not saying that was your reaction of course but it makes sense to me why you might not vibe with it if you read it in a university setting.


i've tried few times to fight through first several pages - it gets dead boring and meaningless right from beginning


If none of the comments here ignite your interest, it might not be time then. I had books like that.

I also had books I can feel I need to read, and yet they are slogs. And then something happens, or I encounter an idea elsewhere, and it is as if something unlocks. And I am diving through the book… until I reach the next roadblock. I definitely would not force it.


+1. It can become a ramble at times and full-time philosophers seem to hate it. On the other hand, there is a lot of practical wisdom in the first half of the book, and what I consider to be a good payoff if you stick through to the end.


I recommend reading What Engineers Know and How They Know It by Walter Vincenti [1]. The book is directed towards mechanical and aerospace engineers, but discusses the philosophy and epistemology of engineering as a discipline via several case studies. A major topic of the book is the idea that engineering is not just "applied science" and does not necessarily need to use the scientific method (kinda summarized in the saying "it's not stupid if it works" in my opinion). The book analyzes several case studies to break apart the engineering process from the drawing board and through the production phase, and sometimes in multiple iterations back and forth even.

[1] https://en.wikipedia.org/wiki/What_Engineers_Know_and_How_Th...


Not totally what you are looking for, but I'd highlghly recommend "Apollo" by Murray and Cox. It focuses on the engineering history of the Apollo program, and it is a superbly well written and researched worked and so many of the stories are about engineering philosophy that I think it'll really be worth your while.


Seconded, phenomenal book and suggestion.

IMO in a similar vein is 'The Making of the Atomic Bomb', Richard Rhodes, another industry- and world-reshaping project.


In a similar vein, there's "Skunk Works" by Ben Rich and Leo Janos, which covers the development of the U-2, F-117, and SR-17 aircraft. Not about the philosophy of engineering per se, but it's a great perspective into how problems were solved in a very unique program with extreme goals, before modern computer-aided tools.


(Yep, revisiting an older post) Is Software Engineering Real Engineering? • Hillel Wayne • GOTO 2023 was published within the last few hours https://youtu.be/6pO7jT794uc

It's not a book, but it's a place to go to lead to things to continue the search.


Lewis Mumford's Books;

- Technics & Civilization

- The Culture of Cities

- The Story of Utopias

Lewis Mumford talks about technology, but from an anthropological pint of view.

Another book I would recommend is The Nature of Technology by Brian Arthur

The other I would recommend is James Burk's Connections he's has some books but I but the documentary is highly recommended.


I've just purchased Richard Hamming's "The Art of Doing Science and Engineering" but haven't read it all yet, it looks pretty great.


It is a great book, and it includes an amazing essay by him titled You and Your Research [0][1] - which explains why it is important to "always be learning".

0 - https://www.cs.virginia.edu/~robins/YouAndYourResearch.html

1 - https://www.youtube.com/watch?v=e3msMuwqp-o (lecture version)


> [Richard Hamming's] You and Your Research

Add Edsger Dijkstra's The Humble Programmer (1972 Turing Lecture) as a companion read for software engs: https://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340... / https://archive.is/U8GwX


I read it last year and it is fantastic - super absolutely ultra highly recommend that everybody read it. Run, don't walk, towards this book!


I enjoyed Engineering and the Mind's Eye by Eugene Ferguson https://mitpress.mit.edu/9780262560788/engineering-and-the-m...


Came here looking for this one to be mentioned



I second Rick Rubins book


Systemantics, AKA "The Systems Bible: The Beginner's Guide to Systems Large and Small" by John Gall.

It is offered from the perspective of how not to design systems, based on system engineering failures. The primary precept of the treatise is that large complex systems are extremely difficult to design correctly despite best intentions, so care must be taken to design smaller, less-complex systems and to do so with incremental functionality based on close and continual touch with user needs and measures of effectiveness.

https://en.wikipedia.org/wiki/Systemantics


Normal Accidents and To Engineer is Human are two popular and great books.


In How to Build Impossible Things, Ellison tells the story of his unconventional education in the world of architecture and design, and how he learned the satisfaction and joy that comes from doing something well for a long time.

https://www.penguin.co.uk/books/447751/how-to-build-impossib...

Enjoyable, not a philosophy of engineering but philosophy with engineering.


Simon Winchester's "The Perfectionists" is worth reading


Trying to stick to bellow as much as possible all the time:

"Keep it simple, stupid!"

https://en.wikipedia.org/wiki/KISS_principle

The Basecamp's books are enjoyable, recommending https://basecamp.com/books/rework


In the ethics department I enjoyed "The Cambridge Handbook of Information and Computer Ethics" (978-0521888981). We read part of it for a ethics lecture during my M.Sc., and like most ethics/philosophy piece I found a lot of things to think about.

IIRC chapters are contributed by different authors, so it's not a single point of view (even though of course there is some filtering by the editor).

Since it's from 2010 it is light on more recent developments like AI, however (unlike software) it's rare for ethic ideas to become outdated. So I would not dismiss it due to age. Also it's 5$ used on Amazon, so depending on your situation it's not a huge deal to get it and skim it - IMHO this kind of work doesn't have to be read front to back, instead it's great to get back to it when you feel like and think about a few pages and explore new ideas, re-evaluate your own concepts, etc.

Description from the publisher: "The Cambridge Handbook of Information and Computer Ethics, first published in 2010, provides an ambitious and authoritative introduction to the field, with discussions of a range of topics including privacy, ownership, freedom of speech, responsibility, technological determinism, the digital divide, and online pornography."

Editorial reviews stolen from Amazon: "...This five-part work examines difficulties in the field of information ethics and offers practical applications and criticisms... Recommended..." --B. G. Turner, Faulkner University, CHOICE

"...This is a rich and fascinating book, bringing to interpretative debates much that has been hitherto unknown. The chapters are long and complex, and the argument is multidimensional and far-reaching." --George Lăzăroiu, PhD, Institute of Interdisciplinary Studies in Humanities and Social Sciences, New York, Contemporary Readings in Law and Social Justice


Anything written by Langdon Winner https://en.wikipedia.org/wiki/Langdon_Winner

I would begin with "Do Artifacts Have Politics?" and continue with "Autonomous Technology: Technics-out-of-Control as a Theme in Political Thought", M.I.T. Press, 1977.


“The effective engineer” by Edmond Lau is a good book for the IC software engineer working in an engineering organization.

The most influential content on engineering in my life is not in a book but a YouTube talk entitled How Complex Systems Fail by Richard Cook, which is about designing resilient systems. I’ve applied these ideas to many aspects of life, not just engineering.


I enjoyed The Art of Doing Science and Engineering: Learning to Learn by Richard Hamming a lot.

https://www.amazon.com/Art-Doing-Science-Engineering-Learnin...


This book is probably about a very different kind of ”engineering” than what you had in mind, but it’s been highly influential to my thinking:

“The Social Construction of Reality: A Treatise in the Sociology of Knowledge.” Berger & Luckmann 1966.

Perhaps the core insight to me is that not only does every practice of engineering exist as embedded in the context of a socially constructed reality, but the practice of engineering itself also fundamentally involves the continual construction of such realities. In other words, for a software engineer to be able to do their job, they must among other things be a kind of applied social epistemologist.

I expect this framing doesn’t make much sense to many readers — I’m hoping the following articles might serve to illustrate:

“Programming as Theory Building.” Peter Naur, Microprocessing and Microprogramming 1985 (https://doi.org/10.1016/0165-6074(85)90032-8)

> … suggests that programming properly should be regarded as an activity by which the programmers form or achieve a certain kind of insight, a theory, of the matters at hand. This suggestion is in contrast to what appears to be a more common notion, that programming should be regarded as a production of a program and certain other texts.

“Interpretation, Interaction and Reality Construction in Software Engineering: An Explanatory Model.” Kari Rönkkö, Information and Software Technology 2007 (https://doi.org/10.1016/j.infsof.2007.02.014)

> Floyd’s paper Outline of a Paradigm Change in Software Engineering requested that we move from a product oriented paradigm to a process oriented paradigm.

> Naur’s paper Programming as Theory Building made it painfully clear to us that exemplary resources in the form of material and available support are not enough when modifying others’ programs. In fact, if Floyd’s claims had been taken seriously by the software developers in Naur’s study, and if the same developers had access to an explanatory model … their difficulties could have been both anticipated and prevented.

> This article … explains from a natural language point of view, how interpretation takes place, and discusses the consequences of this in relation to interaction and reality construction in software engineering practice.


I can't understate just how great "Waking Up: Overcoming the Obstacles to Human Potential" by Charles Tart (2001) is. It's a cross between engineering and the spirituality (although I argue, it's more on the philosophy and psychoanalysis of engineering than spiritual).

I wrote a (short) review on the book directly after reading it here[1]. I've since reread the book, and while some of my opinions on it are the same, some I understand the nuance much more in context of the rest of the book, I need to update it.

1. https://macleodsawyer.com/books/waking-up/


It may be a bit more zoomed out than what you're looking for if you're specifically looking at philosophical treatments of the practice of engineering, but Andrew Feenberg's "Questioning Technology" is excellent introduction to the philosophy of technology, particularly exploring the interplay between technological constraint and political/economic/social drivers of its development.

"Philosophy of Technology" in general is a pretty rich field with a long history, and you might find more references in it than in engineering specifically.


The Timeless Way of Building, by Christopher Alexander.

It’s about designing houses, and in a more general sense spaces for people. There is a powerful philosophy that he conveys in this book which applies to software engineering as well.

Some notes of caution though. The book is not an easy read. It’s also not very direct and quite philosophical. Also, don’t try to reduce it to just software patterns. There is a lot more in there about a sense of beauty, quality, and essence which people miss when they mechanically reduce the message to the patterns.


Samuel Florman wrote some interesting books reflecting on engineering and the humanities

The Civilized Engineer The Introspective Engineer The Existential Pleasures of Engineering

A few others I haven't read


Crawl-Space Computing by Lawrence J. Dickson [1]

Posting it here since the author has kindly allowed me to share this file with my colleagues in order to familiarize them with the ideas laid out in the book. Also, seems like the paper version is no longer available on Amazon, so I don't see any other way. Especially since the author's goal was to leave a heritage.

[1] http://pros.to/wide.pdf


I wrote one which I do not promote, but I dropped by the forum and you asked.

https://leanpub.com/info-ops/c/LeanpubWeeklySale2024Jan19

Note: Book 2 is more code-centric, with active strategies to minimize solution complexity. This book is all about how to minimize to-do list complexity and tracking (which arguably is more important)


From Code Complete 2nd edition:

"Engineers in every discipline learn the limits of the tools and materials they work with. If you’re an electrical engineer, you know the conductivity of various metals and a hundred ways to use a voltmeter. If you’re a structural engineer, you know the load-bearing properties of wood, concrete, and steel.

"If you’re a software engineer, your basic building material is human intellect and your primary tool is you."

Page 819


I would recommend "The Things We Make" for an outlook into engineering mindsets through history. A good reminder that a lot of useful engineering comes before the theory can fully explain it :)

https://www.goodreads.com/en/book/show/75598048


I really enjoyed ‘Structures: or why things don’t fall down’ by J.E Gordon.

https://www.amazon.com/Structures-Things-Dont-Fall-Down/dp/0...


Essay: Rickover's "Doing a job" - https://govleaders.org/rickover.htm

Books:

- Rickover's "The Never-Ending Challenge of Engineering"

- Taichi Ohno's "WorkPlace Management"


Nobody has mentioned the “Do Committees invent” paper by Melvin Conway. It’s the origin of Conway law, but the actual paper is way deeper than that

https://www.melconway.com/Home/Committees_Paper.html



Risk Society by Ulrich Beck is one that I enjoyed. Make sure to get it used; the new prices are crazy

https://www.amazon.com/Risk-Society-Modernity-Published-asso...


The Art of Doing Science and Engineering



If you want the philosophical approach to the way to do things on Unix systems, you can’t beat “The Art of Unix Programming” by ESR. That book flipped my whole understanding of the way to write code more than any other book.


The Sciences of the Artificial by Herbert A. Simon. Absolutely foundational.



The Ancient Engineers by L. Sprague de Camp (1963), https://news.ycombinator.com/item?id=8158385


The Beginning of Infinity by David Deutsch is more broadly about science and epistemology, but I think it has a lot to say about how we do engineering.


I recommend Marvin Minisckys society of minds book. He was one of founding fathers of AI tech, the book tells lot about human mind an Interesting read.


The Things We Make by Bill Hammack

Changed my way of understanding what engineering is. Read the chaoter on designing cathedrals without math, science or modelling.


cannot recommend sicp enough: https://mitp-content-server.mit.edu/books/content/sectbyfn/b...

uses scheme to illustrate how to think about computation abstractly.


Zen and the art of motorcycle maintenance


To Engineer is Human by Petroski. It's about engineering failures and responsibility.


To engineer is human by Henry Petroski [1982]. The short film of this is also great


Thanks for this thrrad OP! Lots of great recommendations for the rest of us


Florman's _The Existential Pleasures of Engineering_.


If you seek elightment, you seek truth. Look down towards foundations like physics, mathematics, logic and look back towards the past.

It' smaybe check out the Computer History Museum.

Read Feynman's (or about) books. "Surely you're joking, Mr Feynman" is light but profound. Max Tegmark's "Our Mathematical Universe" is great. "I am a strange loop" by Douglas Hofstadter will connect many dots. If you want to peek deeper - "Through two doors at once" describes experiments at the edge of our reality. "The singularity is near" is a good perspective that connects dots through time back many years to many in the future.

These are just some incomplete starter points. It's deep, beautiful rabbit hole. Enjoy it.


The Phoenix Project.


Against Method by Paul Feyeraband

Critical Path by buckminster fuller


* The Art of Unix Programming

* The Art of Computer Programming


I like to recommend "Kill It With Fire" by Marianne Bellotti. It is full of insights far beyond managing legacy systems (as the subtitle would have you believe) and does a great job of analyzing the technology and the people/organizations who build it.


Aramis, or the Love of Technology.


The Introspective Engineer

The Intentional Engineer


The Things We Make by Bill Hammack


Safeware by Nancy Leveson.


Two books that did for me what I think you are looking for:

- From Mathematics to Generic Programming by Stepanov & Rose

- Gödel, Escher, Bach: an Eternal Golden Braid by Hofstadter

- The Little Schemer / The Seasoned Schemer




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: