Lately, several people asked me what books they should read to become better programmers.
They completed my lessons to Learn C# by Building a Simple RPG, and want to go further.
They want to have a career as a programmer. So, they want to know what books will help them reach that goal.
These are the 10 best programming books I’ve found over the last 30+ years. They’ve all made a huge positive impact in the quality of the programs I’ve created, and also in my career.
Get these books and you’ll know how to develop high-quality software that users can actually use. You’ll also learn how to manage your programming career. You don’t want to find yourself stuck in a dead-end job.
There’s even one book that will make you think of your programs from a completely different view-point, which will separate you from the herd of average “code monkeys”.
The best books to help you become a great programmer
By Steve McConnell
This book is the Bible of writing better software.
In “Code Complete”, Steve McConnell studies what has worked in successful, real-world projects, and tells you how to apply the best practices to the programs you write.
This book covers more than just coding practices. It teaches the timeless fundamentals. How to think like a great programmer.
After you read this, you’ll know how to plan and design your applications, how to write working code (that’s also easy to maintain), and how to quickly track down problems in a program.
If you’re ever interviewed by someone who was a developer in the 90s, when the first edition was printed, they may ask which programming books have influenced you. I can just about guarantee you that answering “Code Complete” will put your resume on the top of the pile. This was one of the first great books on programming practices, and was influential to so many of us who were programming back then.
By Kent Beck
“Extreme Programming Explained” covers the principles and philosophy behind many of the current best practices in software development (such as Agile, Lean, and Scrum).
The thing to remember about having a career as a programmer is that you need to be constantly learning and improving. This book shows you how to do that.
Lots of development teams use some form of Agile development. But it’s rare to see a team that takes the time to look at their process, and makes changes to improve it. Everyone seems to want a “recipe” they can follow, and never need to think about.
Don’t be that type of developer.
If you don’t invest a portion of your time and energy into getting better, you’ll be in the same position as a mainframe COBOL programmer in the 21st century – every big company keeps one around, until they finally manage to replace the last COBOL program with a modern system.
By Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra
So, you have two choices:
- You can use time-tested “design patterns” to help you quickly build a better program.
- You can waste your time “reinventing the wheel” (and often end up creating a “wheel” that doesn’t work well).
“Head First Design Patterns” shows you how to create elegant systems – ones that meet the needs of your users today, and will be easy to work with in the future.
You may not realize it, but your programs will probably last for years.
I wrote one website that’s been in use for over 14 years. If you don’t write code that can easily be understood by other programmers, you may end up personally supporting those old apps – and watching your career go nowhere.
Of course, like most practices, you can go overboard with design patterns. Sometimes you just need something small and simple.
Don’t over-architect your small programs.
But, when things get big and complex, check to see if there is an existing design pattern to follow. It will save you time and headaches.
By Robert “Uncle Bob” Martin
That’s my term for someone who “Writes A Lot Of Code”. Whenever their program has a problem, they just keep adding more code, until it looks like it works – at least, for now.
They never take a few minutes to get to the root problem, and fix that, or try to see if there is a simpler solution. Instead, they just add another big “if” statement to handle the specific situation they have a problem with.
The result is horrible code that is impossible to maintain.
“Clean Code” shows you the principles and practices to help you write systems you’ll be able to maintain and modify. Use them to write code you’ll be proud of – something you can happily show to other programmers (and managers at the places where you apply for a job).
Like I mentioned before, your program may have a long life. And someone (maybe even you) will need to change it in the future. With clean code, making modifications will be fast and simple. With “big ball of mud” code, your name will be treated as a curse word by the developers who follow you.
WARNING: Please don’t become a member of the “Cult of Uncle Bob”.
One company I worked at hired “Uncle Bob” to personally train us on Agile development. I’ve seen him speak at conferences, and I’ve read his books. He has a lot of great ideas, and has definitely helped me improve my programming skills.
However, he consistently ignores the Agile Manifesto principle of “Individuals and interactions over Practices and tools”, by claiming you can’t be a “professional programmer” if you don’t follow his practices. As if we have (or, he has) reached the pinnacle of software development.
There is more than one way to produce quality software, and better ways are always being created. Don’t get stuck, religiously following anyone’s “one true way”.
Just like in those cheesy, old Kung-Fu movies I used to watch on Sunday afternoons, learn many different techniques, find what works best for you, and continually improve.
Rocket Surgery Made Easy: The Do-It-Yourself Guide to Finding and Fixing Usability Problems (Voices That Matter)
By Steve Krug
You are paid to write programs to provide benefits to users.
Re-read that last line.
Make it the background of your computer.
Get a tattoo of it on the back of your hands, so you always see it when you’re at the keyboard.
If your program is too difficult for the users to use, they won’t get the benefits.
You need to remember that the people using your program are not you – the person who wrote the program. It’s obvious to you how to use it. But the users didn’t write the program, and they don’t know how to use it to accomplish their objectives.
You need to understand usability.
That’s where “Rocket Surgery Made Easy” comes in. It shows you how to build websites that users can actually use.
It’s painful to be on the other side of a one-way mirror, watching a test user try to do something with the website you spent months building. You’ll spend half your time wanting to scream, “Right there! Click the button! The huge one that says ‘Save’! Your cursor is on top of it!”
It’s our job to make something so simple that anyone can use it, without us standing over their shoulder. It’s not the user’s job to “become smarter”. It’s our job to create something more understandable.
This book will help you do that job better.
By James Shore
Unfortunately, I usually see it implemented badly.
Companies pick and choose the practices they want to use, not on any data or experience, but on their “gut feeling”.
Fortunately, James Shore wrote a great guide on how to start applying Agile and XP practices to create higher-quality software.
He discusses the principles and practices of Agile development, and guides you in creating your own process – one that best fits your company, development team, and the type of software you create.
Many people don’t realize that a huge part of being Agile is regular retrospectives to evaluate your process. You’re supposed to drop the practices that don’t help, and add or modify practices you think might help in your next project. Your development process should always be changing, for the better.
Instead, most companies just get the standard “recipe”, recommended by the “Agile Consultant” they hired, and follow it – even if it isn’t best for them.
Do that, and you either end up with few benefits from the change, or you completely fail.
Get this book to ensure your change to better programming practices is a successful one.
By Robert “Uncle Bob” Martin
This book will show you many of the “how”s that you need to know to create clean code for the applications you build. You’ll learn how to design your programs in a way that makes them easier to expand, or modify, in the future. That will save you a huge amount of time, and prevent problems, when you’re asked to add another feature – two years after you’ve last looked at the source code.
The examples it uses are real world-ish, which helped me learn more than just another made up snippet of code that doesn’t have any real world application.
It’s presented in an extremely easy-to-understand way.
Again, I have to insert my standard “Uncle Bob” warning: Take the good, improve your skills, but don’t fall into believing “absolutes” about any particular programming practice or tool.
However, don’t let that warning stop you from getting a book that covers so many great practices for software development.
By Andy Hunt and Dave Thomas
“The Pragmatic Programmer” gives you the advice you’d learn from years of experience as a programmer – before you run into problems.
A great thing about this book is that it gets into the philosophy of being a programmer, along with the practical tips you can use in the next program you write. You may not agree with everything Andy and Dave say, but it will certainly get you thinking.
This book doesn’t only teach you the technical aspects of being a programmer. It shows you how to think like a programmer and what it means to “be a programmer”.
It’s extremely easy to read. It’s almost as if you were hanging out with a couple of your programmer friends – just tossing around stories about your programming experiences.
By Chad Fowler
To have a fulfilling career, you can’t be one of those mythical developers who sits in his dark office, never talking to the “business” people, and only focusing on your latest obsession – which has no impact for the business where you work.
If you want to be an amazing programmer, you need to know a lot more than just how to write “if” statements.
Even if you have a full-time job, you need to see yourself as your own business – providing value to your “customers” (your employer).
You need to learn how to deal with the rest of the business, and how your programs will help it succeed. You need to know how to “market” yourself, to have your opinions accepted by management. You need to choose the direction of your career, or someone else will choose one for you – and they probably don’t have your best interests in mind.
“The Passionate Programmer” shows you how to build an impactful career as a programmer, instead of having a dead-end job.
By Eliyahu Goldratt
Because it’s an easy-to-understand guide to the Theory of Constraints – which is built on the same principles of Lean Manufacturing. Which is also where much of Agile and Scrum comes from.
There are two extremely important thing you’ll find in this book:
- Many of the things the fictional company does to improve their manufacturing process are similar to what you can do to improve your development process. Smaller batches, more frequent delivery, etc. That sounds a lot like Agile and Scrum to me.
- You can treat the flow of data through your application the same way that a factory treats the flow of parts through its assembly line. Search for, and improve, your bottlenecks, to make the biggest overall improvement in your program.
I once worked on a program that was unbelievably inefficient. Instead of reading some data into memory, and working on it from there, it kept writing it to disk and reading it back from there.
When I saw it, I immediately imagined the data as a “widget”, moving along an assembly line.
Doing that let me picture the data going back-and-forth, to the same “workstation” on the factory floor. After I pictured the most efficient physical way to handle the process, I was able to quickly write a much faster, and more efficient, version of the application.
To increase your ability to improve your processes, look everywhere that deals with processes. You can find some great principles in fields outside of programming.
Reading “The Goal” will also give you insight into how to improve business processes.
If you want to add a massive amount of value to the company you work for, show them how you aren’t just another expense to them, but someone who can help them make more money.
I’ve been recommending these book for years – in some cases, decades.
They’ve helped me massively improve my programming skills, and they can help you become a great programmer.
There’s a lot of focus on Agile and Lean. That’s because they’re the best methods I’ve seen (so far) to produce higher-quality code.
Realize that programming isn’t a mindless skill that you learn one time. Becoming an amazing programmer requires that you continually learn and grow.
If you don’t invest time improving your skills, and increasing the benefits you bring to your boss/clients/users, you’ll be left behind. So invest a little time every week to learn something to improve your skills, and your value.