Slashdot Mirror


Best Computer Books For The Smart

You'll remember last week, I asked for recommendations of the Best Websites for developers. This was a -great- thread and in the story, I mentioned that I was planning on doing the same regarding books this week. So here it is. What do you, the slashdot reader consider seminal works? What would you consider great introductions to technical topics? If you are interested, check it out... As part of this I'm looking for books on C, C++, Perl, Python, PHP , System Administration, anything...you name. As before I have opinions on great books, but I want to see what you think. Also, what do people think is a great introductory book for people new to linux.

16 of 514 comments (clear)

  1. Bertrand Meyer: OOSC2 by Anonymous Coward · · Score: 1, Insightful
    Object-Oriented Software Construction, 2ed. by Bertrand Meyer, ISBN 0-13-629155-4

    This is the tome on what object oriented design is all about.

  2. Get theory books. by WanderingGhost · · Score: 4, Insightful
    Personally, I value:
    • Theoretical background -- experience in a CS course, good books that give you a theoretical base are nice. Why? Because later, to translate the theory into real work, you'll just need a reference, and things will work easier!
    • Reference books -- to learn how to implement your ideas in specific settings (OS, language, etc).
    I never found the first with books for specific compilers, IDEs, versions of things, etc, or any of those "big" books that promise you a lot.

    Interesting choices are books written "by the language author" (think Stroustrup, Larry Wall, etc), or books by people with a good background in CS (a CS professor, for example).

    Also, books on theory are interesting. A book on Compilers may change the way you think. (The old "Dragon" book is nice, and Andrew Appel's book is also interesting). One book on Analysis of Algorithm like the one by Cormen, Leiserson, Rivest and (forgot the third author) is quite good, but you need a decent math background.

    And for a reference, I think the more compact the better (I use Java in a Nutshell). References shouldn't be more verbose than the necessary. :-)

    (Just my $0.02)
  3. ! Extreme Programming Explained by ergo98 · · Score: 2, Insightful

    This is a tremendous waste of money at $45 CDN ($29.95 US). Firstly, it's lacking gross content at a measly 165 pages of large print pages (for $45 that is already criminal). More importantly, however, the content that is there could easily have been condensed to a two page article (I say this with complete sincerity): The author clearly strung along simple statements for long periods of time to convey the idea of foundation for some pretty dubious assertions.

    While I've always found XP to be pretty sketchy to begin with (indeed this book further convinced me of that: This book actually claims that each of its revolutionary new ideas can't be measured alone, but rather have to be all performed in parallel, whereby they'll have an amazing cross-product effect and you'll get multiples of the effects of each piece individually. I couldn't help but thinking of snake oil salesmen: "You didn't have the best luvin' ever? Well you muster forgot to take it while facin' to the East!"

    The only way I could even imagine recommending this book is if the same copy is going to be shared among a very large team, but otherwise save you're money. It's shameful to think that this book that literally could have been hashed together on the weekend is seling for the same price that a game that a team worked on for a couple of years.

  4. Code Complete! by sphix42 · · Score: 4, Insightful

    Code Complete and Rapid Development are the kinds of books I find most useful. I don't like any books that are specific to a language. These two are fantastic resources for learning how to program better, not how to write in a particular language.

  5. Re:some recommendations by domc · · Score: 3, Insightful

    I think that you are right about the Java part, but dead-wrong about the Perl part. The O'reilly Perl library is an invaluable resource for education in the more difficult (and not-so-difficult) areas of Perl.

    domc

  6. Re:easy by muffel · · Score: 4, Insightful

    union select * from books where author = 'R. Stevens';

    --

    bla
  7. Re:Nothing specific, but ... by The+World+Will+End · · Score: 2, Insightful

    I think it's the examples they use. They don't pick some abstract boring problem to demonstrate the concept, they show the code in an app that is similar to something in the real world, so you can see how it looks in practice, rather than just showing the general case in mathematical terms. Sometimes it is easier to learn a specific case before you learn the general case, since the more abstract general case is harder to grasp without some idea of how one would use it in practice.

    --
    Man, with his flaming pyre, has conquered the wayward breezes.
  8. Structure and Interpretation of Computer Programs by Chuan-kai+Lin · · Score: 5, Insightful

    This is the introductory computer programming textbook used at MIT, and had been featured on slashdot here. However it is very different from what you would expect from such kind of books, with Scheme as the implementation language, it really does not teach readers how to code in a specific programming language, but how to program computers in a large variety of paradigms, what are the trade-offs in program design, how to manage complexity, and how the basics of computing works, by stretching the flexibility of the Lisp family of languages to the maximum. I first read it four years ago as a freshman, and it was a real eye opener. And it never ceased to amaze me through all these years, as I continue to discover new insights in the passages.

    You can almost find a full undergrad CS program concentrated in this book, with topics including language design and computing paradigms (object-oriented, functional, imperative, non-deterministic and logic programming, as well as lazy evaluation), operating systems (issues of concurrency), architecture (the design of a register machine), and compiler construction (the reader is asked to build a Scheme compiler in the end). Instead of being filled with buzzwords, here you are shown how the basics of everything works, in ways that you can really understand. Working through this book will teach you concepts that many people with a CS degree had never heard of.

    Hell, if I could only save one CS book when the world comes to an end, this would be the one. And the best part is: you can get the full-text online here at MIT Press. Definitely a must read.

  9. Re:A brief list by deltavivis · · Score: 2, Insightful

    Bruce Eckel's "Thinking in Java" can be added as a java book.

  10. books on patterns by Dr.+Awktagon · · Score: 3, Insightful

    You absolutely need the book on Design Patterns by Gamma et al.

    Also you should check out the Antipatterns book by Brown et al. A book on "common pitfalls" and more importantly, possible resolutions.

    But, if you want to deviate a bit from the technical books, and if you want to expand your understanding of design and design patterns in software, and the philosophy behind it, you might be interested in Christopher Alexander's books and writings. His books are quite old, published in the 70s.

    He's an architect (of actual buildings), but his ideas apply to anything that is designed. He developed the concept of "design patterns" and the computer science world has been applying his ideas. Here is a little article about him. It's because of him that we have the following definition of pattern: a solution (set of forms or rules), which solves a problem (resolves a set of forces), in a given context (a recurring sitution). A very general idea.

    Basically he was trying to come up what he calls a "Pattern Language", a high-level way to describe design patterns in urban architecture, so that people could basically design their own homes and buildings. But the end result was something more profound and philosophical. Very interesting stuff but rather touchy-feely at times. For instance when he talks about the QWAN (quality without a name, the mystical sort of "beauty" that a good design has).

    He also has (or he's still working on, I'm not sure) a recent multi-volume work called "The Nature of Order". I want to read it and I bet it's a much more interesting and insightful book than Wolfram's recent giant tome about a "new kind of science", and without the hype.

    Disclaimer: I'm just getting into this type of stuff so I'm not 100% aware of all the history, etc., but Alexander's the name I see everywhere.

  11. Re:My only source by Anonymous Coward · · Score: 1, Insightful

    If you want money for free, you can just print some up on a color copier. It isn't immoral, because you haven't deprived anyone else of their money.

    This isn't a very good argument against copying.

    Money doesn't have any intrinsic value. You don't get a piece of money because you like the picture or something. No one would exchange labor or goods to get a piece of money unless we all agreed to keep the supply limited. Money is just a convenient substitute for barter exchanges. When you copy money you're reducing the value of all money, including your own, in the long run.

    Books, art, music, etc., don't have this requirement, they can be priced from zero to infinity.

  12. Second that by voodoo1man · · Score: 2, Insightful

    If there is any book that fits this topic, it is SICP. What makes this book different from any other intro CS book I have read is that it focuses on the science of computation, not just on "programming." Solid knowledge of higher math and some logic are prerequesites for reading, but this is the best possible book for anyone who wants to skip the syntactical crud of usual CS courses and jump right into the theory and mechanics of computer programming.

    While this may not be the best route for computer engineers, shame on anyone who thinks that this book isn't an important read for anyone studying towards a computer science degree. This book lays out all the necessary concepts for learning any further languages or programming methods.

    Some people don't like this book because it uses Scheme. They're mostly wrong - the book uses Scheme as a pseudocode, and touches only a fraction of the R5 Scheme standard. The benefits of this are apparent right from the first chapter - the book weans you from thinking of loops in terms of rigid and clumsy constructs, instead demonstrating that tail-recursion can completely replace them. And I really pity the people who think static types would enhance either Lisp or the readability of this book, as Hemos seems to be convinced about in his review. PS, R5 Scheme does have looping constructs; do some research before complaining.

    In short, if you like math for math's sake and want to learn computer science, read this book.

    --

    In the great CONS chain of life, you can either be the CAR or be in the CDR.

  13. Another Short List by StormyMonday · · Score: 3, Insightful

    "The Mythical Man-Month", Brooks. Won't really help much, but you'll have the satisfaction of knowing exactly how your pointy haired managers are screwing things up.

    "Design Patterns", Gamma, et al. Without this, you simply won't be able to understand current discussions about programs or programming. This book gives you the philosophy and vocabulary to understand what's going on.

    "The Art of Computer Programming", Knuth. What can I say? An absolutely mindboggling treasure trove.

    "Software Tools", Kernighan & Plauger. A Golden Oldie. The book is ancient, but the "software tool" concept is still solid.

    "The Design of the Unix Operating System", Bach, and "The Design and Implememtation of the 4.4 BSD Operating System", McKusick et al. (These are old. I would hope there is something equivalent for Linux and current BSDs). While abstraction is all well and good, at some point you have to open up the black box and figure out what the machine is actually doing in there.

    You need the definitive description of the language you're working with. For C, it's "The C Programming Language", Kernighan & Richie. For C++ it's "The C++ Programming Language", Stroustrup, or, if you're a standards junkie like me, INCITS/ISO/IEC 14882-1998, "ANSI Standard C++".

    If you're doing anything connected with the Internet, learn about RFCs. Personally, I credit a large part of the success of the Internet to the free availability of its governing standards. (Other standards are freely available, but not available for free. A paper copy of ISO 14882, for example, is US$175.)

    There are all sorts of "domain specific" books. What you need depends on what you're doing. I find "Advanced CORBA Programming with C++", henning & Vinoski, to be priceless, but then, I do CORBA programming in C++.

    --
    Welcome to the Turing Tarpit, where everything is possible but nothing interesting is easy.
  14. Re:some recommendations by Anonymous Coward · · Score: 1, Insightful


    Your comment regarding Perl, 'just find some script that does what you want' is just BS. People can write shitty programs in perl, but they can also write elegant and concise applications, provided they know a few simple constructs (like modules). For this I would recommend Advanced Perl Programming.

  15. Re:some recommendations by crucini · · Score: 3, Insightful
    For Perl, I wouldn't bother with any kind of reference. Just find scripts that roughly do what you want and hack them; it's blind groping around, but that's the way Perl works. If you can't get it to work that way, you probably should be writing in something else other than Perl.
    That technique works when first getting your feet wet with Perl or when writing throwaway scripts. If you copy and hack up high quality code, you'll learn good habits. Randal Schwartz and Tom Christiansen are good. Code worth copying has 'use strict;' and usually has warnings enabled (-w). And if your interest in Perl ends with quick, hacked-up scripts, nobody will complain. But just because you learned to play "Happy Birthday" on the piano, don't assume you've exhausted the capabilities of the instrument.
    If you want to advance further, I recommend reading comp.lang.perl.misc for a few months. You'll go from being happy that there's a way to accomplish X through awareness of the many ways to accomplish X to a feel for the best way to accomplish X in a given situation. When I was going through this phase, a single post on clpm could send me on an all-night hacking, reading and learning session.
    The only Perl book I can wholeheartedly recommend is Damian Conway's Object Oriented Perl, which I love despite my lack of OO religion.
    Most people coming to computers and computer programming wrongly think that objects are either the best, or even the only, way to build abstractions.
    Yes. There is a tendency for OO advocates to rewrite history and essentially claim that code was a disorganized mess before the advent of OO, or alternately taht all previous coding paradigms were simply OO by another name. In fact, most useful code in the real world is procedural C, using functions and data structures as the key abstractions.
    Perl is agnostic about OO - the facilities are unobtrusively present. But it's easy to write C-style procedural code in Perl. And the grep, map, and sort functions support functional programming.
  16. Re:Books: by Alex+Belits · · Score: 3, Insightful

    You have got to be f#&king kidding me! That Stroustrup book is the worst programing book I own.

    It's not the book, it's the author -- that book and C++ design show that Stroustrup has pretty poor understanding of the design and philosophy of C. The problem is, C++ is still the most usable general-purpose OO language, and Stroustrup's confusion and his part of C++ dual philosophy are still reflected in it, so the book is still good for studying.

    --
    Contrary to the popular belief, there indeed is no God.