Ask HN: Are older programming books useful?
For context, I'm a librarian purchasing tech books for my public library. We have around 30 books just on Python alone, not counting any that are about using Python for things like machine learning or data science.
Other than clear version changes (like Python 2 to Python 3), are older programming books still useful? The majority of the books span from around 2014 to the present, and they're all still circulating.
Thanks! (And thank you for the book recommendations posted here as well, I have definitely purchased some of them for our collection.)
24 comments
[ 3.2 ms ] story [ 68.6 ms ] threadThat said, there are a lot of "programming" books that are more technology-independent and contain more "timeless" knowledge about the art and craft of programming (and more fundamentally, computer science). If you want to make sure that your purchases stand the test of time, look for those. You can find a lot of them by searching sites like HN, Reddit, and Stack Overflow for lists of the best computer science and software engineering books. A few examples that tend to show up on these lists:
- Bentley, "Programming Pearls"
- Kernighan and Pike, "The Practice of Programming"
- McConnell, "Code Complete"
- Brooks, "The Mythical Man-Month"
- Abelson and Sussman, "Structure and Interpretation of Computer Programs"
- Gamma et al., "Design Patterns"
- Fowler, "Refactoring"
- Kernighan and Ritchie, "The C Programming Language"
just to list a few off the top of my head.
I think a considerable amount of what I'm looking at is the more ephemeral type of book, so I feel a bit better doing a more vicious weeding. Thanks!
Let me +1 the previous SICP (Structure and Interpretation of Computer Programs) and Mythical Man Month. I also like DeMarco's PeopleWare. And Loeliger's "Threaded Interpreted Languages." I bought a copy of Doug Kaye's "Loosely Coupled Systems" from bettereorldbooks.com and it looks like it was a library book that should never have been taken out of circulation. It discusses an important aspect of software design that gets little love in the mainstream. I also got a copy of Yourdon's "Structured Design," which was originally released just as OOP was getting big. But... it still contains numerous pearls of wisdom suitable for both OOP and Functional programmers.
Anything with early web stuff is also really interesting. The ones with long lists of URLs in the back (even with them being mostly long dead), chapters on archie or gopher/veronica... it's very cool history. Books from the early days of the internet when it was all potential and exploration, before greed and surveillance capitalism set in, are both nostalgic and inspiring.
It’s a remarkable book and it’s tremendously satisfying to read.
If you’re interested, you can download the early 1990’s version of Microsoft Bookshelf for DOS and it’s included on there.
Engineers now seem to lean on books less, I think it is a great way to learn about tech and programming. Quick searches are mostly optimized to solve one issue. For a bigger scope, I have had great experiences with reading books, including older ones.
Some older titles I have really enjoyed are: Mythical Man Month Code Complete II The Psychology of Computer Programming Joel On Software Rapid Development
I’m moving in the coming days and I couldn’t give away books that are 5 years or older. They ended up at Goodwill.
Some books age better but these are usually books on the fundamentals of CS or software engineering; not programming tutorials.
Books about learning programming for beginners or just about a language have a longer shelf life. Some people like to work through them chapter by chapter as a course, and they can be particularly useful to kids in smartphone only houses who don't have day to day access to a PC.
There are, as others mentioned, lots of "theory" books that are ageless. How To Solve It: Modern Heuristics for example. But these are most useful to professionals and university students honestly. There are also pop-science type books like Algorithms To Live By or Invisible Women that are interesting to a wider audience but don't directly teach skills.
The problem with throwing all the task specific books in the trash is that they do provide some kind of a bridge between the very basics and actually doing something useful. Users don't want to learn python, they want to Automate The Boring Stuff or do machine learning or whatever. I think pointing them at the latest ebooks for that stuff might be best. If my local library let me e-borrow the latest packtpub and oriely books that would be awesome.
One thing I find wierd as I get into harder, more architectural problems, is that as an industry we spent decades thinking about stuff, creating standards, and writing books about stuff, and no one reads them. We prefer to invent wheels again because it feels more like progress than reading books.
The second edition is coming out soon.
Simply Scheme, Structure and Interpretation of Computer Programs, How to Design Programs.
They're a hundred times easier to get going with the exercises using racket than the incredible faff it used to be when purchased, especially with SICP.
Maybe if the book is good enough the wider community supports it?
Then there's K&R C, K&Pike, Richard Stevens, of which any edition from the last 20 years is still pretty useful. Although there must be something better than K&R for C by now - the example programming style can be improved upon while still appreciating its considerable strengths. In that general direction Van Der Linden's "Expert C" and "The C Puzzle Book" remain fantastic books to grok C and low level programming.
The Wrox "Professional Assembly Language" is both out of date (32 bit x86) and still about your best bet, update it and play with the x86-64 abi docs, a download of the intel optimisation manual, "Hackers Delight" and http://aggregate.org/MAGIC/
My advice to a librarian buying programming books: just stop!
There is a deluge of crap that is simply full of wrong information. So even when the topic is still fresh and relevant, those books are still wrong. An expert in the area could have a spot-the-error field day with most of it.
To be able to know what the nuggets of gold are in all the dirt, you'd have to have a background in it, or have access to a consultant who does. I would say, multiple consultants due to the amount of stuff that is out there. You can easily find heavily experienced developers who have no clue at all about a vast amount of stuff that they don't work with.
The valuable books that will stand the tests of time might not even be of interest to the public library audience; they may be more at home in a university library.
Basically, the public library is not a good venue for conveying up-to-date programming information that focuses on doing specific tasks with specific versions of tools on specific platforms. It's not a good use of the library's budget, staff time and space to be on that treadmill at all. Making effectively purchases in this area (skimming the cream of what's out there) requires knowledge that librarians typically don't have, and even if you manage to pick out the momentarily good stuff, a lot of it will have to be prematurely discarded to make space for new material.
Programming books aren't academics; they are about the entirely arbitrary and ever-changing conventions of some stuff that is made up of pure information, which someone pulled out of thin air.
An actual computer science text from 1990 can be very useful; so could a book about electronics from 1990, or mechanical engineering.
A programmming book from 1990 is like the repair manual or schematics for some appliance from 1990. Except in the case of the appliance from 1990, at least it was similar to many others: a repair manual for another make and model could actually be useful. We have to imagine a world in which two refrigerators have absolutely nothing in common; the parts look completely different, are hooked up differently and have different names.
Look at medical books that make it into libraries. Same for psychology or any social science. Tons of history books fall into editorializing so similar can be said of them.
And for technical books, (woodworking, drawing, knitting, sewing, etc) they tend to fall into cycles of fads with books that are basically clones of each other.
I see a compromise solution is to start with books if you are a total zero in programming. And, with understanding, switch to modern sources of information as soon as possible.
Since you're a librarian, may I suggest some books you might want to consider keeping (not all of these are programming books per se):
Designing Data Intensive Applications, by Martin Kleppmann
K&R for C
K&R The Practice of Programming
The Art of Unix Programming, by Eric S. Raymond
The Cathedral and the Bazaar, by Eric S. Raymond
Code: The Hidden Language of Computer Hardware and Software, by Charles Petzold
The Soul of a New Machine, by Tracy Kidder
The Idea Factory, by Pepper White
The Little Schemer, by Friedman and Felleisen
SICP, by Sussman and Abelson
Introduction to Algorithms, CLRS
The Algorithm Design Manual, by Steven
Introduction to the Theory of Computation, by Michael Sipser
The "dinosaur book", "dragon book" etc.
In this regard, I would add "The AWK Programming Language" by Aho, Kernighan and Weinberger. Published in 1988, but it was an excellent introduction to computing for a layman like me around a decade ago. Clear, concise writing; really teaches you to think. Still relevant in 2022, especially considering that awk has gained some attention in recent years. Great warm-up to approaching C via K&R. Can't go wrong with Brian Kernighan as a teacher, I guess.
Another worthwhile book is "Modern Perl, Fourth Edition" by chromatic (2015): https://pragprog.com/titles/swperl/modern-perl-fourth-editio...
Also, "Higher Order Perl" by Mark Jason Dominus (2005). Functional programming techniques with Perl; also ticks the "general thinking book" box. Lots of praise on Amazon: https://www.amazon.com/Higher-Order-Perl-Transforming-Progra...
Leo Brodie's "Starting Forth" and "Thinking Forth" probably also count as timeless classics in the "thinking book" section.
Lastly, see also Seymour Papert's books "Mindstorms: Children, Computers, and Powerful Ideas" (1980) and "The Children's Machine: Rethinking School in the Age of the Computer" (1993). These are brilliant for anybody who's interested in thinking and learning, or the Logo programming language that Papert developed.