DEV Community

Cover image for 29 Must Read Books For Programmers
Blaine Osepchuk
Blaine Osepchuk

Posted on • Updated on • Originally published at smallbusinessprogramming.com

29 Must Read Books For Programmers

These are my "must read" programming books. They are universally applicable: you'll benefit from reading them regardless of the kind of programming you do. And the knowledge in these books will remain relevant throughout your career.

I hope you'll find a couple of good books to add to your reading list here.

June 16, 2019: I'm no longer updating this post. You'll find my most up-to-date list of must read books for programmers (with working links) on my blog.

Career

The first thing you have to figure out, if you haven't done so already, is what kind of career you want and how to get it. This book will help. Actually, it will help anyone get more satisfaction out of their career.

  • So Good They Can't Ignore You - Cal Newport (Why follow your passion is bad advice and what you should do instead)

Learn how to learn

Learning new skills is hard. Change is hard. So why not learn how to make new behaviors stick and learning new things easier? These books will help.

  • The Power of Habit: Why We Do What We Do in Life and Business - Charles Duhigg (Learn how habits actually work so you can make lasting changes by working with your brain instead of against it)
  • The Spirit of Kaizen: Creating Lasting Excellence One Small Step at a Time: Creating Lasting Excellence One Small Step at a Time - Robert Maurer (Kaizen is the practice of making small, continuous improvements. Toyota used it to improve the quality of their cars and become the biggest car maker in the world. You can use it to improve just about anything as this book demonstrates)
  • Badass: Making Users Awesome - Kathy Sierra (Most people learn inefficiently. This book shows you a better way) (YouTube summary).

Personal effectiveness

The first three books below are all slightly different takes on the same advice. No matter what your profession or education or task, effective people tend to share a similar mindset and employ similar techniques. Read the book that resonates with you the most.

  • The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change - Stephen Covey (a classic)
  • The Effective Executive: The Definitive Guide to Getting the Right Things Done - Peter Drucker (another classic)
  • Great at Work: How Top Performers Do Less, Work Better, and Achieve More - Morten Hansen (a modern take on the genre)

Checklists can be a game changer. I've got tons of them and you should too.

  • The Checklist Manifesto: How to Get Things Right - Atul Gawande (Learn the power of simple checklists to improve your performance and reduce errors)

Programming effectiveness

Once you've mastered personal effectiveness, it's time to learn how to be an effective software developer.

  • The Effective Engineer: How to Leverage Your Efforts In Software Engineering to Make a Disproportionate and Meaningful Impact - Edmond Lau (Gets you focused on the right things)
  • The Pragmatic Programmer: From Journeyman to Master - Andrew Hunt and David Thomas (Shows beginners how to apply their craft and level up)

Writing code

I still meet programmers who haven't read these classics. What are you waiting for?

  • Code Complete: A Practical Handbook of Software Construction, Second Edition - Steve McConnell (Evidence-based recommendations on software construction--MY BIBLE)
  • Clean Code: A Handbook of Agile Software Craftsmanship - Robert C Martin (Every programmer in my workplace is paid to read this book. Learn the importance of readability and maintainability and the cost of owning a mess. I agree with almost all of it (except forcing people to write extremely short methods))
  • Code Simplicity: The Fundamentals of Software - Max Kanat-Alexander (It's easy to get lost on the theory, opinions, and patterns we are urged to use when creating software. This book puts it all in perspective. It's simply 80 pages of amazing wisdom--MUST READ)

Software engineering

