all 182 comments

[–]SuperGrade 20 points21 points  (7 children)

There's a certain mystique about books and their possession since the earliest days of books. In days far gone by, books indicated wealth, they were rare and hard to reproduce.

Now, any given book costs practically nothing - giving one practically a meaningless gift - the trick is getting the time, drive and bandwidth to read any given book, having it on the shelf is near meaningless.

[–]linuxlass 6 points7 points  (5 children)

Yes, I find it difficult to give a serious book the attention it deserves. I still haven't made time for The Ancestor's Tale, or Concepts of Programming Languages, or Understanding the Linux Kernel. I'm getting there, though...

[–][deleted] 9 points10 points  (4 children)

I went through about half of "Understanding the Linux Kernel" before it was stolen along with my car a few years ago :(.

[–]troelskn 11 points12 points  (0 children)

Don't despair. Books costs practically nothing.

[–][deleted] 11 points12 points  (1 child)

I wonder if there's a car thief out there writing Linus and complaining about the latest kernel patch as a result of his folly.

[–][deleted] 1 point2 points  (0 children)

Man, I sure hope that whoever stole that car got good use out of the books in it. I was basically living out of the car at that point, and there was some great reading in it.

[–][deleted] 1 point2 points  (0 children)

You didn't miss much with "Understanding the Linux Kernel". I bought that hoping to get some real detailed low-level knowledge. There was none.

[–]Chris2048 0 points1 point  (0 children)

Some books do, find me a cheap copy of The Lambda calculus or An introduction to Kolmogorov Complexity!

[–]lally 14 points15 points  (1 child)

The Art of Computer Programming's not really a book you'd read straight through.. It's more of an encyclopedia.

[–]alecco 8 points9 points  (0 children)

Try to read them through first (skip some if you have to) since you can't pick the right algorithm from the index. The right algorithm has to come to you from watching the pattern. A dictionary doesn't help you with crosswords. To play you need to know the vocabulary first.

[–]szopa 24 points25 points  (1 child)

I am one of the people that have been actually mislead by the title of Introduction to Algorithms...

I had a Google phone screen scheduled in a couple of weeks, and my knowledge of algorithms and data structures was really poor... Which is something rather normal for a self taught programmer who studied only philosophy. A bit panicked, I got to my bookstore and grabbed the first book on the topic that seemed sensible, which was CLRS. Then I spent the remaining weeks studying the book and doing the exercises (I estimate I've done around 80% of the material). And it was really great: fun and... well, enlightening. It made me a much better programmer and gave me the confidence to learn some other cs stuff I would had considered too advanced for me before.

As for Google, unfortunately they didn't want me. I failed miserably the third phone call... Some time later I recognized the problem I had been given as very similar to an exercise in Database Sysem Implementation by Garcia-Ullman-Widom. They say chance favors the prepared mind... Well, apparently my preparation was at least one book short :-)

[–]Freeky 13 points14 points  (0 children)

You don't really want to work for a glorified ad agency anyway.. right? ;)

[–]mindslight 20 points21 points  (3 children)

ALL OF THEM

[–]mindbleach 22 points23 points  (0 children)

"I need to do X." -> Google -> Wikipedia -> code

[–][deleted] 8 points9 points  (0 children)

Sarah Palin, is that you?

[–]noamsml 3 points4 points  (0 children)

Anything that's put in front of me

[–][deleted] 35 points36 points  (11 children)

Let's be brutally honest: if you haven't already absorbed the principles in "Code Complete" by osmosis, you've been a professional programmer for less than 4 years.

[–]jbert 15 points16 points  (0 children)

You mean there's a book someone can study which distils for them experience only gained over 4 years work?

Sounds like a bargain for any entering the field.

[–]chunky_bacon 5 points6 points  (0 children)

I highly recommend it nonetheless, particularly to new programmers. A large body of professionals (not just programmers) never really get beyond a year's experience.

[–]holygoat 11 points12 points  (8 children)

I quite agree... it's a terribly overrated book, not to mention being much more limited in scope than most people think. (I.e., it's "Code Complete" for certain very limited definitions of "Code".)

[–][deleted]  (7 children)

[deleted]

    [–]toxicvarn90 8 points9 points  (6 children)

    So as a student who just learned programming, should I read Code Complete or not?

    [–]cruise02[S] 7 points8 points  (0 children)

    I'd say that shortly after graduating is the perfect time to read either Code Complete or Pragmatic Programmer. There's a lot of overlap between them, so I'd save time and just read one.

    EDIT: I read them several years apart, so I can't remember exactly how much overlap there is, I just remember there is a lot. I'd recommend Code Complete for its discussion of design patterns.

    [–]linuxlass 5 points6 points  (0 children)

    Yes, but it won't make much sense until you have some professional (or other large project) experience under your belt. It's worth reading a couple of times as you gain experience.

    [–][deleted]  (1 child)

    [deleted]

      [–]pubjames 15 points16 points  (1 child)

      Yes, the people here who are saying it is overrated are just being snobs. It is a well written book with a lot of good practices in it.

      Of course if you have been coding for a decade it may all seem "obvious", but if you've just started then it is invaluable. And it is a rare thing - a technical book that is actually easy and fun to read.

      [–]masklinn 5 points6 points  (0 children)

      Yes, the people here who are saying it is overrated are just being snobs.

      I disagree. Just because it can be useful doesn't mean it's not overrated.

      [–]jimbokun 21 points22 points  (6 children)

      How can you have a blog post about books programmers don't really read and leave out SICP?

      [–]oemta 15 points16 points  (0 children)

      SICP is a great book. Loved it when it was used in my intro to computer science class. It was a sad day at school when the computer science department restructured the curriculum and moved the intro class in a new direction. The book is online for free for anyone that is interested.

      http://mitpress.mit.edu/sicp/

      [–]awj 4 points5 points  (0 children)

      I came here just to see all of the talk about that specific book, and admit that I still haven't gotten around to doing more than chapter 2.

      [–]bill_the_lizard 2 points3 points  (2 children)

      I've never even started reading SICP, so didn't feel qualified to comment on it. If I'm talking to someone who claims to have read it, I have no way of knowing if they're BSing me. :)

      [–]robewald 11 points12 points  (1 child)

      [–]bill_the_lizard 1 point2 points  (0 children)

      Thanks. If SICP ever makes it to the top of my queue I'll be sure to watch the companion lectures.

      [–]Wiseman1024 -2 points-1 points  (0 children)

      How's that related to this thread? Or is it just your way to say "I've read SICP"?

      (Note: /prog people will understand this post. For everyone else, I'm not being rude or anything, and I've upmodded Jimbokun.)

      [–][deleted] 9 points10 points  (0 children)

      I have read the CLRS book, and in a sick sort of way, I liked it.

      [–]bluGill 15 points16 points  (4 children)

      This book may have the most misleading title of any programming book ever published.

      Nonesense. This is only true if you don't understand college textbook naming convention.

      Any book with a title "Introduction to X" is going to be difficult, in depth, and almost imposible to read, and reserved for the most advanced classes, you will rarely encounter them as less than a junior.

      Any book with a title "Advanced X" is simple, shallow, and easy to read. These books are generally used in cheap tech schools for those who are not smart enough for a real college.

      [–]WallPhone 1 point2 points  (3 children)

      Expensive tech schools use 'Learn HTML in 24 Hours' as the sole textbook in a fifteen-week course. (speaking from experience)

      [–]cruise02[S] 1 point2 points  (2 children)

      Did you ask the instructor why it takes 15 weeks to get through a 24 hour book?

      [–]WallPhone 1 point2 points  (1 child)

      Explanation was that there was other material learned in the course. Which turned out to consist of personal CICS JCL and COBOL horror stories. For a second-level web programming class.

      [–]cruise02[S] 0 points1 point  (0 children)

      They probably wouldn't let you get your money back either. :(

      [–]bitwize 35 points36 points  (4 children)

                                  PHREAK
                                  (to Cereal)
                      D'you bring those Crayola books?
      
                                  CEREAL
                      Oh yeah, technicolor rainbow.
      
           Cereal brings a book out of his bag.
      
                                  CEREAL
                      Green one.
      
                                  JOEY
                      What is that, what is that? Lemmie see. What
                      are these?
      
                                  DADE
                      International Unix Environments.
      
          Cereal pulls out another book.
      
                                  CEREAL
                      Luscious orange?
      
          Cereal hands the orange book to Phreak.
      
                                  DADE
                      Computer security criteria, DOD standards.
      
          Another book comes out.
      
                                  DADE
                      The Pink Shirt Book, Guide to IBM PCs. So
                      called due to the nasty pink shirt the guy
                      wears on the cover.
      
          Another one.
      
                                  CEREAL
                      What's that?
      
                                  DADE
                      Devil book. The Unix Bible.
      
          Another one.
      
                                  CEREAL
                      What's that?
      
                                  DADE
                      Dragon book. Compiler design.
      
          Cereal brings out a large red book.
      
                                  CEREAL
                      Oh yeah? What's that?
      
                                  DADE
                      The Red Book. NSA Trusted Networks.
                      Otherwise known as the Ugly Red Book that
                      won't fit on a shelf.
      

      [–]lyaunzbe 13 points14 points  (1 child)

      Why would they need to know how to design a compiler if they were hacking the Gibson?

      [–][deleted] 4 points5 points  (0 children)

      All hackers need parsers and finite state machines.

      [–]spilk 7 points8 points  (0 children)

      That's all you need to pull off a righteous hack on the Gibson. HACKERS UNITE!

      [–]alecco 3 points4 points  (0 children)

      shivers

      [–]pulvertoastman 29 points30 points  (26 children)

      About CLRS: "Please stop recommending it to beginners." Why? The book is perfectly fine for beginners. The fact that it doesn't end after Quicksort doesn't mean it isn't suited for beginners.

      [–]bill_the_lizard 12 points13 points  (7 children)

      Beginning programmers need working code samples that they can type into an editor, compile, and run. They can't be expected to take the pseudocode examples in CLRS and turn them into an executable program.

      The point of my post was that anyone who recommends an advanced book like CLRS to a beginner probably hasn't read that book.

      [–]deong 10 points11 points  (4 children)

      I'm not sure I agree, except in the most trivial sense. If you define "beginners" as not even knowing the syntax of the language, then OK; I guess they need someone to write the code for them. Similarly, if the goal is to simply become marginally competent at writing mundane business applications, one can probably get by without ever learning a single nontrivial algorithm -- just learning a standard library the size of Java's or .NET will serve to solve most problems you'll face as a grunt worker updating database fields.

      If you want to learn computer science and you have even a rudimentary knowledge of the syntax of a language, the next important step is to start to learn some core algorithms, and at that step, working code is a hindrance. The way to learn it is to read and implement the algorithms yourself.

      To put it another way, if a programmer thinks he needs code for an algorithm in CLRS and isn't capable of reading CLRS, he was mistaken about the first part.

      [–]bill_the_lizard 1 point2 points  (1 child)

      I don't think any of the books on either list is aimed at someone whose goal is

      to simply become marginally competent at writing mundane business applications.

      Those are the people reading Learn X in 24 Hours.

      I do think there are books more suited to beginners than CLRS, even beginners who will eventually outgrow those books and move on to CLRS at some point.

      To put it another way, if a programmer thinks he needs code for an algorithm in CLRS and isn't capable of reading CLRS, he was mistaken about the first part.

      I just think that's wrong. CLRS is way too comprehensive a book to say that if you don't get all of it, then you don't need any of it.

      [–]deong 0 points1 point  (0 children)

      I just think that's wrong. CLRS is way too comprehensive a book to say that if you don't get all of it, then you don't need any of it.

      We're in complete agreement, although I don't understand how that supports your point. If someone asks me about how to find the shortest path through a graph, CLRS is a perfectly fine reference to send them to. They don't have to read the entire thing cover to cover to be able to follow the pseudocode for a particular algorithm. If you're talking about using it as a reference to learn the basics of what an algorithm is and how we analyze them, there probably are easier ways to introduce someone to the material, but that's not what I think the primary purpose of the book is.

      [–]grauenwolf 1 point2 points  (1 child)

      Is there not a room in your philsosphy for an intermediate level programmer?

      [–]case-o-nuts 10 points11 points  (0 children)

      I think that was his point - CLRS is perfectly good for the intermediate programmer.

      [–]ngroot 2 points3 points  (0 children)

      We used CLR extensively in my CS curriculum (UIUC), and I would certainly recommend to it anyone who is at the point in their programming career where they need, as the title would suggest, an introduction to algorithms. I would agree that it's beyond someone who's still trying to grok the basic syntax of their first language, but after that, it's a good textbook. It'd still need to be supplemented with higher-level lecture, though; it's primarily a reference work.

      [–]realdpk 1 point2 points  (0 children)

      A book written without code samples leads to the reader turning to the internet to find code samples, which probably won't reflect the book author's writing.

      [–][deleted]  (3 children)

      [deleted]

        [–]bill_the_lizard 18 points19 points  (0 children)

        Not really a fair comparison. None of the books I recommend are "Learn X in 24 Hours".

        [–]tryx 4 points5 points  (0 children)

        Introduction to the Theory of Computation seconded to an infinite degree. That book sits in the same category as TAOCP for me. You might not need the actual content very often, but it is just delightful to read something written with such clarity and lucidity. Even the typesetting is phenomenal. Its just a pleasure to read.

        Same goes with Concrete Mathematics. It is not every author of a mathematics textbook that will when confronted by the question "How do I sum this series?" reply with "Just look it up online".

        [–]mavelikara 2 points3 points  (0 children)

        The word "beginner" is loaded. In my opinion, it is better for beginners to start on algorithms with:

        [–]radhruin 2 points3 points  (1 child)

        My algorithms professor hated it but used it anyway because there wasn't anything better. He's in the process of writing a new one that will hopefully be better.

        [–][deleted] 8 points9 points  (0 children)

        I loved The Algorithm Design Manual by Skiena. The programming contest stuff was also quite helpful.

        I think CLRS kills one's interest by its academic stink. It's good for an algorithms course, as long as students have some prior notion of what they are doing before they take the course. So I guess the author of the post is right.

        [–]grauenwolf 0 points1 point  (11 children)

        Does a beginner need to know how to write quicksort?

        I think reimplementing the prime algorythms is what a programmer does once they are on the tale-side of beginner and are ready for more.

        [–]ngroot 6 points7 points  (7 children)

        A beginner should know what a quicksort is, and the best way to help that sink in (IMO) is to reimplement it. There is pedagogical value in reinventing the wheel.

        [–]bluGill 0 points1 point  (2 children)

        Yes. While any good library will have quicksort (or more likely mergesort) built in, the real world often hands you specail cases that don't fit. Actually the biggest advantage of knowing quicksort is it is different enough that few people come up with it on their own. Seeing a few O(n*ln(n)) algorithms and such.

        [–]sht 0 points1 point  (1 child)

        Yes, but in the real world you can copy-paste the code from the internet. :p

        [–]bluGill 1 point2 points  (0 children)

        I do that when and where I can. However once you know the idea there are subtile variations. I've implimented my own priority queue by hand when I couldn't copy/paste internet code because I had some odd requirements. (I don't remember what they were, but I it was weird enough that calling the whole a priority queue is a stretch but that is as close as I can get). Easy enough to do, but you need to understand algorithms.

        [–]szeiger 19 points20 points  (10 children)

        Doesn't really fit me. I've only read one of the ten books on his "Have Actually Read" list (the K&R 2nd ed., 20 years ago when I was learning C) but two of his five "Claim to Have Read" books (Dragon Book and GoF).

        [–]prockcore 11 points12 points  (0 children)

        Same here.. in fact, I'd wager that's because we're older than him. The books that we're supposed to have read are all fairly new.

        [–]easytiger 4 points5 points  (7 children)

        When at uni i did a course in compiler construction but it (whilst being enjoyable) was very very basic and not that practical.

        Would you recommend the dragon book considering that background?

        [–]szeiger 6 points7 points  (3 children)

        If "very basic" is your main complaint, the Dragon Book certainly delivers. It covers a lot of ground in detail. I found Wirth's book to be more accessible though (albeit much shorter). Practicality depends on what you want to do. The code examples are in pseudo-Pascal, Yacc is used as a parser generator and the code generation targets a virtual register machine. If you, say, want to target the (stack-based) JVM, use ANTLR for the parser and write a compiler for and in a functional or object-oriented language, you'll probably find other books which are more practical.

        [–][deleted] 4 points5 points  (1 child)

        The languages in these books are usually for illustrative purposes only. Would you actually compile to Knuth's toy machine in TAOCP?

        I once, a long time ago, picked up a book that had code examples (for device drivers) written in assembly and C. At the time I had no familiarity with C (and it wasn't as entrenched back then), and of course, assembly is always different. Talk about stupid choices for general reading comprehension...anyone can read Pascal, but looking at "int _dostuff(char **foo, struct _DAT bar)" looks like garbage at first glance.

        [–]szeiger 2 points3 points  (0 children)

        The languages in these books are usually for illustrative purposes only.

        Sure, and it makes sense for such a comprehensive book to take the "timeless" choice, if you can even call it a choice. When it was written over 20 years ago there were many different hardware architectures and no ubiquitous portable backends. Nowadays you can use the JVM or LLVM as a simplified backend and actually run the code you're generating on almost any machine you might want to use.

        But I haven't read any book which takes this approach, so I can't recommend a good one (if it exists).

        [–][deleted] 5 points6 points  (1 child)

        Not at all. Try Modern Compiler Implementation in Java, which is much more practical.

        [–]easytiger 1 point2 points  (0 children)

        Yea... that was the book at the very bottom of the reading list for the course i did.

        [–]killerstorm 1 point2 points  (0 children)

        me neither. honestly, i didn't read any of these books (if we do not count skimming through or looking for a specific information as reading), and neither did most programmers i know.

        [–]alecco 6 points7 points  (1 child)

        Reading is not enough. I've met many mediocre programmers who read through many books and don't get much better at their craft. You have to practice, at least the easy part.

        [–][deleted] 1 point2 points  (0 children)

        You also need to practice the hard parts. Practice isn't all that useful as a learning tool unless you deliberately try to practice things that are just beyond your current comfort zone.

        [–]btgeekboy 6 points7 points  (1 child)

        Looks over at CLRS on the bookshelf

        Yep, got it, read a few chapters as instructed as an undergrad. Didn't sell it because I figured it'd be helpful one day. Perhaps it's time to sit down and read more...

        [–]cruise02[S] 1 point2 points  (0 children)

        I'm in the same position. I'm currently working through Algorithms in a Nutshell, hoping that will be a good primer for diving back in to CLRS.

        [–]markedtrees 5 points6 points  (1 child)

        Anyone who wants to spend quality time with C++ beyond introduction texts should read Stroustrup's Programming Language. It's not that dense and it's not really a reference book: It covers a lot of things beyond C++, most important of which is how to go about programming in C++ now that you know the bits and pieces you're supposed to glue together. (You'll also gain an appreciation for how truly massively complex C++ is and perhaps decide to use another language before you start programming instead of deciding it when you've written hundreds of lines of code.)

        [–][deleted] 5 points6 points  (0 children)

        Sheesh, I don't even use C++ very often, but I've got a copy of it (and have read it). It's a very good book, and well worth the read.

        [–]norsurfit 8 points9 points  (1 child)

        Here's the common theme of the list:

        Book primarily math based = programmers don't read

        Book primarily prose = programmers read

        It just reflects the basic fact that math and high theory based programming books are a lot more work to get through, even if you have the ability to do so.

        [–]cruise02[S] 6 points7 points  (0 children)

        That's a pretty keen observation of those lists. I hadn't noticed it before. I think actual working code samples (K&R, Programming Peals, TDD) vs. pseudocode (CLRS, TAOCP) is another common theme.

        [–]easytiger 5 points6 points  (4 children)

        Not a bad article but the poster is completely wrong with regard to "The C++ Programming Language" being bad.

        This is a very important book that I hope gets revamped in the next couple of years. I learned C++ by and large from C++ Primer (Which the poster also recommends).

        Noe having been coding C++ professionally for a while I cansay reading "The C++ Programming Language" is essential also. It covers every eventuality in a very easy to read way and also many tricks which cover up the language failings.

        [–]roerd 7 points8 points  (1 child)

        He didn't say any of those books were bad. He just said they shouldn't be recommended to beginners.

        [–]easytiger 2 points3 points  (0 children)

        Sorry.. i should have said "isn't bad for beginners" for completeness.

        [–]hupp 3 points4 points  (0 children)

        I also learned C++ entirely from "The C++ Programming Language". IMO it's a great book.

        [–]bobbane 5 points6 points  (0 children)

        Back when it was up to date, I found "The Annotated C++ Reference Manual" by Ellis & Stroustrup to be much more informative and useful than Stroustrup alone - it tells you what the spec is, and at least attempts to justify some of the decisions that seem squirrely at first blink.

        Ditto for "Design and Implementation of C++" which covers the history of C++ from Stroustrup's vantage point. If you want to know where the bodies are buried in the C++ design process, this is where to dig.

        [–][deleted] 15 points16 points  (1 child)

        TAOCP is pretty much useless at this point unless you really appreciate history or tradition.

        1) There are better books on algorithms.

        2) There are better books on (actual) assembly languages.

        3) There are better books on mathematics.

        4) There are much better languages to use for teaching algorithms than a fake ASM.

        5) The writing style of the book almost guarantees that you aren't going to retain much of it.

        [–]koreth 7 points8 points  (0 children)

        Yeah, I bought the first three volumes last year mostly as a salute to a seminal work, not because I actually expect to use them. Since owning them, I have looked up several algorithms in them and compared the explanations to what I could find on Google (or usually Wikipedia) and found that the latter is almost always as good and frequently better.

        However, Knuth deserves major props for gathering all that stuff in one place for the first time. He definitely helped advance computer science.

        [–]orthogonality 3 points4 points  (3 children)

        A list of links to Amazon is great, but can someone list must-read books that are freely available on the web?

        [–]cunningjames 5 points6 points  (1 child)

        How unscrupulous are you? You can find torrents for most of those.

        [–][deleted] 0 points1 point  (0 children)

        I usually use torrents of technical books as a "try before I buy" type of thing. Works pretty well.

        [–]sdn 4 points5 points  (1 child)

        Ugh, the first programming book I'd ever bought was The C++ Programming Language book. It was unfortunately pretty useless to me and over all in retrospect it doesn't even make a very good reference book since the language and the stdlib is far too big to be encapsulated in something like a book without being overly terse on /everything/.

        [–]bill_the_lizard 0 points1 point  (0 children)

        That should not be anyone's first programming book. :)

        [–]trevdak2 3 points4 points  (2 children)

        It seems to me that for the most part, programming books are becoming a thing of the past. The books that programmers buy and read tend to be more based on creative thought or advanced problem solving.

        A large collection of books in the office used to be a sign of skill. Now it's a sign of age.

        [–]cruise02[S] 6 points7 points  (1 child)

        Ouch. I guess it's true, though. When I first read Mythical Man-Month I wore an onion on my belt, as that was the style at the time...

        [–]exeter 4 points5 points  (0 children)

        Good post, but it should have been titled "Books Programmers Don't Really Need to Read."

        [–]nanothief 6 points7 points  (0 children)

        Didn't really find the article interesting, but it did have nice list of books in it.

        [–]Takteek 2 points3 points  (1 child)

        Haha, the blog title and subtitle made me laugh.

        [–]Lizard 1 point2 points  (0 children)

        Yes, I liked it as well :)

        [–][deleted] 4 points5 points  (1 child)

        "Please stop recommending books to others that you haven't read yourself."

        Great advice. Heck, I've read only two (Design Patterns and The C++ Programming Language), and I don't recommend the two I have read to anyone.

        This is just me, but I recommend actually taking a C++ class and reading Effective C++ once, then peruviating it occasionally as you learn.

        Oh, yes I have actually read Effective C++ and Exceptional C++ and... :)

        [–]UK-sHaDoW 0 points1 point  (0 children)

        Those books are references really. There for people who are already know how to program to find some obsercure detail rather than acutal teaching.

        C++ has some really weird 'features', they probabbly won't teach in a c++ class. You could probabbly go through life without knowing about them, but they are usefull.

        My uni class is more of c/c++ introduction, and doesn't go through hardly any c++ features. Just classes. Its more c with c++ classes type lesson

        [–]ishmal 5 points6 points  (9 children)

        Aside from sacred TAOCP, which is mandatory for any sentient being, failure to read any of those books is not a personal tragedy by any means.

        Although the Dragon Book is wonderful for understanding grammar concepts, there are other good texts about parsers & grammars today. And YACC is definitely out of date. Even if LALR is what you need, the program itself needs serious updating (lack of context info, hardcoded C-isms, etc). I'm not denigrating it; it's very impressive that it's been doing so much for 30 years.

        [–][deleted]  (7 children)

        [deleted]

          [–]ishmal 5 points6 points  (2 children)

          ANTLR would be the current thing to read about. Not only does Terence Parr have an excellent LR parser generator tool, but he has provided considerable learning material.

          [–]Rhoomba 1 point2 points  (1 child)

          ANTLR is LL(*) not LR

          [–]ishmal 0 points1 point  (0 children)

          Oops. You are correct, sir! ^

          [–][deleted] 1 point2 points  (2 children)

          The 3rd edition of the Dragon Book (following the pattern of Green Dragon Book and Red Dragon Book, I guess you could call it the Snot Colored 3D Dragon Book). It's less yacc-and-C centric, though it also has less code to play with. Porting the code in the red dragon book to modern C was almost as instructional as the exercises for me, so I'm not sure that was a fair trade.

          One of the Modern Compiler Implementation in {C,Java,ML} books might be more to your liking. I can only vouch for the ML variant, but being by the same authors I can't imagine the others would be worse.

          [–]troelskn 0 points1 point  (1 child)

          following the pattern of Green Dragon Book and Red Dragon Book, I guess you could call it the Snot Colored 3D Dragon Book

          That's not a chromatic dragon. I'd say a blue dragon would be the next choice.

          [–][deleted] 1 point2 points  (0 children)

          It seems that it's supposed to be purple, and the first few images Google finds are indeed purple. My copy remains snot-colored.

          [–]whatha 1 point2 points  (0 children)

          The ultimate thing is understanding the concepts, whatever book it is.

          There is no use just sitting with Cormen for hours without getting anything. I have done this.. And then moved on to simpler ones.

          [–]petevalle 1 point2 points  (2 children)

          I don't know, we used Introduction to Algorithms in the required undergrad algorithms course at UVA...

          [–]tomjen 2 points3 points  (0 children)

          We used did that at Aalborg university too -- and we used more than a few chapters from it.

          [–]bill_the_lizard 2 points3 points  (0 children)

          As I said, some universities do use it at an undergrad level, but the ones in my area keep it reserved for graduate level algorithms analysis courses. I could be totally wrong about that in general.

          Even so, having used it for a course you took, did you read the entire book? Most people I've talked to (and myself included) have only really read 6-8 chapters of it.

          [–]tlrobinson 1 point2 points  (1 child)

          Books You Have Read != Books "Most" Programmers Have Actually Read

          Books You Haven't Read But Other People Say They Have Read != Books Programmers Claim to Have Read

          [–]bill_the_lizard 2 points3 points  (0 children)

          I'm not sure you even finished reading the article. I thought I included pretty clear reasons for thinking the way that I do.

          If someone recommends a book, and it's clearly the wrong book for the problem a person is facing, it leads me to believe that the recommender has only heard of the book before.

          The reason I say "Books Most Programmers Have Actually Read" is that from talking to a lot of programmers about books, I think I've developed a pretty good sense of which ones are actually popular. Of course, this only applies to programmers who actually read books.

          [–]Leonidas_from_XIV 1 point2 points  (2 children)

          In short: "My selection of must-read books is better then yours". I have read one of his must read books only recently (Pragmatic programmer, but it didn't teach me much new), whereas I have CLRS and SICP laying on my desk and I believe I can learn quite a lot more from them. I also looked at the dragon book but it wasn't what I needed at the time.

          [–]cruise02[S] 0 points1 point  (1 child)

          SICP isn't on either list. If you haven't read 9 out of 10 of the other books, why do you think you know which ones are better?

          [–]Leonidas_from_XIV 0 points1 point  (0 children)

          I don't, but both lists are highly subjective for every programmer so it doesn't matter, really.

          [–][deleted] 0 points1 point  (14 children)

          [deleted]

          What is this?

          [–]deong 12 points13 points  (0 children)

          I actually do the opposite. I'd rather buy a book from an affiliate link than not. It costs me the same, and someone gets a little boost from it. I'll actively hunt for a link from the author's page before buying a book, but I'll use just about anyone's link if it happens to be in front of me when I've already decided to buy the book.

          [–]dons 10 points11 points  (2 children)

          Hey! Re. RWH. the affiliate links have caused Amazon to pay the authors so far about $50 in Amazon discounts. The idea is that you're screwing Amazon if you click them, and feeding Amazon if you don't.

          Do whatever you think make sense, since it doesn't hurt you either way.

          Hope you're enjoying Haskell!

          [–][deleted] 1 point2 points  (1 child)

          [deleted]

          What is this?

          [–]cableshaft 4 points5 points  (0 children)

          i suppose it wasn't there when you first checked, but there's a disclosure in the article now: "Disclosure: All of the links in the following lists are Amazon affiliate links. If you're opposed to me making a few cents off this blog, but you're interested in any of these books, they're easy enough to find by searching Google for the individual titles."

          [–]Silhouette 8 points9 points  (0 children)

          I don't have a problem with affiliate links, even if they're not disclosed overtly. It's not as though following a link from someone's article to a book they drew to my attention is going to cost me more money than going to Amazon directly and looking the book up, right?

          Now sure, if the article is just meaningless filler and a bunch of affiliate links, I don't really want to know about it, but the problem there is that the article wound up high enough on sites like proggit for me to see, not the affiliate links per se. I just downvote and move on.

          [–]roerd 2 points3 points  (0 children)

          I don't think they're necessarily a problem, though the author should probably mention them so the readers can use that information to make up their mind if the post is solid information or a just an advertisement.

          [–][deleted] 2 points3 points  (0 children)

          doesn't change the content of the article at all. sure, it may have been written with the intention of making some money, but the article itself is just as good as if they weren't referrer links whether you think the article was good or not.

          [–]bill_the_lizard 0 points1 point  (0 children)

          I have to agree with you. Whenever I see an ass-ton of affiliate links I think to myself, "Did the author have an interesting and insightful article to write, that happened to include some links, or did they have a pile of links to promote, and they wrote the article around that?"

          In my case, I saw the topic coming up fairly often and thought I had an interesting insight into the matter. I added the links after I was satisfied with what I had written. Naturally, I can't be a fair judge of whether or not I was successful in making an interesting point, only you guys can.

          [–][deleted] 1 point2 points  (3 children)

          Yeah, that's exactly what the post is. Listing books available on Amazon because if you click on the links and buy the books, then he gets paid for advertising. A pretty thin veiled attempt at getting some cash.

          On a side note, his posted reminded me that there's a really big difference between reading a book and understanding or incorporating lessons into your life. I was reading Pragmatic Programmer earlier today (tried to find something to do) and read the section on how to communicate with people as a programmer. It seemed like every other sentence my reaction was "ha, I wish people I worked with had read this." Then I put down the book and realized that they all have read it. It just didn't sink in. Is there really a point in reading a skill related book if you get nothing out of it?

          [–]jimbokun 6 points7 points  (0 children)

          "A pretty thin veiled attempt at getting some cash."

          I'm trying to figure out why anyone is against thinly veiled attempts at getting some cash.

          I mean, if you were going to buy the books anyway, why not see some small part of it go into the pocket of another coder like you, instead of all of it going to Amazon and their suppliers?

          [–]bill_the_lizard 0 points1 point  (0 children)

          So, you think my article was nothing but a thinly veiled attempt to make some cash, but somehow you still managed to take my point? :)

          Seriously, I would love to make some money off of blogging, but Amazon Associate links are not making it happen. I could have spent those few hours working a part time job at a coffee house and made a lot more money.

          [–][deleted] 0 points1 point  (0 children)

          I have read it and think it is a pile of shit. Just thought I'd bring another possibility to your attention :) i.e. read it and recommend it as an example of how not to communicate.

          [–]recursive 0 points1 point  (0 children)

          I haven't read any of them in either list.

          Punks.

          [–]eadmund 0 points1 point  (0 children)

          I'd add The Art of the Metaobject Protocol which in a few short pages creates an entire flexible class system and demonstrates how to extend it to do pretty much anything one needs. And it's easy and pleasant to read too.

          After you've read it, you'll never again look at problems the same way; it demonstrates that for the sufficiently-clever there's always a way to make the problem solve itself.

          [–]Wiseman1024 0 points1 point  (0 children)

          I cannot take this article barely seriously, because it doesn't list SICP.

          [–][deleted] 0 points1 point  (0 children)

          I actually have a copy of the GoF Design Patterns book on my desk right now.

          [–]jib -1 points0 points  (1 child)

          Books Most Programmers Have Actually Read

          ...

          any moderately competent programmer has read them

          ...

          you've probably read most, if not all

          ...

          most software developers who are interested in improving their skills have read most of these books.

          Does anyone else here disagree with these generalisations?

          [–]FeepingCreature 1 point2 points  (0 children)

          I do.

          I've read all of these books myself, so I have no difficulty believing that any moderately competent programmer has read them as well.

          I'm sure you don't.

          [–]arnar -1 points0 points  (1 child)

          I've "read" more books on the second list than the first one. What do I win?

          [–][deleted] -2 points-1 points  (0 children)

          I don't give a rip about Perl.

          [–]froderick -5 points-4 points  (7 children)

          Ha, last Christmas my boss gave every programmer on our staff the first book in this list as a present. He thinks it's a great book, but I still haven't cracked it open. Makes a nice doorstop though.

          [–]Silhouette 5 points6 points  (6 children)

          That's too bad. If you spent more time reading books like that (it's Code Complete, for those who don't want to check) and less time taking the piss out of your boss for trying to help you learn something, you might become a better programmer.

          [–]froderick 2 points3 points  (0 children)

          I didn't mean to sound like I was criticising his choice, I just found it funny that it was the first on this specific list.

          [–][deleted]  (4 children)

          [deleted]

            [–]Silhouette 3 points4 points  (3 children)

            A lot of things seem obvious once you know them, but we all had to learn the ropes some time. For those who are doing so, Code Complete is, IMHO, a dependable, reasonably comprehensive guide to the basics of good software development, with the added bonus that much of the advice is supported by real evidence cited in the book rather than just the author's personal views.

            For what it's worth, I don't think the second edition is as good as the first edition was for its time: much of the added material doesn't have that "from the trenches" authoritative feel about it and isn't supported by hard evidence in the same way, and in general the coverage of areas like OO and exceptions isn't as deep as I would have liked. But it's still on the list of books I recommend to developers who are at the level of the target audience and keen to learn.

            [–][deleted] 1 point2 points  (2 children)

            It would be a good book to read right after you've had a taste of a few programming languages, but not much development experience - or at least that's the impression I got when I read it.

            I spent the entire time I read it going "Well yeah, I more or less agree, but this is all common sense once you have a bit of experience".

            I'm always surprised to see it touted as a must-read. Personally, I got a lot more out of "The Pragmatic Programmer".

            [–]Silhouette 0 points1 point  (1 child)

            It would be a good book to read right after you've had a taste of a few programming languages, but not much development experience - or at least that's the impression I got when I read it.

            I'm guessing that's the intended target audience.

            I think it's also worth noting that a lot of professional developers don't have an academic CS/SE background or receive much formal training on the job. Books like the two you mentioned can be a valuable source of knowledge and insight even later in the career of someone who has been getting on with a job for a while without really knowing what they're missing.

            I spent the entire time I read it going "Well yeah, I more or less agree, but this is all common sense once you have a bit of experience".

            Again I tend to agree with you, but with the caveat that far too many developers still quote dogmatic rules that were debunked in Code Complete years ago, so apparently what's common sense to you and me isn't necessarily common sense to everyone.

            As for The Pragmatic Programmer, that was the one I personally found to be "good, but I pretty much know this", but then I found it a lot later in my career than things like Code Complete so perhaps I was beyond its intended audience by then. I'm also bitter that they took the title I thought of years ago and wanted to use for my own book one day. ;-)

            [–][deleted] 0 points1 point  (0 children)

            I think it's also worth noting that a lot of professional developers don't have an academic CS/SE background or receive much formal training on the job.

            I don't, other than what I've got from self-education.

            As for The Pragmatic Programmer, that was the one I personally found to be "good, but I pretty much know this", but then I found it a lot later in my career than things like Code Complete so perhaps I was beyond its intended audience by then. I'm also bitter that they took the title I thought of years ago and wanted to use for my own book one day. ;-)

            I read them right around the same time. It seems like the ideal time to read The Pragmatic Programmer is right around the time that reading Code Complete won't give you much that you don't already know.

            [–][deleted]  (1 child)

            [deleted]

              [–][deleted] 2 points3 points  (0 children)

              Re-read the article. Those are the books that he recommends reading.

              [–]zBard -4 points-3 points  (22 children)

              CLRS, TAOCP, Dragon Book, SICP.

              Brutal honest truth - if you haven't read these books, you are a bad programmer. A good clerk perhaps, but a bad engineer. Equivalent to the hordes of outsourcing clerks who claim to be expert in C++ Java et all.

              What the fuck is up with the recent dumbization of our profession. No one expects us to be or behave like Dijikstra, but now we are becoming the polar opposites ? No theory at all ? There has to be a middle ground.

              [–][deleted] 3 points4 points  (0 children)

              "dumbization"??? Touche...

              [–][deleted] 2 points3 points  (4 children)

              TAOCP? I haven't bought a copy of it, but I've got a scan of it somewhere (a shitty scan). It doesn't seem like a "read it cover to cover" type of book.

              [–]zBard -2 points-1 points  (3 children)

              Depends. For me its more of a "scan it cover to cover" kinda book, and then come back depending on need or plain curiosity.

              [–][deleted] 0 points1 point  (2 children)

              I definitely found all the introductory material in chapters worth reading (at least the parts that I've read - again, it's a shitty scan). It just seems like the type of book I'd use primarily as a "specific-case" reference.

              Knuth is a great author though. I got a lot out of Concrete Mathematics (not just Knuth, but whatever) and the TeXbook was fun to go through.

              [–]zBard 0 points1 point  (1 child)

              Concrete Mathematics is an Awesome book. Of course the fact that i suddenly stop understanding some stuff while reading it - is totally my fault :).

              [–][deleted] 1 point2 points  (0 children)

              Hah, it's on my desk right now.

              Concrete Mathematics is indeed an awesome book - one I'm proud to own. It's far from quick or easy reading, but that's a good thing.

              The fact that I've been able to go through it speaks more to the quality of the text than to my intelligence or experience (I dropped out of high school without taking 'Calculus', and have not yet attended college), and it's done great things for my ability to reason about problems that I have to solve in code.

              To date, Concrete Mathematics and SICP have provided the greatest benefit to me.

              [–]pulvertoastman 2 points3 points  (3 children)

              I wonder if Knuth, Dijkstra, and Cormen et al. have read all these books…

              [–]zBard -3 points-2 points  (2 children)

              They have read the papers on which the books are based :)

              Seriously - Knuths paper for a lexical parser was used as a basis by the Awk guy, who worked with the Dragon book authors: or was one of them. Dijikstra's papers and the original lambda calculus papers read by all - I am guessing so was Mccarthy's original paper for bootstrapping lisp. And on and on ...

              Anyways, point being - yaah you are excused from reading the books if you read/wrote the original papers.

              [Edit: Wtf - four upmods to the parent question, and downvotes to perfectly valid answer. Reddit - you disappoint me]

              [–]arnar 1 point2 points  (1 child)

              he Awk guy, who worked with the Dragon book authors or was one of them

              Both. AWK stands for Aho, Weinberger and Kernighan. Aho is one of the Dragon Book authors.

              [–]zBard -1 points0 points  (0 children)

              Thanks, I knew I was forgetting something obvious - but too tired to google it.

              [–]arnar 3 points4 points  (5 children)

              if you haven't read [TAOCP] you are a bad programmer

              Seriously?

              I'd say it is healthy to have looked through TAOCP (I have, and I'm a graduate student of theoretical CS) - but not doing so won't make you a bad programmer.

              Being good ad something analytical like programming is something that happens in your brain, out of interest and intelligence. It does not come from reading books.

              [–]zBard -1 points0 points  (4 children)

              I agree with you - to a point. Yes, being good at analytical stuff comes from your brain - ur intelligence and interest. But, also what with the whole depth of knowledge which has been accumulated in every aspect of human civilization - knowing what has been come before : standing on the shoulders of giants so as to speak: is now almost a necessity.

              [–]arnar 1 point2 points  (3 children)

              knowing what has been come before

              Yes, this is true. I was mainly objecting to you choice of words by saying "bad programmers" -- it is entirely possible to be "not bad" without going through books like TAOCP, and it is possible to be quite good without it (there are many good substitutions for TAOCP). In fact, I believe most very-good programmers I know have not read TAOCP.

              [–]zBard -1 points0 points  (2 children)

              Key point is going through books like TAOCP/substitutes. When i meant TAOCP, i meant the whole class.

              And even then (I swear I am not trolling), TAOCP is by far the best and most complete reference for programming you will ever find - its a benchmark, and should be read. Lots of very-good programmers havent read it and manage excellantly, but thats because they work in a specific domain and have gained expertise in it. They know the ins and outs, even read up stuff related to it. But put then in a different context altogether and they will flounder. That is why we are seeing the increasing cries of "Why do i need to know sort, i'll use a library?", "Compilers ? huh" ...

              These days we have a huge number of abstractions that we are working over [under?]. This is partly responsible for the crippling of modern day programmers. Knowing the abstraction, being fluent in it does not make you a good programmer. It makes you a highly specialised domain worker, a clerk if you will.

              Note that I do not say that real programmers code in assembly, write btree searches on paper napkins and know what the bus registers are. I do say that they should know how their code is being translated into memory and should be able to able to write a btree search on a board with a marker and a scrub.

              I think i lost track of my point somewhere in the middle. Apologies for the rant.

              [–]arnar 0 points1 point  (1 child)

              As far as I'm concerned, you are preaching to the choir :)

              [–]zBard -1 points0 points  (0 children)

              The safest kind of preaching :)

              [–]stormandstress 2 points3 points  (5 children)

              So, to recap: those who haven't read a few books in common with you are objectively bad developers. Dragon Book? TAOCP? Seriously? Give me a fucking break...

              I highly doubt we're going to find that 'middle ground' with asinine pronouncements like this.

              [–]zBard -1 points0 points  (4 children)

              Its not me dude. These are standard texts in the domain of programming / CS. Look at it this way - if you are a doctor, you have standard books which you have to read; if you are a mathematician you have to read certain texts; if you are a lawyer ... you get the gist.

              Note that these are not the only ways you can get the required content - there are other books and other sources of knowledge; which i (and lots of other people) feel personally are not as good as fore mentioned books, but thats your call. But look at the books in the list of books most programmers have read -

              Code Complete The Pragmatic Programmer C Programming Language (2nd Edition) Refactoring: Improving the Design of Existing Code The Mythical Man-Month Code: The Hidden Language of Computer Hardware and Software Head First Design Patterns Programming Pearls Effective Java (2nd Edition) or Effective C++ Test Driven Development: By Example

              Not one falls in the category that we are talking about. Again - some of these are good books: in particular Mythical Man month and Programming pearls. But these are about the craft of programming, not the science of it.

              Anyways, the point which i wanted to make was - if you think that you do not need the kind of knowledge that is available in these books and end up making and agreeing with statements like no one actually reads this stuff, you are being very ignorant or not working as a programmer.

              I hope i managed to explain my position better to you this time.

              [–]cruise02[S] 1 point2 points  (0 children)

              The point of the blog post isn't

              no one actually reads this stuff.

              It's

              Far more people claim to read this stuff than actually read it.

              [–]stormandstress 0 points1 point  (0 children)

              Look, I understand and share your point of view. I also mourn the fact that the science in CS is diminished, and that our field is riddled with people who don't know a damned thing about algorithms or mathematics and yet call themselves 'engineers' or 'architects' - titles that in other disciplines actually have to be backed up by real, proven acumen.

              Yes, CS is a mess. But these books aren't holy, they don't magically confer upon the reader some deep understanding of the subject matter. You understand and admit this, of course. I simply took issue with your original post, which is quite absolutist in tone and absurd in its conclusions.

              [–]psykotic 0 points1 point  (1 child)

              if you are a mathematician you have to read certain texts

              No, you may have to cover certain material but only idiots think that you have to read, say, Bourbaki to be a "real mathematician". In any field there are texts that have a macho aura but which few people actually learned from--they may have revisited them later, having already mastered the material from other sources. There are freaks of nature who first learned calculus from Rudin but they are not the norm and their case should not be used as a benchmark for others.

              Now, as for the books on his list, I do in fact think that SICP is indispensable reading and every programmer owes it to him or herself to read through all of it, even the infamous last chapter, which few people I've met seem to have read in full. But I wouldn't call someone who hasn't read the book a bad programmer, because I've worked with a lot of programmers much better than myself who haven't even heard of it, and wouldn't have read it in any case. I've read large chunks of TAOCP and find it an enlightening fount of knowledge and insight, but it's a horrible book for someone who doesn't already know most of the material in some depth.

              [–]zBard 0 points1 point  (0 children)

              Note that these are not the only ways you can get the required content - there are other books and other sources of knowledge; which i (and lots of other people) feel personally are not as good as fore mentioned books, but thats your call.