Programmers Don't Read Books – But You Should (2008)
blog.codinghorror.com
blog.codinghorror.com
Just ambling around the book store earlier I saw a 3 inch think tome around Go programming called Pro Go or something. I opened it and it was a whole book of instructional copy and paste recipes that span 10 pages for a simple problem. Urgh. This is the status quo now and it has been for a long time. I walked out with a book on pure mathematics instead - probably more useful in the long run...
That’s consistent with the first reason given in the article:
> I lay part of the blame squarely at the feet of the technical book publishing industry:
> Most programming books suck. The barrier to being a book author, as near as I can tell, is virtually nonexistent. The signal to noise of book publishing is arguably not a heck of a lot better than what you'll find on the wilds of the internet. Of the hundreds of programming books released every year, perhaps two are three are truly worth the time investment.
I am considering writing a bad programming book on purpose. I will call it "how to sling together a badly written Go 'enterprise' app and smear AngularJS over the top"
What I’ve found is that different publishers put different amount of effort into producing good content. O’Reilly is almost always excellent. Others are less so.
It’s hard to find a dev who is willing to invest a year of their life to write a book that is likely to make almost no money. It’s doubly hard to find devs who write well.
Given these filters, two or three good programming books a year sounds pretty great.
i am reading your book now and thoroughly enjoying it!
Learning Go's quite good to get dangerous with Go quickly, so good job!
I recall a few years back, Packt et al would publish like "Modern React" or something, with examples that wouldn't build by the time the book was out.
Typesetting is awful too, as you mentioned. A single paragraph for something dead simple is spread over multiple pages.
Nothing against such authors; its fruitless to hit a moving target.
Books on programming languages are the only ones I purchase these days, for those reasons.
The Go book, Rust Programming language, Stroustrup's books on C++ etc are quite good and worth owning, but those are exceptions rather than the rule.
This says more about React than it does about the publisher.
You can still be reductionist about it, but it feels materially different from the mundane calculations and algorithms that sprung to mind when I read your post.
https://youtu.be/36myc8wQhLo?si=sWdKyW3w2vln93SP
Cache coherence, accelerators, various takes on pipelining, ISA extensions. There are many many things that change all the time.
Not even touching the SW glue stuff that changes. I don't know the history of react and what is going on in modern browsers, but I suspect there are OS constraints, evolving web standards, extra capabilities, evolving browsers that shape and force the framework to adapt. I am doubtful people change it just for the sake of it.
Not to mention that the computer is actually very very different than what you imagine.
I say this not to make excuses for react, again I don't know that ecosystem. I spend most of my time writing firmware and low level drivers. And I see during my work the wide array of capabilities and approaches these systems have. They are not an homogeneous bunch.
I had a horrible experience with Packt. I had subscribed andwas in the middle of reading a book. The book suddenly became unavailable, so I created a ticket. They threw a few tokens at me, and asked if they could just close the ticket, even though there was no mention of whether the book was going to be available again.
Then weeks later they signed me up for six(!) separate mailing lists without asking me, one for each tag I had flagged as interested.
I have something against them. It's often apparent that many of them are professional programming book authors that are learning the language as they are writing the book instead of being professional programmers with some skills in the language that are writing a book. I don't want to learn along with another unskilled person, I want to learn from someone that has enough familiarity to not use features incorrectly and to mention potential hangups. Hell a lot of these books read like they are written by someone that is new to programming altogether, not just someone that is relatively new to the language.
Quite a while back, I was contacted by Wiley about writing an OpenStack book. I wasn't the right person to write it anyway. But even if I were, by the time the book hit the shelves, OpenStack would almost certainly have moved on a good two versions.
Packt appears to be a vanity press.
React is a difficult moving target, and Packt is a six year old with a homemade slingshot.
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...
- The Unix Programming Environment (not that one; this one it's a bit more modern). You'll get a bit of Perl instead of AWK, but it's fine.
- The GNU C Tutorial. Not as good as 'The C programming language'; but still useful.
- A shot Introduction To Operating Systems. Slightly outdated C++, because most of the time the issue it's just about fixing the include headers.
Most of the things learned there will work as is as Perl5, ANSI C/GNU C and so don't change a lot over time, if any.
Unfortunately, a lot of the technical books I wish to read fall into this grift of academic texts.
What I took from that given the situation I was in at time was that the best way to build an abstraction is to build the first one without any abstraction, and only then, when you understand how whatever is being abstracted will be used, try and build the abstraction layer, rather than starting with the attempt at abstraction. There are other ways to interpret it- it can point you to a more Agile design philosophy even though he was writing decades before the Agile Manifesto.
Design of doors is famously known example from this book.
Another idea was about suggestive nature of design. If top of a small wall is flat, practically it's asking you to put your empty can on it.
- Structure and Interpretation of Computer Programs
- C Interfaces and Implementations
- Design Patterns
- Compilers: Principles, Practice and Tools
Each of these should make you go "a-ha!", in its own way.
I liked the other ones, even if I don't remember take aways from them at the moment.
I do reject the Knuth observation here. Annoyingly, most criticism you will ever see of a Knuth book are from people that never read them. Not that I don't get the point, as following closely behind that group are those that bought but never read them. Especially with the newer volumes, there are a lot of very fun topics covered.
And, sure, you are best not putting together many of the low level things that are covered in those books. But... you are also best not blindly following whatever is in the other books, too? Again, many folks dislike Code Complete for fairly solid reasons.
For example, I really enjoyed and often go back to:
- https://www.oreilly.com/library/view/building-event-driven-m...
- https://www.oreilly.com/library/view/designing-data-intensiv...
- https://www.manning.com/books/100-go-mistakes-and-how-to-avo...
- https://www.amazon.com/Systems-Performance-Brendan-Gregg/dp/...
And more recently:
- https://www.manning.com/books/build-a-large-language-model-f...
- https://www.manning.com/books/the-creative-programmer
- https://www.manning.com/books/the-programmers-brain
- https://www.amazon.com/Understanding-Software-Addison-Wesley...
I also find books about specific technologies that indeed run the risk of being deprecated after a few years to be useful too
- https://www.oreilly.com/library/view/networking-and-kubernet...
- https://www.brendangregg.com/bpf-performance-tools-book.html
Furthermore, nothing keeps you from reading books about topics peripheral to computer science, say to keep up with the general vibes:
- https://www.amazon.com/Probabilistic-Machine-Learning-Introd...
- https://www.amazon.com/Deep-Learning-Foundations-Christopher...
- https://www.amazon.com/Joy-Abstraction-Exploration-Category-...
I find that all of these contribute significantly to my growth as an engineer.
I suspect this might be a side-effect of programmers buying less books. The ratio of authors who write them because they really care instead of because they hope to make some bucks would then increase.
There’s a lot of non-programming books I really enjoy though as well.