Despite what most people believe, software engineering does have a body of knowledge backed by research. Don't go against the research and expect your project to turn out okay--it probably won't.

  • Facts and Fallacies of Software Engineering - Robert Glass (Evidence of what works and what doesn't. If you're breaking any of these rules, you better have a good reason to think the research doesn't apply to you)
  • Rapid Development: Taming Wild Software Schedules - Steve McConnell (Evidence-based recommendations on project/team management--MUST READ)
  • Making Software: What Really Works, and Why We Believe It - Andy Oram & Greg Wilson (I don't love this book. It's written as a bunch of essays and it's kind of long winded and disjointed. However, if you want to avoid doing something foolish, and you've read the other books in this section, give this book a try after)

Leadership

Leadership is a mindset and a set of skills, not a title or position. Anybody can be a leader. As your career progresses and you gain responsibilities, you need to sharpen your leadership skills.

  • Measure What Matters: How Google, Bono, and the Gates Foundation Rock the World with OKRs - John Doerr (How to get everybody in your organization pulling as hard as they can in the same direction)
  • Turn the Ship Around!: A True Story of Turning Followers into Leaders - L. David Marquet (Leader-leader instead of leader-follower. Your organization will perform at the highest levels if everyone is 100% engaged in their job and working towards a common objective. You will learn how to give everyone in your organization the 3 Cs: control, competence, and clarity to make their maximum contribution)

Project management

Just because you're a good coder and you've been around for a while, it doesn't mean you can run a project. Avoid all the beginner mistakes by reading these books.

  • Rapid Development: Taming Wild Software Schedules - Steve McConnell (Evidence-based recommendations on project/team management--MUST READ)
  • Essential Scrum: A Practical Guide to the Most Popular Agile Process - Ken Rubin (Excellent advice on scrum and project management in general. Very high signal-to-noise ratio)
  • The Lean Startup: How Today's Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses - Eric Ries (Learn why building an MVP and using the build-measure-learn cycle is so important)
  • The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win - Gene Kim & Kevin Behr (Learn how you can apply the Theory of Constraints and Lean to turn around a trouble project (or prevent it from getting into trouble in the first place))

Advanced project management

Once you've got the basics down and your projects are no longer raging garbage fires, consider learning the advanced project management techniques described in the following books.

  • The Principles of Product Development Flow: Second Generation Lean Product Development - Donald Reinertsen (Corrects the errors people naturally make by trying to apply Lean and Six Sigma techniques from the manufacturing world to the product development world--not suitable for beginners)
  • Goldratt's Theory of Constraints: A Systems Approach to Continuous Improvement - William H. Dettmer (A systematic approach to finding the constraint in your organization and overcoming it. This is a huge lever--not suitable for beginners)

Unit testing

If you're not unit testing yet, what's stopping you? These books will get you started.

  • Starting to Unit Test: Not as Hard as You Think - Erik Dietrich (A Beginner's guide to unit testing)
  • Working Effectively with Unit Tests - Jay Fields (Unit testing best practices for people who know the basics)
  • Working Effectively with Legacy Code - Michael Feathers (Very famous book on getting existing code covered by automated unit tests--a notoriously difficult task)

Data analysis and statistics

You need data analysis skills to measure your results. Many programmers lack the statistics knowledge and the skills required to correctly apply statistical tests to data and come up with sound conclusions. These books will help.

  • Data Analysis with Open Source Tools: A Hands-On Guide for Programmers and Data Scientists - Philipp K. Janert (This is the book you need when your boss dumps a ton of data in your lap and says "find the insights." I love this book)

Any introductory book on statistics. The following books are much better than the textbooks I read in university:

  • Statistics For Dummies - Deborah Rumsey
  • Statistics II for Dummies - Deborah Rumsey

User interface/user experience

Most programmers don't pay enough attention to user interfaces and user experience. These books are written for programmers and they'll teach you everything you need to know.

  • Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability - Steve Krug (amazing!)
  • Rocket Surgery Made Easy: The Do-It-Yourself Guide to Finding and Fixing Usability Problems - Steve Krug (also amazing!)

Wrapping up

So that's my list of "must read" programming books. There's enough material here to keep you busy for a couple of years so please don't think you should read all these books immediately. We already have enough problems with unrealistic expectations in our profession and I don't want to add to them.

Don't just skim through these books so you can check them off some list either. The important point is to take as much time as you need to learn a new skill that's important to you.

I almost certainly missed some really great books. Feel free to suggest more "must read" books in the comments.

Top comments (95)

Collapse
 
rhnonose profile image
Rodrigo Nonose

More classics: The Mythical Man-Month (Frederick Brooks) and The Cathedral and the Bazaar (Eric Raymond) for "agile" and project management.

Collapse
 
bosepchuk profile image
Blaine Osepchuk

I've read The Mythical Man-Month. I know lots of people love this book but I prefer Steve McConnell's books. I just feel they are more actionable and supported by data. But anyone who reads Brooks instead will not be disappointed.

I haven't read the second book. I'll look into it. Thanks.

Collapse
 
swfisher profile image
Sam Fisher

Eric Raymond's other book "The Art of Unix Programming" is the best book I've ever read about software engineering principles and philosophy, even though it's cleverly disguised as a book about Unix. catb.org/esr/writings/taoup/html/

Thread Thread
 
bosepchuk profile image
Blaine Osepchuk

Thanks, I'll have to read that.

Thread Thread
 
elequ profile image
Elena Williams

Objectively I think the Eric Raymond book hasn't aged well (as someone with a hard copy that I thought was out of obsolete 5 years ago).

Further ESR himself has shown some pretty bad behaviour in recent years.

Thread Thread
 
swfisher profile image
Sam Fisher

Which Eric Raymond book are you refering to, Art of Unix Programming or Cathedral and the Bazaar? If it's the one about Unix I'd be particularly interested in the ways in which you've found it obsolete.

I didn't know about the controversy around his behavior, but it's clearly evident from a google search. That's really a shame and I'll see if I can learn more about it, esp before making an idol of his Unix book (which I really like).

Thread Thread
 
bosepchuk profile image
Blaine Osepchuk

Interesting. Care to elaborate on the shortcomings of "The Art of Unix Programming"?

Thread Thread
 
bonfacekilz profile image
the_savage

What do you mean ESR's book hasn't aged well?

Thread Thread
 
elequ profile image
Elena Williams

Heya, I haven't read the Unix one, I was talking about the Cathedral and the Bazaar.

Honestly I wanted to like it and was stoked to come across it as there are so few books on the topic (and at the time also wasn't aware of ESR's now-bad rep, actually as an emacs user myself I though highly of him) and I was trying everything I could in the area because I was prepping a talk for PyCon US.

It pre-dates distributed version control (ie git) and comes from a time when freshmeat.net was the coolness for FOSS, how many people even remember that now? github wasn't even imaginable from the place where that book is written.

It's about emailing patches and old skool hax0r behaviour, that time is just past and really not that relevant to anyone who wasn't there.

Collapse
 
patricktingen profile image
Patrick Tingen • Edited

Thanks for the list, there are some titles that are new to me.

And I would like to add one title that I think is missing. It is my all time favourite book; "Design of everyday things" by Don Norman. The first draft is from 1988 but a second revised draft is from 2013. The book describes how items can be designed so that the user naturally uses it the way it was meant to be used. The cover of the book illustrates that in a brilliant way. The book teaches you to look with different eyes to things around you. It certainly changed my way of looking at things.

cover of Design of everyday things
Amazon

Collapse
 
bosepchuk profile image
Blaine Osepchuk

Yes. Thanks for the suggestion. It is a good book. I've read the original but want aware there's an updated version.

I chose the books by Steve Krug instead because they are more directly applicable to our work as programmers.

Collapse
 
mario_tilli profile image
Mario Tilli

Thanks so much for this list!! I've pinned some of them that I'm going to read. I would like to add two of my books always handy on my desk:

Collapse
 
bosepchuk profile image
Blaine Osepchuk

Great suggestions.

I've read the first book and it would have made the list if DDD were a little more popular.

I haven't read the second book but I hear good things.

Collapse
 
simoroshka profile image
Anna Simoroshka

I went and bought the first one on the list yesterday. I wish I read it at least 5 years ago and didn't have to learn this stuff from my own mistakes. Better, 10 years.
Everyone who strongly believes in "follow your passion" should read it.

Collapse
 
bosepchuk profile image
Blaine Osepchuk

I agree. He presents a compelling alternative to the "passion hypothesis."

Collapse
 
akotek profile image
Aviv Kotek • Edited

Great list! thanks for sharing!!

You mentioned Carl Newport, have you read his DeepWork book?

Would also recommend 'The Effective Engineer' effectiveengineer.com/book
and Yegor Bugayenko books!

Collapse
 
bosepchuk profile image
Blaine Osepchuk

You're welcome.

The Effective Engineer is on the list.

I haven't read Deep Work yet but it is on my list. Thanks.

Collapse
 
niorad profile image
Antonio Radovcic
Collapse
 
bosepchuk profile image
Blaine Osepchuk

Interesting. Why should Peopleware be in the list? What does it offer that isn't covered by one of the other books?

Collapse
 
niorad profile image
Antonio Radovcic

It's an often cited book about team-work and the importance of having stable teams, and how to achieve that.
I'm sure some material has been covered in other books but this one is as on-the-point as it gets. English non-fiction books tend to be very repetitive, which this one isn't at all.

Thread Thread
 
bosepchuk profile image
Blaine Osepchuk

I've read it. I thought it was okay but I've never recommended it to anyone. I'd recommend Rapid Development over this book every time but there's plenty of room for people to love Peopleware too.

Thanks for recommending it.

Collapse
 
goldpeace99 profile image
Goldpeace99

I think that a programmer has to know how the compilers work so I think that the Compilers: Principles, Techniques, and Tools (2nd Edition) a.k.a The Dragon Book for Compilers amazon.com/Compilers-Principles-Te... .

Collapse
 
bosepchuk profile image
Blaine Osepchuk

Interesting. Why do you think that's important?

Many of us work in languages that are interpreted. But even those of us who work in modern compiled languages tend to treat the compiler as a black box.

Collapse
 
goldpeace99 profile image
Goldpeace99

Well even if you work with languages that are interpreted it won't hurt to read this book.

If you read this book you will be able to make a interpreter or compiler. Even if you don't want to create a new language it can help you in various ways.

If you understand compilers and interpretators you will gain really deep knowadge about computer science concepts. It has a lot of like basic knowledge which isn't taught or learnt from the beginning since you need to know a bunch of other stuff first.

I know that a lot of developers have survived without ever writting a compiler. They just press F5 and then they have a working program (of course if you have no errors). If you understand compilers it will be easier for you to debug your code. Especialy if you know assembler and have a black box debugger. Having this knowadge will help you analyse your code in a whole new way and make you better.

Collapse
 
gypsydave5 profile image
David Wickes

I've enjoyed looking at this list... but I've noticed you're leaving out some books that many others would put in - say XP Explained and Test Driven Development by Kent Beck. Or Clean Code by Robert Martin.

I'm interested in whether you've left them out because of an oversight, or because you don't practice test driven development?

That said, it's great that a good proportion of these books are ones I've never heard of. Which is the one book in your list that you think that never gets read but that everyone should read?

Collapse
 
bosepchuk profile image
Blaine Osepchuk

Good questions.

Clean code is on the list.

I've read and did consider adding test driven development but I decided against it. I was trying to keep the list appilable to a wide audience and based on what I see here on dev.to, many people aren't even unit testing so I thought I would emphasize that with some beginner-intermediate material.

I haven't read XP Explained so I can't comment on its content.

The list was never meant to be comprehensive. There are no architecture, requirements, lifecycle management, security, or manual testing books on the list either.

The most under appreciated book on the list is Rapid Development. It's 22 years old and I read it for the first time this year. It holds up. I've been programming and reading widely for almost 20 years and that book had me underlining stuff left and right. The worst thing about that book is its misleading title (which is what kept me from reading it for so long). It's actually the other half of Code Complete and covers everything it didn't. If new developers could only read two programming books in their whole career, I'd choose those two.

Collapse
 
gypsydave5 profile image
David Wickes

Clean code is on the list.

That'll teach me... must've gone snow blind for a second!

I haven't read XP Explained so I can't comment on its content.

Well, I'll recommend it! It's short, and brevity is a quality all of its own!

Fair point about TDD - I was just interested to see unit testing talked about outside of TDD.

The most under appreciated book on the list is Rapid Development

It's now on the Christmas list - hopefully I've been nice not naughty...

Thread Thread
 
bosepchuk profile image
Blaine Osepchuk

Ah, yes, I remember XP Explained now. I saw Kent Beck talk about how he completely rewrote the second edition instead of the update he had planned to do. I've added it to my reading list.

Cheers.

Collapse
 
rattanakchea profile image
Rattanak Chea

Awesome collection. I will pick one from your list every month. Lol. 29 months to go.

Collapse
 
bosepchuk profile image
Blaine Osepchuk

It's no joke. You could read a book a month but it will take much longer than 29 months to master the content. I'm still working on it myself and I started almost 20 years ago.

Collapse
 
xiris profile image
Christopher

The best insight from the whole thread :D
Software engineering is a continuous improvement.

I believe "The five dysfunctions of a team" deserves some attention, specially for people working in teams and the leaders out there. I'm unsure it should be in the list, but def. a good read :)

Thread Thread
 
bosepchuk profile image
Blaine Osepchuk

Yes, good feedback, Christopher.

I enjoyed reading "The Five Dysfunctions of a Team" but it didn't occur to me to add it to the list.

Anyone on a dysfunctional team will find something useful in this book but--as best as I can recall--it didn't offer many solutions to members of a team. I believe it was all about what you could do if you were the leader of a dysfunctional team.

Collapse
 
rattanakchea profile image
Rattanak Chea

That was just my optimistic understatement. However it is doable, if reading for breadth and familiarity of key concepts.

Collapse
 
yorodm profile image
Yoandy Rodriguez Martinez

Despite what most people believe, software engineering does have a body of knowledge backed by research.

Those people should meet with some of my ex faculty members and some of my old professors..

I would add the whole Pattern Oriented Software Architecture series to your list.

Collapse
 
bosepchuk profile image
Blaine Osepchuk

Thanks for the recommendation. I've added the first book in the series to my reading list. It looks quite interesting.

Collapse
 
yorodm profile image
Yoandy Rodriguez Martinez

I keep the second volume around. It explain concurrency, synchronization and event handling in networking, very helpul for those who struggle with async programming these days.

Thread Thread
 
bosepchuk profile image
Blaine Osepchuk

Ah, I'll keep that in mind. I'm lucky enough not to have to deal with async programming.

Collapse
 
yucer profile image
yucer

The best programmers that I have been able to talk face-to-face have started by this book:

I use it as first recommendation everywhere. I think it is recognized in the field as a classic.

Although many people could thing it is about Software Engineering I can not imagine a programmer that doesn't profit of reading it.

Collapse
 
solbiatialessandro profile image
Solbiati Alessandro

About personal effectiveness I would definitely recommend Principles - Ray Dalio, where he introduce a systematic way to approach decision making that is really close to the computer science reasoning in my opinion. There is also a YouTube video that sums the book up in an excellent way ;)

Collapse
 
bosepchuk profile image
Blaine Osepchuk

Thanks, Solbiati. I'll watch the video and then read the book if I want to know more.

Collapse
 
utkarsh_var profile image
Utkarsh Verma

Awesome list! Thanks for sharing :) I'm thinking of starting with Clean Code - Robert C Martin

