HACKER Q&A
📣 burhanrashid52

Top 10 Timeless Software Books That ChangedLife as Software Engineer?


Few months month ago, Someone asked on Twitter “Do you read programming books? If yes, why?”. You can read my answer in the tweet,

Here are mine, in order of how a developer starts their journey, from basic to scaling problems:

1. Code: The Hidden Language of Computers (Pure Basic: Starting with Binary) 2. Working Effectively with Legacy Code (Dealing with an ugly codebase) 3. Refactoring Improve the design of the existing codebase (Making changes safely without breaking the code) 4. Test-Driven Development (TDD) (Once you’ve learned all the above, you always start writing tests first) 5. Head First Design Principles (Terminology and concepts for maintainable and extendable design) 6. Algorithms to Live By (Algorithms are fundamental ideas before we write any code) 7. Git Pro (Software cannot run without a Version Control System (VCS). We use it every minute of our working day) 8. Your Code as a Crime Scene (Finding problems in the code using code history) 9. Data-Intensive Applications (Databases are everywhere) 10. Software Engineering at Google (Addressing the biggest scaling problems)

Honorable Mentions: 1. Clean Code (Writing code that is easy to understand by other developers) 2. The Soft Skills (Coding alone is not enough to be a great software engineer) 3. Peopleware (Managing software teams).

Also, I am planning to write a short book summarizing all the important points from these above books. If you are interested in getting one or want to be part of an early reader, please email me at burhanrashid5253@gmail.com.


  👤 gwnywg Accepted Answer ✓
'A philosophy of software design' by John Ousterhout, great book which provides good understanding of what complexity in software means. Very concrete and short.

👤 dejv
The Pragmatic Programmer - I read this book when I was programming professionally for maybe 5 or so years, so I already had my basics covered, but reading this book really expanded my horizons on what it means to create software profesionally. I read, maybe, 100 books about programming since and before then, but no other book changed my thinking that much like this one.

👤 dpflan
Thanks for the list, here it is again:

1. Code: The Hidden Language of Computers (Pure Basic: Starting with Binary)

2. Working Effectively with Legacy Code (Dealing with an ugly codebase)

3. Refactoring Improve the design of the existing codebase (Making changes safely without breaking the code)

4. Test-Driven Development (TDD) (Once you’ve learned all the above, you always start writing tests first)

5. Head First Design Principles (Terminology and concepts for maintainable and extendable design)

6. Algorithms to Live By (Algorithms are fundamental ideas before we write any code)

7. Git Pro (Software cannot run without a Version Control System (VCS). We use it every minute of our working day)

8. Your Code as a Crime Scene (Finding problems in the code using code history)

9. Data-Intensive Applications (Databases are everywhere)

10. Software Engineering at Google (Addressing the biggest scaling problems)

Honorable Mentions:

1. Clean Code (Writing code that is easy to understand by other developers)

2. The Soft Skills (Coding alone is not enough to be a great software engineer)

3. Peopleware (Managing software teams).


👤 jFriedensreich
i would say cleancode is a counter example as most devs that read and like it just go through a phase of being unbearable and confused before figuring out their error and giving up. my absolute mind changer book was joe Armstrong's programming for a concurrent world, even without wanting to go into beam development this will change the perspective of devs in a profound and fruitful way.

👤 hrunt
For me, two books that changed how I thought about software were (and I may date myself here):

1. Advanced Programming in the UNIX Environment[0]

This changed writing software from being about the code I was writing to being about the underlying systems my code was interacting with. My favorite little feature I learned about was the ability to pass open filehandles between processes (not threads, but processes), which I later used for open connection caching in Usenet systems.

2. Object Oriented Perl[1]

The mind-bending part of this book for me was when Conway explains about using structures other than hashes (dicts) as Perl objects. Arrays were interesting, scalars slightly more so, but then functions ... as objects. This one chapter brought clarity to functional programming that I never got from any other explanation.

All the other books listed here are on the list two, but these were two books about specific mechanics of software development that were worth so much more outside of their respective languages.

(edited to add links)

[0] https://www.pearson.com/store/p/advanced-programming-in-the-... [1] https://www.manning.com/books/object-oriented-perl


👤 3np
Hacking: The Art of Exploitation (ISBN 1-59327-007-0), Jon Erickson

Really helped me bridge the gap with low-level, debugging, and C approx half a lifetime ago.


👤 sailorganymede
K&R C has to be my pick. I love it because it not only teaches you C and how to implement some of the standard functions but also there's enough pearls of wisdom in there to really help you improve as a programmer.

👤 loloquwowndueo
In another thread I mentioned Peopleware: productive projects and teams. Even the best programming book in the universe won’t help if the environment, leadership and team don’t support your efforts. this book is about that and how to give creative knowledge workers the environment and tools they need and then get out of their way and keep others out of their way as well.

A great read whether you’re wearing a programmer hat or a manager hat.


👤 belter
I would not say the books of Diomidis Spinellis are timeless or that will change your life as Engineer. But always though they do not deserve the low ratings, and that as an author, he is very unfairly judged. So I am adding these three to this thread.

