12 ms·
Ask HN: 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.
- nephrenka 3y agoThere 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.
- MaysonL 3y agoTwo by Nicklaus Wirth: Algorithms + Data Structures = Programs Project Oberon: The Design of an Operating System and Compiler
- maxisaurus 3y agoIt'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.
- dejv 3y agoThe 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.
- buster 3y agoTotally agree. If I had only one book to give new engineers, it'd be this one.
- burhanrashid52 3y agoThe Pragmatic programmer is actually a short summaries of all those top 10 books :D I wrote it about here : https://burhanrashid52.com/the-pragmatic-programmer/ https://burhanrashid52.com/the-pragmatic-programmer/
- neillyons 3y agoUnit Testing Principles, Practices, and Patterns by Vladimir Khorikov
- burhanrashid52 3y agoNice!! I read Working effectively with Unit Test by Jay Field. Very short and insightful read. DAMP vs DRY was eye opener for me. Wrote about it here : https://burhanrashid52.com/working-effectively-with-unit-tests/ https://burhanrashid52.com/working-effectively-with-unit-tes...
- dev_0 3y agoDid you get this booklist from ChatGPT?
- dvfjsdhgfv 3y agoI don't think so as he got at least one title wrong: Head First Design Principles should be Head First Design Patterns.
- harel 3y agoI got that book when it came out, and I quite enjoyed it. Their presentation of material was quite different at the time.
- mahalex 3y agoRight, because ChatGPT is never wrong.
- dvfjsdhgfv 3y agoIt is very often wrong, but (at least ChatGPT4) outputs proper names correctly. Principles/Patters may seem similar for someone who hasn't been around long enough to see the whole hype cycle of "Gang of Four" seminal work.
- burhanrashid52 3y agoNo, I did not. Making grammar mistakes is blessing now a days :)
- quijoteuniv 3y agoThe Linux Command Line by William Shotts
- scop 3y agoGlad to see this mentioned. Still keep it on my desk. This book strikes the perfect balance between reference and introductory reading.
- zmgsabst 3y agoI really enjoyed Tragic Design. https://www.amazon.com/Tragic-Design-Impact-Bad-Product/dp/149192361X https://www.amazon.com/Tragic-Design-Impact-Bad-Product/dp/1...
- 3np 3y agoHacking: 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.
- ostenning 3y agoI enjoyed this one too. I remember reading about the NOP sled and it blowing my mind
- metaltyphoon 3y agoStill have this book from over a decade ago. Never read it. Is it still relevant?
- lincpa 3y ago[dead]
- gwnywg 3y ago'A philosophy of software design' by John Ousterhout, great book which provides good understanding of what complexity in software means. Very concrete and short.
- garethrowlands 3y agoYes, this book is excellent. And it's an antidote to some common advice that really isn't very good.
- burhanrashid52 3y agoYeah I feel the same. Its more of a philosophy. Its good to learn but hard to implement in this fast pace development process. It make sense if you have big team which job is to assess the quality of the code
- rgoulter 3y agoI liked the books emphasis on "interface" vs "implementation", and how this affects complexity. But one tidbit I did like from the book was along the lines of "if every use case involves the same action, it would be simpler to incorporate that action". (e.g. Something like if ".delete()" were to fail if the file didn't exist, and if every invocation would be like "if .exists() { .delete() }", then it'd be simpler to have a method without the "fail if file didn't exist" requirement).
- austin-cheney 3y agoThat sounds like DRY, don’t repeat yourself. Taken to another level I try to think of this as instruction elimination. Where can I eliminate the most instructions, still pass all my tests, and then compare execution speeds? Instruction elimination and DRY are basically the same things in practice but the former produces a more aggressive and utility focused mindset. I find when I think about large applications with instruction elimination mindset I am constantly churning on refactoring as requirements increase but the code size grows so very slowly that there is less to maintain and test automation continues to be measured between less than 7 seconds and up to 2 minutes depending upon the scenario and number of machines involved.
- dpflan 3y agoThanks 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).
- nephrenka 3y ago> 8. Your Code as a Crime Scene (Finding problems in the code using code history) There's a brand new 2nd edition on its way: https://pragprog.com/titles/atcrime2/your-code-as-a-crime-scene-second-edition/ https://pragprog.com/titles/atcrime2/your-code-as-a-crime-sc...
- dpflan 3y agoAnd there is a current post on the frontpage about if you could have only 1 book: If you could only have one programming book on bookshelf what would it be? https://news.ycombinator.com/item?id=38229464 https://news.ycombinator.com/item?id=38229464
- tester756 3y ago>4. Test-Driven Development (TDD) (Once you’ve learned all the above, you always start writing tests first) I've seen like bilion discussions about TDD and I still dont understand why is it so overhyped. Additionally it sucks that for some people you either do TDD or dont write tests at all (what the f...., indeed) This whole red-green step in TDD makes complete no sense when you're writing new code. The only value provided by TDD when writing new code is that you're forced to think from caller/user perspective, so it makes your API design better, that's it.
- sys_64738 3y agoK&R
- igibbs 3y ago'Elements of Programming' by Stepanov and McJones 'Software Fundamentals' by Hoffman and Weiss, 'Writing Solid Code' by Maguire, 'Code Complete' by McConnell
- burhanrashid52 3y agoWow!! All this new to me. Never heard of them. Will check that out.
- fuzztester 3y agoCode Complete is one of the best books for beginners to improve their general, non-language-specific skills, IMO, though it does have language snippets as examples, and even though it is somewhat dated. The principles in it are timeless, though. I have read both the 1st and 2nd Editions, many years ago. IMO Edn. 1 is better.
- jonstewart 3y ago_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.
- metaltyphoon 3y agoAlways heard about this book so I got the anniversary edition. Amazing book.
- burhanrashid52 3y agoHow is it different from peopleware ? To me its feel the same.
- loloquwowndueo 3y agoIn 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.
- burhanrashid52 3y agoYeah…half of approaches the book talk about is inperson offices which is changing is right now.
- loloquwowndueo 3y agoAnd the mythical man month was written in the age of mainframes, yet remains relevant.
- ahmedhosssam 3y ago"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 3y agoI’ve heard about this book but didn’t read because I didn’t got chance to work on a C++ project.
- okhobb 3y ago'Expert C Programming: Deep C Secrets' by Peter van der Linden
- jFriedensreich 3y agoi 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.
- halkony 3y agoAgreed on Clean Code. I remember nothing practical from that book. Its principal value is that it looks nice on my shelf. Watching Bob Martin's talks, he just likes ranting about computers and doesn't give actionable advice. However, he was one of the first "tech" authors I was exposed to, so I guess the the book itself is good for marketing. Maybe it's accessible enough for beginners. But now the book is certainly worthless as a reference or refresher to me.
- sailorganymede 3y agoK&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.
- burhanrashid52 3y agoWhat is K&R ?
- treme 3y agohttps://www.amazon.ca/Programming-Language-2nd-Brian-Kernighan/dp/0131103628 https://www.amazon.ca/Programming-Language-2nd-Brian-Kernigh...
- originate 3y agoAgreed, mythical man month should be on all software book lists. I would also include: Design Patterns: Elements of Reusable Object-Oriented Software
- burhanrashid52 3y agoI didn’t read mythical man month because it felt similar to peopleware. The classic design pattern book is very jargon heavy. Not for someone who is just starting out.
- zabzonk 3y agoall 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
- burhanrashid52 3y agoThanks
- pknerd 3y agoCan you edit and reformat the text by adding breaks?
- burhanrashid52 3y agoI forgot to mention my answered tweet. So here it is : https://twitter.com/burhanrashid52/status/1693516108912025802 https://twitter.com/burhanrashid52/status/169351610891202580...
- ChrisArchitect 3y agoRelated thread: If you could only have one programming book on bookshelf what would it be? https://news.ycombinator.com/item?id=38229464 https://news.ycombinator.com/item?id=38229464
- hrunt 3y agoFor 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-unix-environment/P200000000628/9780321638007 https://www.pearson.com/store/p/advanced-programming-in-the-... [1] https://www.manning.com/books/object-oriented-perl https://www.manning.com/books/object-oriented-perl
- burhanrashid52 3y agoOn a similar note, the book crafting interpreters on build programming language changed my perspective on the day-to-day code I read.
- sgbeal 3y agoNot 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 http://www.gotw.ca/publications/mill02.htm> PS: plus anything by C++ guru Scott Meyers.
- lukehollis 3y agoFor me, "Hackers and Painters," by far.
- Terretta 3y ago@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.
- burhanrashid52 3y agoIt's not an LLM copy. I wrote it all myself. Most of the book I've already summarized here: https://burhanrashid52.com/reading https://burhanrashid52.com/reading Thanks for the advice, will definitely try it out.
- tmaly 3y agoI have used the same technique to summarize survey results and to look for new books to possibly read. It works well for the most part. GPT with its compression leaves out all the stories and metaphors that make the content easier to remember and relate to.
- belter 3y agoI 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 https://www.goodreads.com/book/show/529511.Code_Reading "Code Quality: The Open Source Perspective" - https://www.goodreads.com/book/show/169414.Code_Quality 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-debugging https://www.goodreads.com/book/show/26720867-effective-debug...
- grego61 3y ago"The Little LISPer", by Daniel Friedman, brought FP home for me.