I have a book, purchased during my undergraduate days, entitled Introduction to Algorithms. Said book contains a wealth of information about algorithms and data structures, has its own Wikipedia page, and even a snappy acronym people use (“CLRS”, for the first letters of its authors’ last names).
When I bought it, I expected it to be both an excellent textbook and a book I would refer to many times throughout my professional career. I cannot remember whether it was a good textbook in the context of my classes, and I cannot remember the last time I opened it to find some algorithm or verify some subtle point. Mostly, it has served two purposes: an excellent support for my monitor to position the monitor more closely to eye level, and as extra weight to move around when I have had to transfer my worldly possessions from place to place.
Whether this reflects on the sort of code I have worked on, or the rise of the Internet for answering questions, I am unsure.
I have another book, also purchased during my undergraduate days, entitled Programming with POSIX Threads. Said book contains a wealth of information about POSIX threads (“pthreads”), is only mentioned in “Further Reading” on the Wikipedia page for POSIX threads, and has no snappy acronym associated with it.
I purchased this book because I thought I might assemble a library of programming knowledge, and of course threads would be a part of that. Mostly, it would sit on the shelves to show people I was a Real Programmer(tm).
Instead, I have found it to be one of those books to always have close at hand, particularly working on Gecko. Its explanations of the basic concepts of synchronization are clear and extensive, its examples of how to structure multithreaded algorithms are excellent, and its secondary coverage of “real-world” things such as memory ordering and signals + threads (short version: “don’t”) have been helpful when people have asked me for opinions or to review multi-threaded code. When I have not followed the advice of this book, I have found myself in trouble later on.
My sense when searching for some of the same topics the book covers is that finding the same quality of coverage for those topics online is rather difficult, even taking into account that topics might be covered by disparate people.
If I had to trim my computer book library down significantly, I’m pretty sure I know what book I would choose.
What book have you found unexpectedly (un)helpful in your programming life?
I’ve always felt somewhat disappointed about the state of C++ books. The language is large and sprawling; which I see reflected in the books. I have Stroustrups and Meyers books but something about them, just puts me off. I remember reading C++ lecture notes that Brian W Kernighan had written for a Princeton course, thinking: What if Stroustrup had, had Kernighan as co-author!
As for a helpful book, I’ve found the advice in David Agans Debugging; Nine Indispensible Rules, useful for troubleshooting in many different situations. I re-read a chapter every now and then.