Ask HN: Name 3-5 books that had the most impact on your career and knowledge?

254 points by dondraper36 ↗ HN
Even though there are literally thousands of books on software engineering, not many are really useful or career changing. That said, let's try and name the books that you consider to be important in your career, how you understand the field, your current skills and depth of knowledge.

Let me start:

1. Designing Data Intensive Applications

This book doesn't need any additional praise, but it's just brilliant how it manages to be both highly technical and very readable (and even capturing).

2. The Pragmatic Programmer

I wish I had read it years ago. It reads like a great conversation with an incredibly experienced friend of yours

3. Philosophy of Software Design

It's debatable whether this book is the better replacement for Clean Code, but I really like how nuanced and undogmatic it is.

It goes without saying that with such books it's often the case that you revisit some parts or delay until you have a usecase that includes the topic discussed in the book. This is especially true for DDIA.

What are your top 3-5? Please, also add your brief comments on how exactly this book changed you :)

90 comments

[ 0.26 ms ] story [ 180 ms ] thread
As a self taught developer there are only a few books I read early in my career that seriously impacted how I write code.

1. XML Schema by Priscilla Walmsley - https://www.amazon.com/Definitive-XML-Schema-Priscilla-Walms...

2. DOM Scripting by Jeremy Keith - https://www.amazon.com/DOM-Scripting-Design-JavaScript-Docum...

3. CSS Pocket Reference - Eric Meyer - https://www.amazon.com/CSS-Pocket-Reference-Visual-Presentat...

Most of the developers I have worked with in my career are absolutely terrified by tree structures. They will admit otherwise like some kind of pathological liar, but this is easily exposed and that's so unfortunate. A tree structure is just a data structure like any other and embracing that liberates you from a kind of Stockholm Syndrome.

Oh yeah, have to dig back the to heyday of O'Reilley. I think Webmaster in a Nutshell and Learning Perl were the ones I loved most dearly.
1. Head first design patterns

2. Javascript - The good parts

The Mythical Man Month by Fred Brooks

Professional SQL Server 2000 Programming by Robert Vieira

Programming BASIC for Tandy Computers by David A. Lien

1. Release it

Got me to start thinking about reliability and able to express my thoughts on it.

2. Design of Everyday things

Read it as a junior and it got me thinking about UX and putting the user first.

3. The Pragmatic Programmer

Another one I read as a junior that had some really interesting ideas in it. Along with Release it! it gave me the language to talk about the ideas as well.

Thinking about this now, I’m keen to give the Design of Everyday Things a read. I now work in a different area and it’d be interesting putting it in that light.

I would say the technical books can be important (esp. higher level ones, like DDIA), but the bigger impact can be getting more perspective on the business or product side.

1. Lean startup - Eric Ries

2. Inspired - Marty Cagan

3. Sprint - Jake Knapp

4. Creativity inc. - Ed Catmull

5. Range - David Epstein

1. Fundamentals of Physics by Halliday, Resnick, Walker

2. Quantum Mechanics by Eisberg, Resnick

3. Mathematical Physics by Arfken, Weber, Harris

4. Introduction to Statistical Learning with R by Hastie et al.

5. Deep Learning for Coders by Jeremy Howard

I want to self-learn physics from scratch. I have a degree in mathematics, but my understanding of physics is embarrasingly shallow.

Is Fundamentals of Physics by Halliday et al a good starting point for me?

I am a mathematician, too and trying to learn physics in my spare time. I don't like the 1000 pages tomes targeted for undergraduates, the Halliday book is well-liked, but since you already have a degree in mathematics, you may get a bit bored.

I like the No-Nonsense Series by Jakob Schwichtenberg a lot. I worked through the Classical Mechanics book already and found that it teaches the conceptual framework very nicely. I plan to go through the Electrodynamics and Quantum Mechanics books in the series and then work through some other books with exercises (there are no exercises in the Schwichtenberg books, which usually is a no-go for me, but I am reading them to get the concepts in an uncluttered fashion.).

The best classical mechanics book IMO is the one by John R. Taylor, I have worked through 2/3 of it with nearly all exercises years ago, I can heartily recommend it.

