These are my "must read" programming books. They are universally applicable: you'll benefit from reading them regardless of the kind of programming...
For further actions, you may consider blocking this person and/or reporting abuse
More classics: The Mythical Man-Month (Frederick Brooks) and The Cathedral and the Bazaar (Eric Raymond) for "agile" and project management.
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.
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/
Thanks, I'll have to read that.
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.
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).
Interesting. Care to elaborate on the shortcomings of "The Art of Unix Programming"?
What do you mean ESR's book hasn't aged well?
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.
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.
Amazon
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.
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:
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.
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.
I agree. He presents a compelling alternative to the "passion hypothesis."
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!
You're welcome.
The Effective Engineer is on the list.
I haven't read Deep Work yet but it is on my list. Thanks.
Peopleware
amazon.de/Peopleware-Productive-Pr...
Interesting. Why should Peopleware be in the list? What does it offer that isn't covered by one of the other books?
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.
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.
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... .
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.
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.
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?
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.
That'll teach me... must've gone snow blind for a second!
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.
It's now on the Christmas list - hopefully I've been nice not naughty...
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.
Awesome collection. I will pick one from your list every month. Lol. 29 months to go.
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.
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 :)
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.
That was just my optimistic understatement. However it is doable, if reading for breadth and familiarity of key concepts.
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.
Thanks for the recommendation. I've added the first book in the series to my reading list. It looks quite interesting.
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.
Ah, I'll keep that in mind. I'm lucky enough not to have to deal with async programming.
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.
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 ;)
Thanks, Solbiati. I'll watch the video and then read the book if I want to know more.
Awesome list! Thanks for sharing :) I'm thinking of starting with Clean Code - Robert C Martin
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.
Interesting. Why would programs read it from time to time? What will they get from it?
Because it is like a complete reference of algorithms.
Let us see, the complexity of a software system comes from:
Functional requirements (problem domain)
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.)
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.
You are not a real developer
Arve Solland ・ Feb 16 '17 ・ 2 min read
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. :-)
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.
The Passionate Programmer by Chad Fowler
Thanks. I've added it to my reading list.
Can anyone tell me how this book compares to "The Effective Engineer"?
Cal Newport’s books are anathema to my distracted brain. Excellent read. Have you read Deep Work by Cal? So good.
Not yet, but it's on my list.
I would also recommend How to Win Friends and Influence People by Dale Carnegie to every programmer that sometimes struggles with the human aspect of the job. Keeping in mind lessons from this book definitely helps me manage conflicts at work.
Good one! An absolute classic.
Hi! Thanks for useful list. I am self learned programmer, mostly in C, but as I started 30 years ago, I went through many "dinosaurs" like clipper, delphi, ...
I read lot about higher level application programming but less about how to deal embedded projects. Line between microcontroller and microprocessor systems is blured more every year, but the programming remains divided into different groups. Is there any good book about learning modern embedded programming, "lower" level driver programming and how it is done nowadays?
Thanks!
You're welcome, Marko.
The line is indeed blurring. I get paid for my web dev work but I dabble in embedded on the side.
I really like what Philip Koopman has to say on embedded. I've linked you to his blog but he's got YouTube videos and a book as well (which I haven't read).
There are also some really interesting embedded books on Amazon that I've been eyeing but haven't purchased yet. You might find something you like there based on the reviews.
I'll give those a try! Thanks for this.
My name is John, a budding web developer from Kenya. I am excited by the content in this platform. Rock on DEV team!
I usually think that finding resources online are enough, but these books are interesting enough for me to actually want to read them. Thanks for this list!
Also I don't see books about database or database theory.
The Relational Model for Database Management (Edgar F. Codd). Is the classic book for relational databases.
C.J.Date is also an author of masterpieces in the topic.
With the advent of social networks, where the correlations of database write/read increased, NoSQL databases became popular. I would like to hear about the classic book there. Actually I did my first steps in this topic using the official docs of the different databases (Cassandra, CouchDB, MongoDB, Neo4J, BerkleyDB).
It was particularly interesting for me, the introduction of this book:Programming the Semantic Web. It shows the limitations of the relational database for systems that needs an evolving database and how graph database could handle it. It shows the example of a restaurant app, and evolves it from the relational model to a graph. One of such illuminating examples where you say: Aha ! I understand what it is this paradigm about.
I tried to keep the list applicable to all developers and I freely admit that there are entire topics I've missed. Databases, security, and architecture are just a few examples.
Thanks for adding your recommendations.
Thank you for sharing great list.
I would like to add two of my favorite books.
Atomic Habits: By James Clear
The Obstacle is the Way: By Ryan Holiday
Thanks, that was a great list, very practical, not one of those where people enumerate all the famous books just to sound smart.
Developer Hegemony by Erik Dietrich
Yes, I read Eric's blog religiously. I expect it would have made the list but I haven't read his latest book yet.
I was in awe at the clarity of his argument, and his clear writing style and voice. Struck me as an instant classic. Could not put it down.
thanks
Great
Thanks for the reading list Blaine. With the explosive nature of the web, reading coding books have become something of a forgotten tradition.
You're welcome.
I'm not sure it's true that people don't read books anymore. Newspapers and magazines, yes. But lots of people must be reading programming books. The publishers would stop releasing them if nobody was buying them.
I suppose you are right. I was thinking mainly from K-12 education perspective. In CS classes use of content from web. as samples/tutorials/interactive media, is more prevalent than printed material.
Awesome list, thanks!
Thanks for sharing ! :)
I would add a book called "ABOUT FACE" (by Alan Cooper) into UI/UX section.
About Face: The Essentials of Interaction Design
a.co/d/9howFsS
Thanks for the recommendation. I'm more of a back end guy but the table of contents looks enticing. I've added it to my reading list.
I really want the mostly adequate guide to functional programming to be on this list.
I'd never heard of that book. But I downloaded a copy and I'll take a look. Thanks for the suggestion!
I'm confident that this is more than 29 books.
My count says 31. If you're counting 32 note that Rapid Dev is listed twice (which is fine).
100% correct. Rapid Development is listed twice and I didn't count the statistics books.
great!
Great list, thanks for this!
I've read some of them. Thanks for sharing!
Thanks for this list! I will definitely be referring back to this for my next reading materials. Currently I’m working/reading through JavaScript and JQuery by Jon Duckett.
Great List, I want to add refactoringui.com/book/ to the list of UI/UX.
It's a new book but has great content.
Thanks for the recommendation. It looks interesting.
Awesome, how do i bookmark a post in Dev.to?
Search for the name of the post in the search bar in the header. Each result will have a 'save' button.
Fantastic list Blaine.
For another few books of a different taste, folks might also like my list:
I love coding history books. Here are some I'd recommend.
Ben Halpern
I'm reading Dawn of the Code War right now. Based on this list, it may spark your interest!
Sounds interesting - what's it about?
I never know how to respond to a question like this without launching into a lengthy narration.
It's about the internet being used for malice, and how we're trying to stay ahead of organized (yet seemingly sporadic) attacks.
For not knowing how to answer the question, you did a great job! I'm looking up the book as we(I) speak(type). Thanks for the recommendation!
Awesome list! I also recommend Growth Hacker Marketing. It's useful for people looking to create a project or startup. Also super short :)
Cool. Thanks for the recommendation.
This list is fantastic! Thank you!
Thanks. I'm glad you enjoyed it.
That's a lot of books... Simpler is better, so I choose to read other's project and learn from them =)))