What Is the Most Influential Programming Book? 624
First time accepted submitter AlexDomo writes "If you could go back in time and tell yourself to read a specific book at the beginning of your career as a developer, which book would it be? Since it was first posed back in 2008, this question has now become the second most popular question of all time on StackOverflow. The top 5 results are: Code Complete (2nd Edition), The Pragmatic Programmer: From Journeyman to Master, Structure and Interpretation of Computer Programs, The C Programming Language, and Introduction to Algorithms."
Deitel & Deitel (Score:4, Insightful)
'nuff said
The C programming language (Score:4, Insightful)
The One Book All Coders Should Read (Score:5, Insightful)
Is Fred Brook's "The Mythical Man-Month".
The Art of Unix Programming (Score:3, Insightful)
http://catb.org/~esr/writings/taoup/ [catb.org]
K&R C (Score:5, Insightful)
The C Programming Language [wikipedia.org] by Kernighan and Ritchie (popularly known as "K&R") is certainly, objectively (puns intended), and probably demonstrably, the most influential programming book. It was a strong, probably primary, influence on every one of the titles suggested in this story. Indeed, it is something like the "ur-text [wikipedia.org]" of modern programming - the vast majority of all programming, since it was first published in 1978. It has influenced programs, programmers and programming books. The influence dependency tree of programming books revolves around K&R.
I say this despite (or perhaps as demonstrated by) the K&R block brace style, which I abhor. It saves a line to destroy column coherence. And despite popularizing the unitary "var++" (eg. in for() loops), rather than the semantically more consistent "++var". And a hundred other quirks Kernighan and Ritchie infected into programming (and programming books, and thereby programmers). The persistence of which is just part of the ample proof of K&R's paramount influence.
How To Win Friends And Influence People - Carnagie (Score:4, Insightful)
In terms of success, people skills are more useful than programming skills.
Re:Bah! Pretenders! (Score:5, Insightful)
The only CS book where 99% of the people touting it have never read it!
Re:The One Book All Coders Should Read (Score:4, Insightful)
representing everything that is soulless and wrong (Score:2, Insightful)
the 'gang of four' is a phrase coined during the Culutral Revolution of the 60s in China, a horrifically brutal period in which millions of people died, filled with mass starvation, torture, rape, murder, anarchy, mob violence, chaos, destruction, and other things.
then some fucktard computer dick comes along and writes a book about some obscure software engineering bullshit. what do they title it? "Gang of Four". oh thats FUCKING HILARIOUS
what is their next book titled, "Himmler and Heydrich"? I've got an idea! Lets write a garbage collector and call it the "Holodomor"! How fucking tongue in cheek!
Pleasantly Free of Trendy Process Related Titles (Score:3, Insightful)
It's nice to see the almost complete absence of any titles reflecting current "flavor of the month" development techniques. About the closest it gets is "Design Patterns", which I've not got the highest opinion of (for reasons I'll explain in a footnote) but which at least codified some common best practices in a way that they could be taught, rather than learned by trial and error.
Always been a bit bemused by "Code Complete". Read it (well, the first edition), enjoyed it, and thought it contained a lot of good stuff, but at the time I was perplexed by it being a Microsoft Press book. Seemed kinda like the Pope penning the definitive case for atheism.
Somewhat comforted to see The Dragon Book in there, even if it is in its newer edition. Think I've still got that one around. That, and the Hennessy and Patterson book "Computer Architecture: A Quantitative Approach". My edition's horribly out of date, but so am I..
(*) Big problem with design patterns is that there's a tendency to take them as Holy Scripture of some sort, and/or to unnecessarily squeeze algorithms into a given design pattern. However, the problem there doesn't really lie with the book, but with the reader (or the teacher of the course, I guess). "Design Patterns" strikes me as something that should be read after a decent level of programming ability has been reached and not before - there's a level of expertise required to know when using a pattern that'll make maintenance of the software a joy for all who touch the code, and when to just wing it. Too many people immediately jump in and conclude that they must use a Visitor pattern on each Decorator, except where there's a Mediator involved, in which case it's necessary to employ the Churning Curds and The Knot Of Fame, before finally employing The Clinging Creeper to either a Flyweight object for the Proxy, or an Abstract Singleton. Then they code it, and you end up with an exponential number of classes, several mutually inclusive interfaces, and a system so flexible that you have to embed a dedicated parser to make any use of it beyond initiating a single object.
No (Score:5, Insightful)
Honestly, those are terrible books. If nothing else the signal-to-noise ratio is extremely disproportionate. I mean there are nuggets of good information in the books, but a 1100+ page language tutorial is unnecessary. It would be a stretch to call the series programming books -- let alone "influential" programming books.
Re:It is about programming (Score:3, Insightful)
The biggest problem with MMM is that software developers and architects are the only people who read it. Managers, especially "non technical" project managers have never heard of it, and won't bother to read it and they are the ones who would benefit from it the most.
Starting Forth (Score:3, Insightful)
Starting Forth by Leo Brodie -- especially the "under the hood" chapter. Runner-up for me is the PostScript Language Tutorial and Cookbook. These books gave me whole news way of thinking about programming, which doesn't happen very often.
Re:K&R C (Score:4, Insightful)
I'd like the multiple weeks of my life back that python has cost me because of their whitespace as braces style when coworkers decided to mix tabs and spaces. Python's decision would be fine *if* they had decided that we must use exactly 1 tab, or exactly 4 spaces, or any other choice. Allowing arbitrary amounts/types of whitespace along with giving it semantic meaning was the biggest mistake in the history of programming languages, and renders the result unusable.
Re:No Indeed good sir (Score:5, Insightful)
Agreed, a little known book for C++ from the ground up. Is an extremely well organized book "Starting Out With C++" by Gaddis. Dietel and Dietel C++ is manageable but its a thicket of information that makes it tough for some (I have gone through Deitel C++ and Dietel Java). There are a thousand books on C++ and probably a thousand squared number of paths to learning C++. Whatever your C++ journey, have fun!
The C classic is wonderful The C Programming Language Brian Kernighan and Dennis Ritchie.
Knuth is computer philosophy. Makes your soul shine. Treat it like philosophy, read it at leisure and think hard about every word on every page.
Re:K&R C (Score:1, Insightful)
Or you can use a language which doesn't have total brain farts like that. You removed something which caused minimal to no pain (the braces) and replaced it with something that regularly causes large amounts of pain and requires discipline and rules to make work. That's a textbook definition of a big mistake. Made worse by the fact that it's impossible at a glance to tell if it's a mistake or not- with braces you can see a missing one or an extra one, without looking in a hex editor you can't see a tab vs spaces.
As for running reindent or similar app- great, except it won't work 100%, can cause bugs itself, and when doing blames or diffs of your code base will cause a lot of lines to be touched. All to avoid putting in two characters in the text. Still the wrong answer. The correct answer is to either force all indents to be a particular type and amount of whitespace and force anything else to not compile, or to just add in braces. Until one or the other happens, picking python is just asking for trouble- that language design option has cost businesses I've worked at more productivity than any other I've ever seen.
Re:Gang of Four (Score:5, Insightful)
Great book on design patterns, Design Patterns: Elements of Reusable Object-Oriented Software [wikipedia.org].
That book may be considered a classic but is one of the poorest presentations of material I've ever seen to recommend to a beginner. It works better as a reference but even then thinking in those terms has a tendency to make you over engineer every damn thing unless you actively apply the KISS principle. A lot of the patterns covered are best shown to newbies with concrete examples rather than in generic theoretical form.
Re:Bah! Pretenders! (Score:5, Insightful)
Re:Bah! Pretenders! (Score:4, Insightful)
Re:Gang of Four (Score:4, Insightful)
I agree that most seasoned programmers have already used most of the design patterns themselves. The value of the book is to give names to those patterns, to aid in communicating design and intent within a team of programmers. The very act of labeling gives these things a concrete boundary instead of just nebulous knowledge mixed in inside programmers' heads. The boundaries established also allow analyzing the scope and robustness of the patterns in isolation.