It’s no secret I love books.
When I am out running my 40 miles a week, it’s study hall time for me.
I spend a good eight hours a week reading books — or rather, listening to the audio versions when I’m running or driving.
In a year, I’ll easily go through more than 50 books.
A huge amount of the success I’ve been able to achieve in life is directly attributable to the books I’ve read.
When I wanted to learn how to invest in real estate, there was no one to show me the ropes.
I had to figure it out myself and books helped.
When I first wanted to learn how to program, once again, I didn’t have a real mentor.
I didn’t know any programmers — I was just a kid.
So, I turned to books.
When I wanted to advance my career as a software developer, again, no one to turn to, so more books.
Start a business — books.
Stock trade options — books.
Improve my life, my discipline, self-esteem, willpower — get in shape?
Books, books, books, and more books.
(Also plenty of failing, but getting back up again.)
Perhaps you, like me, don’t have access to a real-life mentor who can guide you on the path of programming and life?
Hopefully this book has helped to serve that purpose, but the journey hasn’t ended. It never does.
That’s why I’ve decided to wrap up this book by giving you a list of some of my favorite books so you can create your own virtual mentors.
It’s tempting for me to list hundreds of books, but to save some space, I’ve trimmed the list down to what I think are the best of the best.
However, if you’d like to download a complete list of my all-time most influential books, broken down by topics, you can get it right here.
I hope you enjoy.
Writing Good Code
As a software developer, you should be especially interested in writing good code, since that is one of the most foundational things software developers do.
Here are some of the best books I’ve found on the topic that greatly influenced me in my career and directly improved the quality of the code I wrote.
Code Complete: A Practical Handbook of Software Construction, Second Edition
This is a foundational and pivotal book on writing good, clean, understandable code that clearly communicates what the code does without the need for excessive comments.
It has fundamentally changed the way I think about writing code and creating software.
It talks about how to debug code, create quality software, and many other topics every software developer should understand.
The book is a little dated as far as methodologies go, but is still a must-read book for every serious software developer.
Clean Code: A Handbook of Agile Software Craftsmanship
This is one of my all-time favorite books, written by one of my favorite mentors in the software development industry, Bob Martin (Uncle Bob).
This book teaches you how to write clean, highly understandable code and to refactor existing code by example.
It is full of principles and best practices that are timeless in nature and greatly aid the understanding of code written in any programming language.
While Code Complete is a bit dated in terms of methodology, Clean Code makes up for it by presenting an Agile way of crafting and maintaining software.
Agile Software Development, Principles, Patterns, and Practices
Another book by Uncle Bob, but this one focuses more on object-oriented programming.
It covers a wide range of topics from Agile methodology and how to use it, to object oriented design principles, to design patterns and more — all with excellent examples.
What You Need To Know
There are many things you need to know as a software developer. I’ve covered the basics of them throughout this book, but the following books will give you a more in-depth understanding and round out a few areas we didn’t discuss:
Design Patterns: Elements of Reusable Object-Oriented Software
This book is a classic, but it’s still relevant today, as you’ll commonly see design patterns in code you are maintaining, or you’ll recognize some of these patterns in code you are writing.
Every software developer should at least understand the basic, classic design patterns presented in this book.
Another classic book, but an essential one for understanding software testing and what it is all about.
This book covers the basics of what every software developer should know about testing and test methodology.
Not an easy book by any means — requires some math — but it is one of the best books on the modern algorithms commonly used in software development today.
Every software developer should be familiar with these algorithms.
Patterns of Enterprise Application Architecture
This book covers just about everything you should know about writing large-scale, robust applications.
Although the focus is on enterprise applications, many of the principles and patterns apply to any kind of large-scale software application.
Working With Existing Code
One of the most frequent things you’ll be doing as a software developer is working with and maintaining code you didn’t write, i.e. legacy code.
Fortunately, there are some pretty good books on the subject.
Refactoring: Improving the Design of Existing Code
One essential skill in working with legacy code is refactoring.
Refactoring is changing the structure of the code without changing its functionality.
This book covers just about every major refactoring pattern you need to know.
Now, most of these refactorings don’t have to be done manually any more, since they are baked into modern IDEs, but this book will teach you what they are and how to implement them when you have to.
Working Effectively With Legacy Code
This is considered one of the best overall books for learning how to deal with and maintain legacy code.
It covers just about every topic you can think of in dealing with legacy systems, including safely refactoring, identifying where to make code changes, dealing with systems that aren’t object-oriented, and much, much more.
I highly recommend every software developer read this book — more than once.
One of the best ways to clean up legacy code through refactoring is to simplify it, especially if it is a mess.
This book shows you exactly, step-by-step, how you can take existing code and refactor it using common design patterns found in software development.
This doesn’t mean you should refactor every bit of code into design patterns, or forcefully implement overly-complex design patterns when a simpler solution will do, but there are definitely plenty of times where the content of this book will come in handy.
Developing Yourself As A Developer
Being a good software developer involves more than just writing good code and being technically competent.
Various soft skills are also very important to your success as a code monkey.
The following books will help you grow and develop as a developer in more than just technical skills.
Soft Skills: The Software Developer’s Life Manual
Of course I have to include my book here, as I specifically wrote it to fill the need for a comprehensive book about developing soft skills as a software developer.
In this book, I cover everything from your career, to marketing yourself, learning, productivity, finances, health and fitness, and even mastering the mental game and mindset.
I think every software developer should read this book — but I’m a bit biased.
The Pragmatic Programmer: From Journeyman to Master
Based on the wisdom of a couple of very experienced software developers, this is an extremely popular programming book all about how to advance your career as a software developer..
It’s funny, it’s entertaining, it’s real stories about real difficult situations in software development.
The Passionate Programmer: Creating a Remarkable Career in Software Development
This book is chock-full of practical advice about your career as a software developer and the inevitable struggles you’ll face.
It’s about learning how to increase your skills, changing your attitude, staying motivated, and keeping that passion alive, and of course, about advancing your career.
Developing Yourself As A Human Being
Ok, this is where it gets tough for me to narrow things down.
I have a TON of books on this subject, since it’s my mission in life to develop myself and help others achieve their own personal growth, but I’m picking the best of the best and the ones I think will especially help software developers.
I’m limiting myself to these three. Ok, four (I can’t resist).
How To Win Friends & Influence People
Start with this book.
It’s one of the best books of all time about interacting with others. Don’t let the title or the age of the book fool you.
This is a classic book frequently on the top book list of many successful people.
I honestly read this book at least once a year, sometimes twice.
I can’t say enough good things about this book — it changed my life.
This is a short book, and another old one, but extremely potent.
The mindset presented in this book is the mindset required to achieve success in life.
It’s all about focusing on your thoughts and how you choose to perceive the world, which ultimately determines what your life and world is like and what it will become.
Maximum Achievement: Strategies and Skills That Will Unlock Your Hidden Powers to Succeed
If I had to pick one personal development book, and only one, this would be it.
Why?
It’s packed with many concepts, which are sourced from classical books on the subject and they are explained in a way that is concise and clear. It has plenty of exercises for you to actually do to make real, positive changes in your life.
This book covers a wide range of personal development topics, and gives you a huge “bang for your buck” in terms of what can be offered in a single book.
How to Fail at Almost Everything and Still Win Big: Kind of the Story of My Life
This final book choice was difficult.
There are still so many good personal development books out there, but I picked this one because the author is none other than Scott Adams — yes, that’s right, the creator of Dilbert.
But he’s so much more than that.
This book lays out a philosophy of life that can’t help but make you a champion.
I never expected such wisdom from the creator of a cartoon about a pointy-haired boss, but this book delivers.
(If you really want to see how deep Scott Adams can go — and you really want to bake your brain — check out God’s Debris. Don’t say I didn’t warn you, though.)
I’ll stop here, but I could write a whole book on what books to read for personal development and growth.
Going Deep
Sometimes as a software developer it’s fun and enlightening to go deep.
What do I mean by going deep?
I mean blasting through abstractions and dissecting things to understand how they really work.
Sure, we don’t need to know how CPUs work and the underlying details of operating systems to do our normal jobs, but gosh darn it, it’s fun to dig into those details. Sometimes.
So, if you want to go deep, I’ve got a few book recommendations for you that will take you to the depth you desire and fulfill that childlike curiosity we all have.
Code: The Hidden Language of Computer Hardware and Software
This book filled in so many of my knowledge gaps around computer hardware, low-level computer science and computer architecture concepts.
The best part is, it does it in a fun, entertaining and easy-to-digest way — at least mostly easy to digest.
I highly recommend that every software developer read this book, not because you need to know what is in this book, but because you’ll have so much fun learning what is in this book.
Plus, you’ll understand computers and code in a way that you couldn’t imagine.
Structure and Interpretation of Computer Programs
This is a difficult book about programming — especially if you go through the book and do all the exercises.
But I think you’ll find the experience rewarding and it’s likely to change the way you think about and approach programming, especially if you’ve never been introduced to functional programming concepts.
Cracking the Coding Interview: 150 Programming Questions and Solutions
If you want to get a job at a company like Microsoft or Google, this is required reading.
If you want to be able to pass a whiteboard interview where you have to code up a solution to some algorithm problem, this is required reading.
This book pretty much covers everything you need to know about solving the difficult, computer science, algorithm-type programs that are often asked during coding interviews.
It covers the fundamental types of algorithms and data structures, gives you practice problems, and sets you up for success.
If you want to go deep with learning how to solve algorithm-type coding problems, this is your book.
The Art of Computer Programming
Can I really recommend a book series I’ve never read?
Sure can.
This four-volume set was on my list of “someday to read” books, but I never got around to it.
Why?
Because reading these books is a huge undertaking.
These books go through, in depth and in detail, computer science algorithms — and not the easy stuff.
If you really, really want to go deep with algorithms, and you are prepared for some heavy math, go for it.
Let me know how it goes. I wish you luck.
Compilers: Principles, Techniques, and Tools (Second Edition)
This book is known as the dragon book — and for good reason.
It goes down deep into places where the dragons live; in the realm of compilers and operating systems.
Some of the information might be a bit dated, but if you are really interested in how compilers work and perhaps want to write your own, take a crack at this book.
Entertaining And Fun
You might think that going deep into algorithms or compilers is both fun and entertaining, and while I agree, in part, I have to admit that not every software developer thinks so.
So, what I will present to you here are books that I feel are especially fun and entertaining to most software developers.
Your mileage may vary.
Gödel, Escher, Bach: An Eternal Golden Braid
The first time I heard about this book, it was someone saying they wished they could read it again for the first time.
That was enough to get me to buy and read this book, and I was not disappointed.
It’s not a computer science or programming book, but it has many programming-related concepts and delves deeply into the paradoxical, contradiction-heavy realm of logic.
I don’t read much fiction, but these books appealed to me because they combine D&D kind of elements with computer hacking and time travel.
Oh, and they are very funny.
Again, I’m not a huge fiction reader, but as a programmer, I really enjoyed these books, so I’m recommending them here.
Like I said, I don’t read many fiction books, but I read this one because it was written by a programmer, I like space, and so many people kept talking about it.
I was not disappointed.
Fantastically funny, thrilling, and intellectually stimulating book.
Pretty much loved every moment of it.
Yes, I’m recommending another book I haven’t read — yet.
But I promise I just added it to my Amazon wish list and I’ll be reading it soon.
As far as fiction programming books go, this is probably the most highly recommended book.
So, I felt I would be doing you a disservice if I didn’t recommend it here.
Like I said, I haven’t read it myself, but I plan to.
(Update: I did read it, but it wasn’t my cup of tea. Still, so many developers do like and recommend it that I’m leaving it in this list.)
Perseverance And Motivation
There is no real substitute in life for getting your ass kicked.
It’s through adversity that we learn to overcome and grow stronger.
Life will kick you in the ass.
Life will be hard and cruel at times.
You are going to lose your motivation.
You are going to want to quit and give up.
The following books will help you in those times.
This book is the first book that really introduced me to the stoic philosophy I hold so central to my life today.
This book is about how the bad things that happen to you can be used to make you strong and help you find the right path instead of defeating you.
Most of these lessons come right out of stoic philosophy; they are told using historical stories that demonstrate the principle.
The author of this book, Grant Cardone, quickly became one of the greatest role models in my life after I read this book and the next one, also his.
This book is all about how you probably need to set your goals 10x higher, and how it will probably take 10x more effort to achieve them than what you think.
It’s about how you can, and should, take massive action to achieve success in life.
This book will kick you in the ass — I promise.
Hey, so do the people around you say that you are “obsessed” and that what you are doing isn’t healthy because you are working too hard?
This book gives you permission to politely “give them the finger” and keep on blazing your trail.
It’s all about harnessing the power of obsession to get where you want to go.
It also talks quite a bit about the people who will try to bring you down and how to deal with them.
I’ve read this book at least a dozen times — it’s that good.
It’s all about sitting down to do the work and realizing that it will always be difficult; you’ll often feel unmotivated, but as a professional, you do it anyway.
This book helped me develop the work ethic to write my first book, and that work ethic has continued to help me write this book.
This book is all about fighting and overcoming the resistance that we all face in life whenever we try to improve ourselves in any way.
Plus, it’s written so poetically that it’s a pleasure to read.
Read On, My Friend…
Well there you have it; those books should keep you busy for a while.
If you get through all the books on this list, I guarantee your life will be drastically improved.
But the journey shouldn’t stop there.
I challenge you to make reading a daily habit, if it isn’t already.
There are so many more good books out there. It was quite difficult to narrow all my favorites down to make this list.
Here are a few final tips to help you on your journey.
Make sure you spend your time reading good books.
Always look for books that are highly recommended.
Always have a list of books that you want to read next so that you aren’t stuck “looking for a good book.”
Utilize audio if you can.
When you are running, walking, lifting weights, driving in the car, or doing some other activity where you can easily listen to an audiobook, do it.
Invest in getting an Audible.com subscription and don’t be afraid to buy extra credits.
Finally, put what you learn into action.
Knowledge without action is worthless.
Don’t just read the books, do what they say.
Think about how you can apply what you are learning to your own life.
And, maybe… someday… write your own book.