For Electrodynamics I would recommend the book by Griffiths and for QM there is a very promising new book by Barton Zwiebach which has been created based on a course he is giving at MIT.

I wish you good luck with your learning journey!

Thank you! I'll make sure to check these out first.
> Deep Learning for Coders by Jeremy Howard

Can you discuss a bit more on this choice?

1. Data Analysis with Open Source Tools

This learnt me how to analyze "small" datasets which have helped me incredibly in my career. Technology wise is very out of date, but the concepts are still valid.

I think it's hard to get more with less investmtent. Really underrated book.

2. Expert Oracle Database Architecture

If you have to develop on Oracle (something I undestand it's not very popular in HN), you have to read it. It's a great book that delves into the why's and not only into the how's.

3. Software Estimation: Demystifying the Black Art.

Only the "cone of uncertainty" concept would make it a must-read. It provided me a framework for doing estimations and at same time, to worry less about them. It has helped me to divert lots of uncomfortable conversations about "when" towards a much more productive "what-and-why-is-needed".

I bought the Data Analysis book thanks to your post.
The single most important programmer's book that I have ever read is the UNIX Programming Environment by Kernighan and Pike.

I read this as a teenager in the late 80's and it was an epiphany for me to discover what was possible to do with rather simple tools.

Probably not the answer you are looking for but Carnegie's 'How to Win Friends and Influence People'.

So much of our career path is decided on relations more so than deliverables, also self-promotion is key but it doesn't come naturally for everybody.

The idea that I shouldn't self-promote (because somehow it felt like bragging) and that people will notice if I do amazing work but stay silent was probably one of the most negatively impacting inhibitions I had at the beggining of my career. Also the book made me realize how 'utilitarian' and sometimes selfish I was in communication with others.

I had an amazing manager as a Junior who gifted me that book, it really gives you some perspective. We are often selfish listeners and are not committed to acknowledging the other in a 2 way relation. Once you condition yourself not to do that then building relations is way easier, and the space for self-promotion occurs naturally without a feeling of humblebrag.

I’d recommend reading this and then immediately reading Nonviolent Communication by Marshall Rosenberg.

Carnegie opened my eyes to how to communicate productively, but it’s also a really manipulative way of being.

Nonviolent communication comes from a position of love and understanding instead of just getting what you want.

There is significant overlap, but where they differ, NVC is going to lead to better relationships especially with family.

this interesting! I did make many friends with Carnegie but non of them felt deep or were long lasting. I need to check out NVC
>Carnegie opened my eyes to how to communicate productively, but it’s also a really manipulative way of being.

I find it odd that people keep raving about this book. As you said it is a very manipulative and exploitative way. It is ok if you are just aiming for getting what you want. Instead I find Robert Green's books which callout and does not sugar coat anything.

I found Carnegie’s book terrible and impossible to finish. Though his advice (the main idea of each chapter) might be true, his supporting arguments are all purely anecdotal, are of dubious veracity, lacks nuance, and commit the logical fallacy of claiming correctness by bombarding you with examples that only repeat each other.

I’m still looking for a more science-backed book on influence and persuasion and I’m currently looking at Influence + Persuasion from the HBR Emotional Intelligence series. Would be happy to hear about others’ recommendations as well.

I’d like to also recommend Nonviolent Communication.

Like the other reply said: it’s an opportunity to switch one’s mindset from a manipulative one (getting people to… like you/whatever) to a mindset of serving what’s alive in them, and yourself.

It’s an invitation for a deeper alignment with one’s humanity and generates effortless compassion and understanding.

Leading to satisfaction much deeper than the one of getting your way.

Baden-Powell's "Scouting for boys", Jack London's "The Call of the Wild", The Commodore 64 Reference Manual... just to name a few. The first one because it lured me to the great outdoors, the second one because it pointed me where to go - I paddled the Yukon from Whitehorse to the Bering Strait with a water- and most likely bulletproof solar-powered "Virgin WebPlayer" and a hat/canoe-mounted camera to record it "all" (the camera was not totally waterproof so it died just before Eagle, the border town between Canada and Alaska...), the third one (which I actually destroyed way before I paddled that river) because it laid bare the soul of the new machine.

For the rest I just read whatever I can get hold of, I don't really have any "cornerstone books" - probably because I've seen too many of them rise to fame to later decline when the fad they promoted got out of fashion...

Thinking in Systems by D. H. Meadows

The Secrets of Consulting by J. W. Weinberg

Understanding SEO by F. Enzenhofer (wrote it myself, changed a lot for me)

Hehe nice self promotion
It's technically the truth, though :D - It's a book. - Had impact on the commenter's life
Never Split the Difference by Christopher Voss and Tahl Raz
* The C Programming Language. 2nd Edition. nuff said.

* Learn C++ in 21 days. May seem strange from the title, but this was the book that helped me really grok OO design. It's examples about mammals horses dogs and unicorns (!) have stick to me for ever.

* Digital Computers (this is a greek-only book, publish date was 1979 or something): We had this book for a course at our first year on the University. It introduced everything from transistors to logical gates to flip flops, to more complex circuts to a complete (teaching) ALU to writing ASM for that ALU. Understand everything was a revalation to me.

My dad gave me a copy of K&R when I was a senior in high school and that was quite the spiral into developing my love for computers even more. A true classic.
I had just graduated high school and was really into economics/finance and I wanted to automate some Forex trading.

K&R and Unix Programming we’re two of the few books in my local library that were about programming. My hacker career/life started with reading page one of K&R. I never looked back.

"Adaptive Web Design" by Gustafson. This is how the Web _should_ be made.

The Network one by Ilya Gregorik. There's just not a lot of other material that covers this and certainly not this thoroughly. This one is probably responsible for me "looking smart in front of others" more than any other book on the list.

"100 things every designer should know about people" by Weinschenk (sp?). Actually I take it back: _this_ is the most "look smarter than everyone" book you can read if you work anywhere around the web. Especially if you have to argue with designers.

I have a few more, but I'd start with those.

> The Network one by Ilya Gregorik. There's just not a lot of other material that covers this and certainly not this thoroughly. This one is probably responsible for me "looking smart in front of others" more than any other book on the list.

This one https://hpbn.co/ ?

Maybe not what the OP wanted to read but the book(s) that have had the most lasting impact on my career these past few years were some of Ellul's books, such as Le bluff technologique [1], which book builds on his entire career of writing about tech's effects on our life and our modern society.

It has "disenchanted" a lot of the tech-related stuff for me, and it has disenchanted most of our industry, for that matter (I'm a computer programmer, forgot to mention that). Still doing my small thing, getting my salary doing honest work, work which, hopefully, doesn't send anyone to prison nor enables some genocide half-away around the globe, so there's that.

[1] https://www.amazon.com/le-bluff-technologique/dp/2818502276

inky black pill, not for the faint of heart or casually happy
(comment deleted)
To be fair, I don't think 3-5 books suffice at all. So from the point of view of adding books no-one else has mentioned, from the point of view of C++ Software Engineer, a few of my favourites:

Code Complete 2 - McConnel

Professional Software Development - McConnel

Structure and Interpretation of Computer Programs (SICP) - Sussmann et all. (main artifact: Implement the scheme interpreter, not in Scheme, but in a language of your choice)

Algorithm Design Manual - Skiena

The Timeless Way Of Building - Alexander. Software patterns often refer this book, but the concepts used in software patterns generally are far more pedestrian in scope than Alexanders timeless vision for quality in architecture. Goes really well with this older book Notes On The Synthesis of Form.

Accelerate (Forsgren, Humble, Kim) gave me a way to quantify results and talk to execs about how a development org is performing, something I always found difficult before.

Domain Modeling Made Functional (Wlaschin) provided me with concepts and techniques that I've used practically every day since I read it, especially functional design patterns and DDD/CQRS without the jargon.

1. Founders at Work

2. Structure of Scientific Revolutions

3. The Myth of Sisyphus

4. How to Win Friends and Influence People

5. Design of Everyday Things

For me it was "Teach yourself...Assembler" - not because it was a great book or anything, but it was the first book I purchased to learn actual programming.

I don't think I even finished the book. (assembler is tedious and hard!) But it began a lifelong love of computers and software.

The Selfish Gene by Richard Dawkins changed my whole outlook when it revealed that cheating and stealing will inevitably happen in any complex system and is not a question of morality but a question of optimal allocation of resources.
= Out of the Crisis by Deming.

Everyone ought to read and absorb Deming. It's hands-down the most life-changing read I've ever come across, by a wide margin.

Dealing with life statistically rather than overreacting to randomness means it's possible to achieve much higher levels of effeciveness and productivity. Working with people to unleash their inner motivation is vastly superior to trying to carrot-and-whip them around.

Understanding that a specific process will yield a specific outcome, whatever outcome you wish for, is how to avoid getting the same result over and over while thinking you ought to see something different because gosh-darned if you aren't trying really hard!!

= Willful Ignorance by Weisberg.

This isn't that good a book, in that it doesn't cover very much content at all, but it really gave me a good intuition for what statistics and probability is about that has helped me understand more advanced things than I was able to before.

Both this book and Deming will take a few years to digest. You'll want to practise it in real life, then come back to read it again, then practise some more. Eventually the lessons will start to stick.

= Performance Modeling and Design of Computer Systems by Mor Halchor-Balter.

Despite the name, this is a book about queueing theory. You know, that branch of statistics that shows up literally everywhere, except nobody seems to understand that it does. I have been dabbling in queueing theory before this book, but the focus this book put on practical applications really made me understand it on a deeper level than before.

= Working Effectively with Legacy Code by Michael Feathers.

I didn't originally want to put this one in this list because it's so predictable, but I can't not. I keep coming back to it and re-reading portions of it every time I have to deal with tricky code. It's just that good at explaining clever ways to get things under test, so they can be worked on with confidence.

= How to Measure Anything by Douglas Hubbard.

What I really take away from this is how powerful it is to be able to estimate ranges that are true 90 % of the time. It's hard to convince others of what a superpower this is, but I hope to work with people who understand that some day.

In his later years Deming consulted with Gallery Furniture in Houston, and "Mattress Mac" has been one of the most respectable local entrepreneur/philanthropists for some time now.
I love "Working Effectively with Legacy Code" and recommend it at least once a month to someone working on non-greenfield projects with inadequate documentation and test coverage.
Also recommend Hubbard's How to Measure Anything. Background in social science & stats, so was familiar with the decision making logic before reading, but think the book is more straight forward than any other reference. (Similar in spirit is Tetlock's Superforecasters, but I think Hubbard will be easier for most people to relate to.)

My other mentions would be Algorithms to Live By (Christian and Griffiths), and Tufte's Visual Display of Quantitative Information (with a follow up of Doumont's Trees, Maps, and Theorems. Tufte I really enjoyed.

Thank you for the Deming reference -- will need to put that and Performance modelling on the list!

1. An anonymous poaster in an image board who was very very passionate about SWE to such a degree it made me passionate about it too.

2. https://www.tedinski.com/archive/

Is 1 a reference to the /prog/ poster?

If so, his functionalCS syllabus is some of the best content online.

Can you provide a link to the syllabus?
functionalcs.github.io/curriculum/
* Beyond Java, by Bruce Tate

Convinced me to leave Java and start doing Ruby instead. Did a lot more programming languages since then.

* Javascript the Good Parts, by Douglas Crockford

Taught me how to write better js. Of course since then the language has changed so much that this little booklet is completely obsolete, but for a brief period, this book was absolutely essential.

It's hard to single out a third book. No other books come close to these two. Most books are too thick and wordy and boring, and I'm not a fast reader. I'd love to list one of the books about design patterns here, but I never finished any of them, so I think I'm going with:

* Beginning Scala

I haven't actually done any big projects in Scala, but it was captivating, showed me how beautiful a programming language could be (but also how ugly, in later chapters), and changed how I think about programming languages. I still regret never having actually begun anything in Scala, although I still fear the complexity of its type system. The world needs a cleaner Scala.

> * Beyond Java, by Bruce Tate

> Convinced me to leave Java and start doing Ruby instead. Did a lot more programming languages since then.

So you did not like the book?

Of course I did. It convinced me to move beyond java.