5 ms·
Man, still Code Complete? I dunno. Wasn't that big a fan, honestly. I think I got more out of the first three chapters than the sum of the rest of the book. If
by famousactress 15y ago
Man, still Code Complete? I dunno. Wasn't that big a fan, honestly. I think I got more out of the first three chapters than the sum of the rest of the book.
If we're talking about technical books, Refactoring is easily the most beneficial read I can remember having. I was pleased to see it (barely) trump Design Patterns... a book that I think (through no real fault of it's own) has spoiled more developer-years than it's benefitted.
- lawnchair_larry 15y agoHaha, I clicked the HN headline thinking "I am going to see the top answer as Code Complete and then be annoyed again". Softies are overrepresented on stackoverflow. Edit: Oh, no wonder. This is a very old repost.
- phillmv 15y agoGoing through the list: Code Complete: First ed 1993 Prag Prog: 1999 SICP: 80s? K&R C: ditto CLRS: 1990 Refactoring: 1999? GoF DP: 1994 Mythical Man Month: late 70s, 80s? TAOCP: Decades ago, and not a serious suggestion Dragon book: 1986 GEB: 80s was it? Programming Pearls: 1999 CODE: 1999 Off the top items in that list, only two have them have been published in the last TWELVE years, which in our industry is at least two full generations. I don't know about you guys but that makes me a little sad. I think somethings have changed a lot in the last 20 years. I refuse to believe that Brooks had the last word on project management several generations ago. I accept the notion that "the more things change, the more they stay the same" but I can't help but think this Greatest Hits List couldn't be improved somewhat.
- riffraff 15y agoit is somewhat reasonable that older books have more people who read them and learned from them, the effect of a book written more recently may yet be small but will be important later. (Cue van gogh related factoids)
- neilk 15y agoGiven that JavaScript and Python are very mainstream now, we need some sort of text that covers functional techniques for the average programmer in scripting languages. SICP is dated and doesn't really match what modern languages can do. Mark-Jason Dominus' "Higher-Order Perl" is fantastic, but unfortunately specific to a language that's most programmers are not choosing in 2011. There was an attempt at a JavaScript port. Maybe someone should take that up again.
- spacemanaki 15y ago> SICP is dated and doesn't really match what modern languages can do. I disagree. There's over 200 pages before they even introduce mutation and impure functions. Later they touch on the thorny problems that mutation creates when they touch on concurrent programming. There's sections on building lazy streams which are core parts of Clojure and Haskell. And I don't think there's a more accessible intro compilers and programming languages text than chapters 3 and 4. While there might be other places to learn about functional programming to apply to working in Python and JavaScript, SICP is a fine place to learn the fundamentals. In some ways, I would say modern programming languages are just starting to catch up to SICP. (yes I know Haskell is pretty old, and disclaimer: I'm a huge fan of SICP)
- neilk 15y ago> I disagree. There's over 200 pages before they even introduce mutation and impure functions. That's kind of the point. I tend to be the one defending SICP on this board, but only for someone who wants the very particular kind of education SICP brings. Meanwhile, over in languages people are using, you don't have the option of living without mutation. Time to learn how to protect yourself, or not, with closures. Recursion has a bigger speed and space penalty. You need to tell people when to use maps and folds and when not to. SICP doesn't really do combinators, and they are very useful in JS. Also, a lot of libraries in JS use chaining, so a grounding in their theory (maybe even a discussion of monads à la Haskell) might be very fruitful. SICP has nothing like that. Callbacks are everywhere in JS programming, so a discussion of how to avoid spaghetti would be good. Latency is a much bigger deal for JS -- how to balance very fast local resources with potentially never-returning remote resources -- and techniques for beating that are not to be found in SICP, as far as I remember. And of course there's no discussion at all of UI or media in SICP.
- dubya 15y ago"TAOCP: Decades ago, and not a serious suggestion"? TAOCP is not even finished. My copy of volume 4a is copyright 2011. Although it's definitely not something every programmer should read, it's a fantastic resource when you run into a really, really hard problem. I think it's also a great source for recreational programming problems if you like that sort of thing.
- Silhouette 15y agoThere's an element of inevitability here. It is natural that the most widely applicable material was written long ago, because the basic problems were solved long ago as well. Today's problems tend to be more specialised, which means even a brilliant book about how to solve them isn't going to be as widely influential. Something accessible to mere mortals about functional programming probably has the best chance today, given the increasing penetration of related ideas into mainstream programming languages, but while there are some brilliant presenters working in that field, their focus is still typically far too academic for mainstream interest. Something about non-traditional databases, distributed systems, and why certain key problems can't be solved and there are necessarily always trade-offs, might also be applicable to many programmers today, but again I know of no natural figurehead to write a definitive book on the subject. The drop-off in top-notch books also correlates pretty well with the rise of the WWW as a mainstream information source. Of all subjects, computing is one of the fastest evolving and perhaps the most natural candidate to find a home for new information on Web pages rather than paper. It's tough to write a book that won't date scarily quickly today, again partly because of the specialism aspect, but a Web page stays up-to-date for as long as you care to update it. What's left? Lowest-common-denominator commodity books: X For Dummies, Learn Y in Z hours, the latest unsupported advocacy from some "Agile trainer", and occasionally a printed snapshot of an interesting web site as it was six months ago when the publishing process was started. Not exactly the kind of material written by the industry giants and sagely academics of 20 years ago, alas.
- ggchappell 15y ago> Off the top items in that list, only two have them have been published in the last TWELVE years, which in our industry is at least two full generations. > I don't know about you guys but that makes me a little sad. It doesn't make me sad at all. It says that computer programming is not just about the latest whiz-bang tool. Rather, the field has a core of worthwhile, enduring knowledge that does not become obsolete just because you switch to a new language/framework/platform/whatever. And this core is worth spending time and effort to learn, because it is not going to go out of date.
- deleted 15y ago[deleted]
- rguzman 15y agothis is just a reflection of the fact that now we can use the internet to spread ideas and this audience are/were the earliest adopters. in 5-10 years (or even now, maybe?) people will be talking about what single blog post is the single most influential post every programmer should read.
- mdsatbom 15y agoEuclid's Elements: 300BC Many of the books above focus on the fundamentals which is what makes them classics. Also, The second edition of Programming Pearls was around 1999. The first edition was much earlier.
- InclinedPlane 15y agoI think Code Complete deserves its usual top spot on these lists. You need to understand the skill set of the typical entry level coder, even after acquiring a CS degree. There is so very, very much they don't know and Code Complete helps fill in a lot of the gaps. Most usefully it helps instill the idea that it's important to use practices that are backed up by evidence and that there is a lot more to learn when you get out of school. A lot of the advice in it may seem a little outdated or even trivial to a lot of developers, but it is not less fundamental. Being inculcated in the ideas that it's bad to break the build, that you need to build often, that finding and fixing problems earlier saves a crap-ton of effort, that using proper source control tools and bug tracking tools is generally incredibly helpful. It's easy to forget that there are devs out there who don't know these things, don't have the habits we think should be universal, etc. As far as coding skill, I agree about Refactoring. Design Patterns is just a grab-bag of tools that are useful in some situations and harmful if misused or abused. Refactoring is a set of skills that are globally useful and are married to equally important models, terminology, and advice. Studying refactoring gives devs a much stronger ability to talk about, study, understand, reason about, and modify code. I'd much rather work with someone who was an expert in refactoring than someone who was an expert in design patterns. Edit: also, Refactoring concentrates on changing existing code vs. greenfield development, which tends to be far more useful in practice.
- radicalbyte 15y agoThe value of the GOF book is in the way of thinking, not in the actual patterns themselves.
- BerislavLopac 15y agoI was seriously disilusioned when I have learned that most of the design patterns make sense only in strongly-typed languages, and that the whole mess that is abstract factory can in, say, PHP be replaced with a simple new $className();
- gtrak 15y agoBut then you realize, some people can only barely decipher what's printed on the pages, they consider it a bible, when it is in fact, a consequence of design compromises in pseudo-OOP langs like C++ and java. I really really hate singletons, visitors, factories, and all the lot, but I'm glad I can understand the intent of these things. I think being disillusioned with this book is a good stepping stone for devs, it felt like one to me.
- nyrulez 15y agoPart II (Creating High Quality Code), V (Code Improvements) , VI (System Considerations) and VII (Software Craftmanship) from Code Complete is one of the best SE reading I have had the pleasure to read. I don't consider that stuff basic (as compared to variable naming which you might be alluding to). The first three chapters are too basic IMO and are not even worth reading for any experienced professional.
- jackfoxy 15y agoWhile I have never read Code Complete, I know of at least one very smart guy who read it, highly recommends it, and is utterly incapable of maintaining legacy code he did not write. He simply refactors everything he touches, which is not to be recommended. There are no books I know of that teach you how to work in legacy code. It's a dying art.
- joelhooks 15y agoFeathers's Working Effectively With Legacy Code is /excellent/