Collapse
 
yucer profile image
yucer

Also, we have this classic book: The Art of Computer Programming.

It is like a bible of algorithms. It might be more for computer scientists, but programmers should read it from time to time.

Collapse
 
bosepchuk profile image
Blaine Osepchuk

Interesting. Why would programs read it from time to time? What will they get from it?

Collapse
 
yucer profile image
yucer

Because it is like a complete reference of algorithms.

Let us see, the complexity of a software system comes from:

  1. Functional requirements (problem domain)

  2. Non functional requirements (user interface, persistence, ...)

Almost the 85% of the code correspond to the 2., but those can have generic solutions and most of the type they are included into software components or frameworks.

Nevertheless, from time to time, a programmer would need to face the 1. type.

There you'll need to know the data structures inherent to the problem you are trying to model, how to represent them in your system and which algorithm fits its resolution.

This is a more higher level of programming that, let us say, make a web site or query a database system. It is more unlike to be replaced by future software stacks.

So learning to face problems of type 1. a programmer its more likely to be needed in the future.

Actually the natural evolution of a programmer is to become a computer scientist (type 1.) or a software engineer (type 2.) or a system admin (type 2.)

Collapse
 
n_develop profile image
Lars Richter

I'm not a big fan of "XX books every developer must read" posts, because the view on this is (of course) heavily subjective. But that is not the problem.
For me, these titles sound a lot like "you're not a real developer, if you haven't read these books". Arve Solland wrote a nice article about this.

I know that most of the time the title is really meant as "XX books a really enjoyed and recommend".
So from time to time a still skimm through a list of book recommendations. Just like this one.

And I'm so happy that you recommended "Starting to Unit Test: Not as Hard as You Think" by Erik Dietrich. I was a little skeptical, because (to me) the title
sounds like "A beginners guide to unit tests". But I read it anyhow and I really enjoyed it. And I'm not new to unit testing and still took so much information from this book. Erik Dietrich provides so many valuable tips for everyone who is writing tests.

After I was done reading Erik's book, I immediately started "Working Effectively with Unit Tests" by Jay Fields. And so far this as also great.

So even if the start of my comment might sound a little frustrated, I really wanted to say thank you for the great book recommendations. :-)

Collapse
 
bosepchuk profile image
Blaine Osepchuk

You're welcome.

An acquaintance asked me for a list of programming books he could read to up his software development game. I spent a fair bit of time creating that list and, at some point, I got the idea to turn it into a blog post.

I'm sure many brilliant developers haven't read half the books on this list. In fact, I'd be willing to put money on it. These are just the books that were helpful to me.

Cheers.