"Code Reading: Open Source Perspective" - https://www.goodreads.com/book/show/529511.Code_Reading

"Code Quality: The Open Source Perspective" - https://www.goodreads.com/book/show/169414.Code_Quality

"Effective Debugging: 66 Specific Ways to Debug Software and Systems" - https://www.goodreads.com/book/show/26720867-effective-debug...


👤 zmgsabst

👤 nephrenka
There are two books which I keep coming back to learn from:

* Structure and Interpretation of Computer Programs: SICP changed the way I view programming. It's an excellent intro to the mindset of solving problems with code and how to iteratively build up a software design. You need to be comfortable with Scheme, though, in order to get the most out of the book.

* The Mythical Man-Month: Not strictly about programming but more on how to succeed with software projects. Hence, The Mythical Man-Month is more about people than code, which is why it has aged so well: people is a fairly stable construct.


👤 okhobb
'Expert C Programming: Deep C Secrets' by Peter van der Linden

👤 jonstewart
_The Mythical Man-Month_ by Fred Brooks is a short, easy read and remains packed full of timeless truths. His separate essay “No Silver Bullet” is included as an appendix and clarifies which problems to attack. A combination of improvements in tools, languages, and practices over the decades since have led to dramatic improvements since that essay, but, still, the problems of understanding and communication remain.

👤 originate
Agreed, mythical man month should be on all software book lists.

I would also include: Design Patterns: Elements of Reusable Object-Oriented Software


👤 sgbeal
Not a book, but an article: Herb Sutter's "What's in a Class?" completely changed the way i thought about OO programming and still holds up today.

<http://www.gotw.ca/publications/mill02.htm>

PS: plus anything by C++ guru Scott Meyers.


👤 ahmedhosssam
"Programming: Principles and Practice Using C++" by Bjarne Stroustrup, the creator of C++.

I learned programming first time from this book and I think I'm so lucky that I've done it. The book is about philosophy and the mindset of programming more than introducing some tools or techniques, so we can consider it as "timeless".


👤 burhanrashid52
I forgot to mention my answered tweet. So here it is : https://twitter.com/burhanrashid52/status/169351610891202580...

👤 maxisaurus
It's more about engineering management but 'Accelerate: Building and Scaling High Performing Technology Organizations' by Nicole Forsgren (Github VP), Jez Humble and Gene Kim is a must-read.

👤 ChrisArchitect
Related thread:

If you could only have one programming book on bookshelf what would it be?

https://news.ycombinator.com/item?id=38229464


👤 quijoteuniv
The Linux Command Line

by William Shotts


👤 igibbs
'Elements of Programming' by Stepanov and McJones

'Software Fundamentals' by Hoffman and Weiss,

'Writing Solid Code' by Maguire,

'Code Complete' by McConnell


👤 MaysonL
Two by Nicklaus Wirth: Algorithms + Data Structures = Programs Project Oberon: The Design of an Operating System and Compiler

👤 neillyons
Unit Testing Principles, Practices, and Patterns

by Vladimir Khorikov


👤 grego61
"The Little LISPer", by Daniel Friedman, brought FP home for me.

👤 pknerd
Can you edit and reformat the text by adding breaks?

👤 lukehollis
For me, "Hackers and Painters," by far.

👤 Terretta
@burhanrashid52

In general, we should not be using HN with LLM copy. However, I can suggest a technique for you to help you accelerate your effort towards a book and the "hard part" of getting a professional editor and publisher.

Using GPT-4, which has a synthesized 'understanding' from reading endless reviews of such well known material ...

1. Provide the list of books as recapped in the comments below, with the prompt:

Create a list of the top 3 principles or takeaways from each of the 13 books. List only the principles, not the books they are from.

You should get about 35 - 38 principles in a list numbered 1 - 36 or so.

2. Group them with a prompt like:

What 5 overall themes can these 38 principles be combined into?

You should get five buckets with an explanation of each bucket.

3. If anything is misbucketed, tell it the bucket changes you want, for example:

Version Control should come with Testing and Maintenance. Data Management and Scalability go together better.

4. Now put the 40 principles into the buckets:

Using these 5 themes and their explanations as sections and intros, organize the relevant items from the 36 principles as bullets under each of the 5 themes.

You should end up with 5 solid book sections and enough bullets you can see how to break into 2 - 3 chapters per section of 2 - 3 good topics each.

(I'm not copy pasting an output here, but results from the prompt recipe above pass a first draft sniff test.)

5. Pick two or three of those you, personally, can write about in your own voice not using GPT-4, and without referencing source material, and write a first draft. Do not use an LLM.

The point here is to let your own view and originality and voice shine, using the material you are most confident about, to "sell" an editor that you are expert enough for the whole book

6. With this outline and sample short chapters, submit a book proposal to publishers, who, if accepting, will have early feedback that will help you have less rework, and will also have an signing bonus and/or royalties advance for you to support you while you write.


👤 zabzonk
all i can say is ... no

i would be interested in stopping you writing your book - i really do not think you have any idea about software development


👤 sys_64738
K&R

👤 dev_0
Did you get this booklist from ChatGPT?