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.
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).
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
Really helped me bridge the gap with low-level, debugging, and C approx half a lifetime ago.
A great read whether you’re wearing a programmer hat or a manager hat.
"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...
https://www.amazon.com/Tragic-Design-Impact-Bad-Product/dp/1...
* 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.
I would also include: Design Patterns: Elements of Reusable Object-Oriented Software
<http://www.gotw.ca/publications/mill02.htm>
PS: plus anything by C++ guru Scott Meyers.
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".
If you could only have one programming book on bookshelf what would it be?
by William Shotts
'Software Fundamentals' by Hoffman and Weiss,
'Writing Solid Code' by Maguire,
'Code Complete' by McConnell
by Vladimir Khorikov
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.
i would be interested in stopping you writing your book - i really do not think you have any idea about software development