Ask HN: Best book for software engineers (besides the well-known ones)?
We all know the most popular books for software engineers. One could just google it (e.g., Clean Code, DDIA, SICP, TAOCP, K&R books, Steven's books, etc.).
What are the not-so-popular-but-still-good books in computer science/software engineering out there?
22 comments
[ 4.9 ms ] story [ 13.2 ms ] threadAbout Face / The Inmates Are Running the Asylum
I found the part about criticism interesting. It doesn't work. Even Al Capone thought of himself as an underappreciated and misunderstood public benefactor.
I'm autistic though. Knowing what to do is far easier than doing it when you have crippling social anxiety.
I do think that one bit mentioned above was incredibly helpful though. I have quite a few more friends than I used to. I was actually always interested in most conversation topics I just started paying more attention to when its my turn to talk and let other people drive the discussion.
"Software Craftsmanship", McBreen. Take pride in your work.
Awesome read.
A Philosophy of Software Design by John Ousterhout, short book, quick read. I'll be rereading it once I figure out which bookshelf my wife hid it on (she doesn't like my bookstack approach to "organizing" and moved many things to shelves while I wasn't paying attention).
In those last 70 pages, the author advocates strongly for lengthy comments which felt excessive and often unnecessary to me. Here's an example from page 124:
With all that, John Ousterhout is a very knowledgeable person, so maybe the book deserves some close look.
1. "Object Thinking" by David West (http://davewest.us/product/object-thinking/)
2. "Introduction to Computing" by David Evans (free PDF available: https://computingbook.org/)
3. "Data Model Patterns: Conventions of Thought" by David Hay (https://www.amazon.com/Data-Model-Patterns-David-Hay/dp/0932...). He also gives a great talk about this here: https://www.youtube.com/watch?v=fLFXewSpltw
What was your favorite takeaway from the book?
Software Design For Flexibility
A Philosophy of Software Design
A bit of a look into how your computer works as a whole, from the CPU, through assembly, how C is translated into this assembly, a bit about caches, Amdahl's law, virtual memory, processes, threads, I/O and a dozen other things.
<https://www.pearson.com/store/p/computer-systems-a-programme...>
"The Complete Problem Solver", "Change by Design", "The Design of Everyday Things", "Jobs to Be Done", concepts like non-consumption. Questions that confirm that feature requests are valid and avoid solving Y problem when the actual problem is X. Thought processes to prioritize work and focus on what matters.
Example: https://news.ycombinator.com/item?id=26814150
Then books, concepts, and mindsets that help software engineers reap the reward of the software they write. Marketing, sales, prospecting, pricing, communication.
I believe there is a huge quantity of beautiful, idiomatic, code that solves no real problem, and a huge number of software engineers who have trouble monetizing their skill, or get stuck in unfulfilling roles because they have not found a way to shape an interesting one for themselves.
A few examples of threads searching for answers one usually answers through piecing together many resources, books, and life experiences:
https://news.ycombinator.com/item?id=26805216
https://news.ycombinator.com/item?id=26650563
https://news.ycombinator.com/item?id=26550896
https://news.ycombinator.com/item?id=26465891
https://news.ycombinator.com/item?id=26446169
https://news.ycombinator.com/item?id=26366426
Considering that software isn't just a branch, but a current "engineer's engineering", the more complex, flexible, powerful area, a good software engineer should strive to maintain and expand his knowledge in other areas as well. Physics(actually, natural sciences) and math, and also other traditional branches of engineering can provide a lot of useful material. Search there too.
"Quantum Computing Since Democritus" is a good specific example, I think.
Really well written and an easy read. Examples in C but applicable to any language. At some point I was reading it once a year.