Choosing a career in tech. is choosing an endless life learning. But, then again, which career isn't like that? Improvement is critical after all.
The Pragmatic Programmer
This book doesn't focus on any one programming language but explains logic and provides wisdom for all languages. Topics include writing code, developing a great team, managing expectations, how expensive tools don't produce better designs, etc. A book by developers, for developers - not one to miss. Also, check out https://pragprog.com/tips/.
Refactoring: Improving the Design of Existing Code
Why and when do you refactor? How do you structure classes, methods, etc.? What are unit tests? How to refactor tools? This books takes you through it all! The examples are in Java, but can be applied everywhere.
Code Complete: A Practical Handbook of Software Construction
Wow, 960 pages! Every aspect of software development is contained in this book - code structure, code formatting, variables, methods, team management, etc. The amount of knowledge in this book will make you thankful you picked it up.
Peopleware: Productive Projects and Teams
A book on managing and motivating programmers, not about programming itself. Software development is not an assembly line process. It's a creative process!
Head First Design Patterns
13 essential patterns of basic design explained with plenty of examples and illustrations. It's not another book with endless pages of text blocks. Hand-drawn diagrams and illustrations keep you engaged while learning the concepts.
Clean Code
This focuses on how to write code that is easy to read and maintain, by a human being. It contains examples in Java that are helpful to illustrate the concepts.
Working Effectively with Legacy Code
Legacy code is not ideal to work with but most developers will have to deal with it at some point or another. For those who understand how to approach this the right way, working with legacy code can potentially be an exciting adventure! This book will explain how to examine and stabilize legacy code.
A Philosophy of Software Design
This newer book introduces programming principles that lead to good, maintainable programs. The book does not focus on any particular programming language. The concepts explained are widely applicable.
Conclusion
Do you have other books to add to the list? As potential software developers are making their way into the industry, new editions and new books are being written. What are the ones that have to be read? ...since one person can't have time to read them all.
Happy coding!
Top comments (46)
Great article! I love Pragmatic Programmer, I refer to the tips regularly pragprog.com/tips/
I would also recommend Software Engineering at Google, it's a fantastic reference for everyday work.
I also firmly agree! It is more high-level than the average book on software development, yet adds so much value to different domains (testing, metrics, code analysis ...). And it really explains in-depth how Google approaches the different aspects of software engineering. An absolute cracker!
I agree with Kimmo on Software Engineering at Google! Take a look at that:)
thanks for the link and suggestion! I will definitely look into it and add it to the article <3
97 Things Every Programmer Should Know - This book covers wisdoms from experienced programmers who point out the key skills and techniques required.
97 Things Every Programmer Should Know
Thanks for the link
i second this. Just a lot of best practices and its very digestible.
Is still my absolute favourite programming quote by far and will likely continue to be forever. That book really is the "art of war" of programming :D
Ditch Clean Code, but otherwise it's a good list.
We really should be actively working to deplatform "Uncle Bob" not inflicting him on the next generation.
Thanks for the suggestion :) always appreciated
Why should we "deplatform" Uncle Bob?
Why is that? I am 1/3 through it and was able to get some inspiration.
Great recs! I'd also add (while not as pragmatic to developing day-to-day programming skills) the excellent "Masterminds of Programming", by Biancozzi and Warden (https://smile.amazon.com/Masterminds-Programming-Conversations-Creators-Languages/dp/0596515170/ref=mp_s_a_1_1?crid=1XX8IL4F0BZRN&keywords=masterminds+of+programming&qid=1648103695&sprefix=masterminds+of+Programming%2Caps%2C152&sr=8-1). It's a series of interviews with the designers of different programming languages, partly trash-talking each other but also with some fascinating insights into what trades and objectives go into different languages, their features, and their quirks.
Thanks for the suggestion and links :) I will definitely look into it
Refactoring in it's essence is quite simple. I have been planning on reading Fowler's book on it, but I just can't understand how they made an entire book of a simple concept like that. Don't get me wrong, I love the concept of refactoring, but it's something that doesn't require an entire book to understand. Having read some of his previous books, I will most likely never read this one as they are not the most intriguing, really.
If you're interested in topics beyond just coding, I would recommend Domain Driven Design: : Tackling Complexity at the Heart of Software by Eric Evans. A must read for any great programmer and language agnostic. Also, Clean Architecture , by Robert C. Martin who also wrote Clean Code and Clean Agile (amongs other things). It contains things like the best description for SOLID principles, which are heavily used in his idea of clean architecture.
People interested in DevOps should definitely read Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations and The DevOps Handbook, for starters. There are other great books about DevOps too, and the ones I mentioned focus heavily on teaching the principles of DevOps at a team / organizational level.
There's one book about development I think I could recommend and that's Dave Farley's Modern Software Engineering, which is also quite language agnostic and speaks more about how to work iteratively and how to adapt to a learning mindset.
Thanks for the recommendations :D
From your list I've already read through the Clean Code years ago and thinking about the next book. I'm considering the Pragmatic Programmer, Code complete and Working Effectively with Legacy Code. The last one scares me even though it would be very helpful in my work in the last year. Thankfully I don't need it for now, but may need the knowledge later on in my career. I'll probably go with Code complete for now on though.
Lately I've read through the "Data structures and program design using C++" and it was a journey for sure. Even though I knew most of the beginning, the later parts of the book cleared up a lot of things for me! I highly recommend it even if you don't work with C++! :)
nice :)
Head First Design Patterns is absolutely an incredible resource. The examples are useful in a more abstract sense (if you can separate Java from concept, you're good!), and the tone is playful and readable.
I'm also a fan of Clean Code by Robert Martin, and Composing Software by Eric Elliot. I have a "top 50" list saved as ebooks on my tablet - even on vacation or on the road, nerd-reading is the best reading!
What are some of the books you have on your top 50? 🤔
I think apprenticeships patterns (programmingbooks.dev/#apprenticesh...) and Pragmatic thinking and Learning (programmingbooks.dev/#pragmatic-th...) are two must read books. The earlier you read them in your career the better.
Thanks for the links and recommendations
On my side I’ve just finished the Art of logic by Eugenia Chang. It’s not really about programming per se but this book give me a sort of wisdom on how to think, how to solve issues and how to argue. And it was a really fun, and great writing book!
Thanks for the recommendation :) Non-programming books and programming books are both useful in its own ways