“what are some must read books to be a better programmer?”
Summary of results
There are many books, articles, and other resources that can help you to become a better software engineer. Some popular choices include "Clean Code" by Robert C. Martin, "The Pragmatic Programmer" by Andrew Hunt and David Thomas, and "Code Complete" by Steve McConnell. These books provide practical advice and guidance on a range of topics, including design, testing, debugging, and refactoring.
The two most useful books I have read:
Code Complete by Steve McConnell - Really covers how to be good at the craft of writing programs and constructing software.
https://www.amazon.com/Complete-Microsoft-Programming-Steve-...
The Effective Engineer by Edmond Lau - Covers how to focus on what you work on based on the leverage it provides you.
I would start with "The Pragmatic Programmer". It's how I became a "professional" programmer. "Code Complete" is a book on construction. I dip into it when my IF statement has too many conditionals in the test. That sort of thing.
I'd also recommend "The Career Programmer": The only book I've seen that deals with a realistic view of programming in a corporate environment. For example, what to do when your boss stops you in the hall and asks, "We need a tool to do X. How soon can you get that done?" It's subtitled "Guerilla Tactics for an Imperfect World", which is _just_ what you need to break free of the fantasy land that books and classes put you in. (APress publishes this.)
And don't be fooled by the title: "My Job Went to India And All I Got Was This Lousy Shirt". It's the distilled experience of a programmer who spent a year (or two?) in India when his company outsourced code, and sent him to manage the new group. There are some really important tactics inside, like the chapter on "reading the boss's mind". You don't really, of course, but it explains how to capitalize on "wouldn't it be nice if we..." throw-away comments in meetings. (Pragmatic Programmers publish(ed) this one.)
Oh, and don't be shy about using the Internet Archive to sample all the books recommended in this thread. I haven't seen any bad recommendations, but you don't want to spend more money or read more pages than necessary. The IA will help you decide which books answer your needs the best.
Good luck!
I would start with reading another book. It is called "Code Complete: A Practical Handbook of Software Construction" by Steve Mcconnell[1]. Don't let the age of the book scare you. The advices given by this book is in large parts timeless and you will find if very inspiring and a great help to improve your code. At my former place of work, this book was given to all new coders (regardless of experience level) on their first day at work and their first task was to read it.
[1] https://www.amazon.co.uk/Code-Complete-Practical-Handbook-Co...
The top book imho is The Pragmatic Programer.
Here some other recomendations
- Designing Data-Intensive Applications
- Tidy First?: A Personal Exercise in Empirical Software Design
- A Philosophy of Software Design
- Refactoring UI
- The Software Engineer's Guidebook
No matter how long you've been a programmer, you're always looking for new ways to hone your craft and learn new techniques. One of the best ways to do that is by reading books on programming—as in, books that are actually about programming. Here's our list of 10 of the best.
1. Code: The Hidden Language of Computer Hardware and Software
2. Clean Code: A Handbook of Agile Software Craftsmanship
3. Refactoring: Improving the Design of Existing Code
4. The Pragmatic Programmer: From Journeyman to Master
5. Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability
6. The Mythical Man-Month: Essays on Software Engineering
7. Structure and Interpretation of Computer Programs
8. Introduction to Algorithms (The MIT Press)
9. Programming Pearls (2nd Edition)
10. The Art of Computer Programming
The book programmers brain contains a lot of tips on improving code reading skills - https://www.manning.com/books/the-programmers-brain
It depends on what are you vision of the "programming skills" and how you define a "better programmer". There is so much area of expertise to master them all..
You seems to have a certain inclinaison for scientific programming. I suppose it's in this area that you want to have better programming skill.
The book that I heard a lot about is the following one (it's on my shelf) :
- The Art of Computer Programming, Volumes 1-4, by Donald E. Knuth
Some books are more generals and provide insightfull tips that I found quite helpfull :
- 97 things every programmer should know, by a lots of people
- The pragmatics programmer, by Andy Hunt and Dave Thomas
- Clean code, by Robert C. Martin
If you want improve you skill about a particular programm language, the best is learn every kog and what happend under the hood of you language. Books, Video, any things that will help in that direction, it depends of your choice . Usually it takes time to improve.
There is many type of language and big difference inside those type : Scripting languages (python,bash,js...), compiled languages (c,c++,java,c#,...),...
If you know different tools you are more likely to be able to use the right tools for the right jobs.
But the real advise is to be doing some real stuff : face real world problem
Take care !
Reading books to become a better programmer is as effective as building muscle by looking at people lifting weights.
A few recommendations of truly good books about computer programming. That, or perhaps in general seeing work or prose of extremely skilled programmers, which lets one know, how much one still has to learn, avoiding ones own skill to plateau, because of thinking, that one already knows all there is to know.
I would split the books into two categories: those that improve the way you structure your code and deliver a software solution, and those that improve your technical understanding of the software platform and the computer you're using.
The first are books like Pragmatic Programmer, Mythical Man Month, Code Complete, Design Patterns, talks by Alan Kay on software systems and OOP, even Game Engine Architecture etc. A lot of the content there is distilled experience which is much faster to learn from a book than gain the hard way on the job.
The other books are practical deep dives. Here I would recommend a variety of books like Inside the Machine by Stokes, Computer Architecture by Hennessy, 21st Century C by Klemens, Crafting Interpreters by Nystrom, Compilers by Aho, Effective Java, Nature of Code by Shiffman, Ray Tracing Challenge by Buck, Hands on Hacking by Hickey, and others, depending on your interest and area of focus.
What are the other 4 top programming books?
Lots or reading / listening.
I normally listen to an audiobook on the way to work. Most of these are now software development books. The more I listen to the more ideas I'm exposed to. There are so many great books out there. I was once told a story about a guy my old boss fired because he tried to implement something he read about in a book. It gave me the idea that I shouldn't trust books for programming learning. That was stupid of me. I don't think that was the point of the story.
Then there is the idea that you don't skip over anything. If you want to use a library and you find your self getting stuck, then go to the docs and learn everything you can about that library. Get a good deep understanding. I've found that while this costs time up front it saves lots of time in the long run. Not only does it save time but prevents interruptions. Once you understand something you don't have to stop and think as often. This makes development much faster.
The other thing I've found that helps is practicing focus time. Setting aside time where all your distractions are blocked. I use blocking tools to give me blocks of time that I can't even open my email.
Every book I've read has given me something to think about at least.
Recent books:
Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F#
By: Scott Wlaschin
Get Programming with F#
A guide for .NET developers
By: Isaac Abraham
Learning How to Learn
By: Tesia Marshik , The Great Courses
Fundamentals of Software Architecture: An Engineering Approach
By: Mark Richards , Neal Ford
Stolen Focus: Why You Can't Pay Attention
By: Johann Hari
Stein on Writing: A Master Editor Shares His Craft, Techniques, and Strategies
By: Sol Stein
The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win 5th Anniversary Edition
By: Gene Kim , Kevin Behr , George Spafford
Understanding Software: Max Kanat-Alexander on Simplicity, Coding, and How to Suck Less as a Programmer
By: Max Kanat-Alexander
The Field Guide to Understanding 'Human Error'
By: Sidney Dekker
Ultralearning: Accelerate Your Career, Master Hard Skills and Outsmart the Competition
By: Scott H. Young
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
By: Martin Kleppmann
Clean Architecture: A Craftsman's Guide to Software Structure and Design
By: Robert C. Martin
The Goal: A Process of Ongoing Improvement - 30th Anniversary Edition
By: Eliyahu M. Goldratt , Jeff Cox
Thinking, Fast and Slow
By: Daniel Kahneman
The Complete Software Developer's Career Guide: How to Learn Programming Languages Quickly, Ace Your Programming Interview, and Land Your Software Developer Dream Job
By: John Sonmez
The Pragmatic Programmer: 20th Anniversary Edition, 2nd Edition: Your Journey to Mastery
By: David Thomas , Andrew Hunt
I would suggest that it depends on your platform, paradigm, and your experience level. SICP, Clean Code, Code Complete, The Gang of Four, DDIA, CLRS, etc. are all great books but their value, IMO, varies by environment, e.g., perhaps of different value to a web developer vs backend vs full stack. Certainly, these are of differing value to senior developers, who may use something like CLRS as a reference while it’s all “new” to someone just starting out. When I was hiring, I wanted folks who had written a lot of code, completed projects, understood support requirements and so forth. Yes, I asked them about what they had read recently. Yes, I expected them to keep up. But more importantly, show me you can code, explain your code, and deliver. Books help but practice helps more.
Most advice about programming is about writing code, but we rarely ever consciously consider how to improve at reading code. One way to do that is to read more code.
If you read really good code, and I mean really read it, like a book, and absorb it, then you will improve so much.
This kind of improvement is the most impactful, because you also spend most of your time as a programmer reading code than writing new code.
Also, if you become good at reading code, then you don't need documentation.
"how do I become one of the best programmers ever?"
focusing on learning and writing less articles on boards
That's exactly the author's point:
Most programming books suck.
Yet he has some recommendations:
But I do have this call to arms: my top five programming books every working programmer should own – and read.
They are:
Code Complete 2 [1]
Don't Make Me Think [2]
Peopleware [3]
Pragmatic Programmer [4]
Facts and Fallacies [5]
1 - https://www.amazon.com/exec/obidos/ASIN/0735619670/codihorr-...
2 - http://www.amazon.com/exec/obidos/ASIN/0321965515/codihorr-2...
3 - http://www.amazon.com/exec/obidos/ASIN/0932633439/codihorr-2...
4 - http://www.amazon.com/exec/obidos/ASIN/020161622X/codihorr-2...
5 - http://www.amazon.com/exec/obidos/ASIN/0321117425/codihorr-2...
Reading about programming makes you good at reading about programming. If you want a "guided project" to learn from instead, I can recommend
Getting better at being a programmer/developer is a mix of technical skills and people skills and you will do good in being better at both.
My I recommend checking out https://www.programmingbooks.dev.
The Passionate Programmer is still high up in my list. It's more about ways to get better at software engineering, and less about specific tools or technologies.
Depending on the tech stack you're interested in, I would also strongly suggest reading foundational books that go deep into that platform (e.g. the Java Language Specification if you're into Java [1]). These are not things you necessarily need to read end-to-end or understand completely, but your global understanding of your chosen platform will expand significantly.
Systems Performance by Brendan Gregg is another useful classic. While it's about performance, it touches upon a huge number of important topics (from memory allocation to pretty graphs), perusing it will make you smarter.
I think the biggest indicator of a good programmer vs a bad programmer is their propensity towards reading other peoples' code. We all love to write code, but it's only the best ones that read it. And by extension get better at reading it.
The traditional reply is complete either of these books and you'll be further than even an average Comp Sci BA:
- Structure and Interpretation of Computer Programs
- How to Design Programs (easier)
In reality, it strong depends on your specific domain and how old your company is. Doing embedded projects at home vs. quickly prototyping systems in Ruby vs. modifying an API for a large SaaS vs. lowering latency for trading vs. ensuring compliance at a bank... The demands are all very different, yet generally we don't write algorithms or implement data structures too often. Our languages and libraries typically offer optimized versions, we just have to know when and why to use them. And after it's built, adding extra features won't change that model.
The way everyone actually learns is by doing many projects, like an apprentice of old. Such a book could interest you (after) though: https://aosabook.org/en/index.html#500lines
I don't recall a book per se, although I read a number of them in the 90's (Code Complete, Pragmatic Programmer, ...). In my case, practice and the necessity of maintaining code led/forced/encouraged me to get better at writing code that was clear and (eventually) more robust. They might write about this, but until you're standing in that swamp watching the alligators approach that you are properly incentivized to get better.
But remember from The Soul of a New Machine, "Not everything worth doing is worth doing well. Everything not worth doing is not worth doing well..."
Two books that i can recommend;
1) A Method of Programming.
2) A Discipline of Programming.
Browse the EWDs and read those whose titles interest you. My favourites are those dealing with Program Correctness and Languages.
Note that understanding Dijkstra can be hard; so don't be discouraged if you don't "get" something at the first read.
Programming -- Principles and Practice Using C++ is one of the few must-read programming books in my opinion.
Even if you're a C++ expert, have 20 years in industry, etc. it's still an amazing example of beautiful technical writing.
Others have given a lot of good suggestions about books for general software engineering. Some book on how to structure code and some book on how to be a professional and some book on the human aspect of the profession would all be beneficial. Pick one that covers each of these areas and they’ll provide you a good foothold.
I’m surprised I don’t see more advice to read a language- or domain-specific book. If you know what type of technology you want to work on and what language(s) you want to use, I’d read a book or two to gain expert-level understanding of those languages or domains. I cannot tell you how beneficial it has been to me to read books covering all the intricacies of C, C++, and Rust. Not to mention countless pages of documentation covering the Linux kernel, shell scripting, etc. Even if you have great general software engineering skill, you still have to be able to quickly read, write, understand, and modify the code you work on. You never know when you might find yourself 50 files deep in an exploration of why some open source software behaves a certain way that’s really boiling your blood, or when you need to parse the code to find an undocumented feature you’re certain exists (or, if not, to hack it in). Knowing the language is very beneficial for this, and getting eyes on open source code to recognize common patterns is very useful.
Nobody becomes great overnight, it takes years to gain the knowledge and experience to be at the top in your field. These books would help you get there faster.
Here are some of the best tech books I read recently that I believe will make everyone a better Software Engineer:
System Design Interview — An Insider’s Guide
Grokking Algorithms An Illustrated Guide For Programmers and Other Curious People
The Manager’s Path: A Guide for Tech Leaders Navigating Growth and Change
Learning Domain-Driven Design: Aligning Software Architecture and Business Strategy
Algorithms to Live By: The Computer Science of Human Decisions
How to be a Programmer by Robert L. Read (and expanded by the community) https://github.com/braydie/HowToBeAProgrammer
It is a collection of short essays on particular skills that are applicable to programmers of different levels.
The introduction starts with:
> To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom he or she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one.
I will also point out that "How to debug" is the first thing in the list. It starts out with:
> Debugging is the cornerstone of being a programmer. The first meaning of the verb "debug" is to remove errors, but the meaning that really matters is to see into the execution of a program by examining it. A programmer that cannot debug effectively is blind.
> Idealists, those who think design, analysis, complexity theory, and the like are more fundamental than debugging, are not working programmers. The working programmer does not live in an ideal world. Even if you are perfect, you are surrounded by and must interact with code written by major software companies, organizations like GNU, and your colleagues. Most of this code is imperfect and imperfectly documented. Without the ability to gain visibility into the execution of this code, the slightest bump will throw you permanently. Often this visibility can be gained only by experimentation: that is, debugging.