Slashdot Mirror


A New Bible For Programmers?

KZigurs writes "The wonders of online publishing... If you are ready to take on a heroic task and read thru all 976 pages of Concepts, Techniques, and Models of Computer Programming (draft) (pdf file, 3MB, intro here) written by Peter Van Roy and Seif Haridi you won't regret it. Just finished reading it and I feel like I have read the Bible. And who knows? It has the potential, and since current de facto books about programming are aging with increasing speed it very well may become one. (Please read the intro to get more detailed outlook at topics covered)
Anyone before heard about Oz?"

31 of 117 comments (clear)

  1. Newer Copy Available by erasmus_ · · Score: 5, Informative

    I'm not sure why the article links to the April 26th draft version of the book, when the intro page itself has the link to the much newer June 5th version.

    http://www.info.ucl.ac.be/people/PVR/booksingle.pd f

    I look forward to reading it from the intro, however, might be really worthwhile.

    --
    Please subscribe to see the more insightful version of th
  2. So.. by dr+ttol · · Score: 5, Funny

    Does this bible also make the prediction that something huge will happen at the end of the millennium?

    1. Re:So.. by Z0mb1eman · · Score: 2, Funny

      +1 Informative?

      *chuckle*

      Bad mods, no donut.

      --
      ClutterMe.com - easiest site creation on the Net. Just click and type.
  3. Google's Cached HTML Version by IdleMindUI · · Score: 3, Informative

    It appears that the site is already...umm...slashdotted. Google's cached HTML version can be found here.

  4. Very interesting, also for non-programmers by tsa · · Score: 4, Insightful

    I am not a programmer but this seems to me a very interesting book for people who want to have a detailed yet general (hope you understand what I mean) idea of what's going on inside their computers as they are hammering their keyboards. Seriously, popular books on computer programming usually learn you how to use a certain programming language and not the concepts behind writing a computer program so this is a must-read for all people that want to learn to program computers.

    --

    -- Cheers!

  5. Another Bible by Ann+Coulter · · Score: 4, Informative
  6. Already slashdotted? by stienman · · Score: 3, Informative

    The google cache of the pdf (converted to HTML by google) is here.

    -Adam

  7. OutDated? by peripatetic_bum · · Score: 5, Insightful
    since current de facto books about programming are aging with increasing speed


    I'm sorry to sound susppicious, but the concepts of programming are not out dated. The problem is tat programming has actaully become (or rather started out) incredible sophisticated and that a lot of programmers now have not been properly trained (be it by self study or a rigour CS program). And that flurry of programming books are more lke cookbooks and dont really *teach* anything anymore.

    I find it rather hard to believe that Knuth's analysis of algorithms of Sorting and Searching have/will become out dated. I think his title the ART of COmputer Programming was always incredible ironic because he has done more than anyone else to turn into a real science, which it is now, and by which I mean that it has hypothesis that can now be tested. His book lay the foundation for it and I doubt any new programming book, short of specilized computer journal articles have done much to advance programming.
    --

    Sigs are dangerous coy things

    1. Re:OutDated? by Asprin · · Score: 3, Insightful


      I think his title the ART of COmputer Programming was always incredible ironic because he has done more than anyone else to turn into a real science, which it is now, and by which I mean that it has hypothesis that can now be tested.

      I disagree.

      Real science has proper control groups and reproducible results. Programming has neither.




      [/me grins, ducks and runs]

      --
      "Lawyers are for sucks."
      - Doug McKenzie
    2. Re:OutDated? by peripatetic_bum · · Score: 2

      reproducible? Are you saying results cant be reproduced on computer? Im sure you are not saying that, please explain.

      Proper control groups? hmmm, are you thinking something like a placebo group? perhaps, but what I am thinking of is testing one algorithm against another, or using the say, a standard algorthm for sort (say, bubble sort) and being able to compare to another sort process and get empirical evidence (ie speed) of which one is better.

      I would say you have total control of the control group in your testing. again please explain as I think I missed our point, but am interested in what you trying to say.

      G

      --

      Sigs are dangerous coy things

    3. Re:OutDated? by Oscaro · · Score: 5, Insightful

      Gnahhhrrrrg I keep hearing this argument over and over. But knowing how to do things right (and why) is the ONLY way to survive to new problems and situations that the STL does not solve.

      That's one of the reason I hate Java. Its huge library lets you write programs without having to learn or understand what the hell you are doing.

      Thanksfully, when I learned to program, I had to code my own hashtables.

    4. Re:OutDated? by Violet+Null · · Score: 4, Interesting

      I think (hope) you're just pretending to be sarcasm-challenged when taking the parent post seriously.

      But, now that I'm on the subject...

      Once you've gotten your first non-reproducible bug, you'll see what the parent poster was talking about with reproducible results. An awry pointer can cause all sorts of havoc that's incredibly difficult to track down, and, even worse, it often won't break the same way twice.

      As for your example of algorithms: "better" is rather subjective, especially in regards to sorting algoriths. Although quicksort might be faster for general purpose use, there are plenty of algorithms that can beat it in certain conditions. And, programming being what it is, you can never be sure that your program will be running under those certain conditions or not.

    5. Re:OutDated? by Asprin · · Score: 5, Interesting


      Well, I was actually making an ironic joke, but since you ask, I can certainly give it another shove closer to the edge of the cliff, so to speak.

      First, let me say that I was actually serious when I said that programming (just like mathematics and logic) is not science.

      This opinion was not formed without a fair amount of consideration (BS in math, MA in physics). We could argue semantics for many moons, but my definition of a "science" goes something like "A course of inquiry which employs the proper scientific method: only ask questions you can actually answer, employ direct empirical observation with proper control groups, verify the results independently (one trial does not a conclusion make), and reserve nature as the authority - you must maintain a complete willingness to be proven wrong."

      Mathematics, Programming and Logic work this way because they conform to a different kind of rigor for validation -- namely, constructive or analytical "proof", which is not, by its nature, empirical. I'm not trying to refute, denounce or demean non-scientific studies, I just want to point out that "scientific" means something specific, and it does not apply to those other areas I mentioned.

      BTW, one pet peeve of mine is when in sci-fi movies, the dude says "There has to be some kind of scientific explanation for this." Well, no: METHODS are scientific, not explanations.

      Also, please note that many areas of study: Psychology, Sociology and Political Science (as well as certain areas of Biology and Chemistry -- needle, needle, jab, jab, ha-ha!) *could* be scientific in some cases, but typically aren't because they are populated by dumb researchers employing horribly poor experminental and analytical techniques.

      So, having said that, I will conclude with the "on-topic" tongue-in-cheek gags:

      Reproducibility: (In WRITING programs, not running them)
      Since all developers on a project typically work from the same source tree, no programming results have ever been independently verified except the programming assignments in textbooks.

      Control Groups:
      Well, maybe you have a point on this one. I suppose a NOP loop would qualify as an effective control, but how do you halt the experiment?

      --
      "Lawyers are for sucks."
      - Doug McKenzie
    6. Re:OutDated? by egomaniac · · Score: 2, Insightful

      I find it rather hard to believe that Knuth's analysis of algorithms of Sorting and Searching have/will become out dated.

      Really? When's the last time you wrote your own implementation of a search or sort algorithm?

      I haven't done so in a decade. Every language I use has built-in implementations which are more than fast enough for my purposes. Likewise with virtually all such basic algorithms -- they have been implemented, and generally very well, in libraries. Computers are fast enough now that even a "good enough" general implementation of an algorithm is more than fast enough in virtually every case (and for the other cases, that's when you need to haul out the books).

      I'm not saying that it is useless to know how sort algorithms work, but suggesting that it's relevant in the day-to-day work of a typical software developer (which is what you seem to be implying) is very misguided, in my opinion. In the same vein, most programmers couldn't explain how a transistor works if their lives depended on it, and I don't see that as such a huge problem, either.

      Just out of curiosity, do you know how a transistor works? I'd wager that most folks around here don't, any more than they could write an implementation of QuickSort without having to look it up.

      --
      ZFS: because love is never having to say fsck
    7. Re:OutDated? by oni · · Score: 2, Insightful

      I find it rather hard to believe that Knuth's analysis of algorithms of Sorting and Searching have/will become out dated.

      It's too bad that you mentioned searching and sorting because it seems a lot of the other replies here jumped on that issue and completely missed your point.

      The Art of Programming isn't about either of those topics. It's about algorithms. Knuth uses seaching and sorting as a means to the ends of teaching the programmer to think about his algorithms. As other people have pointed out, a modern programmer is unlikely to implement either a search algorithm or a sort algorithm. But they use other algorithms to every day. They invent algorithms every day.

      The core of programming is ability to examine a problem and create algorithms to solve it. That's what programmers do (unless of course we're talking about VB programmers doing little more than connecting an interface to a control). At any rate, Knuth teaches algorithms - not searching and not sorting.

      The bottom line is, Knuth's work is still relevant and quite useful.

    8. Re:OutDated? by Arandir · · Score: 4, Informative

      Just like long division, there are times when you need to write your own search or sort algorithm. Why?

      1) Sometimes it's easier to write your own sort than to write a weird ass adaptor for your weird ass data.

      2) Sometimes "good enough" isn't "good enough" and you need that extra 15% performance increase you get for writing a search/sort customized for your data.

      3) Actually knowing how stuff works is good for the brain. After you learn basic bonehead algorithms, take some time to learn long division as well.

      4) Just to prove that you aren't a code monkey destined for the dustheap of history when you turn thirty.

      --
      A Government Is a Body of People, Usually Notably Ungoverned
    9. Re:OutDated? by H*(BZ_2)-Module · · Score: 3, Insightful
      I agree, and I think much of the misinterpretation comes because many are commenting on Knuth without ever having really read it. This comes from the introduction to TOACP.V3 2nd edition(which is from 1998 by the way, not so ancient):
      The title "Sorting and Searching" may sound as if this book is only for those systems programmers who are concerned with the preperation of general-purpose sorting routines or applications to information retrieval. But in fact the area of sorting and searching provides an ideal framework for discussing a wide variety of important general issues: How are good algorithms discovered? How can algorithms and programs be improved? How can the efficiency of algorithms be analyzed mathematically? How can a person choose rationally between different algorithms for the same task? In what sense can algorithms be proved "best possible"? How does the theory of computing interact with practical considerations? How can external memories like tapes, drums, or disks be used efficiently with large databases? Indeed, I believe that virtually every important aspect of programming arises somewhere in the context of sorting and searching!
  8. So few comments... by Kopretinka · · Score: 2, Funny
    It looks like it takes the /. crowd some time to go through nearly a thousand pages before they post comments.

    More interestingly, it seems may are actually RTFBing.

    Oh, I just hope no karma whore posts the book here. 8-)

    --
    Yesterday was the time to do it right. Are we having a REVOLUTION yet?
  9. Mozart & Oz in the book by joelparker · · Score: 4, Informative
    The book uses the Mozart Programming System

    Mozart & Oz are well-developed and worth a look--
    your programming may improve because of them.

    Cheers, Joel

    p.s. here are quick excerpts:

    The Mozart Programming System is an advanced development platform for intelligent, distributed applications. The system is the result of a decade of research in programming language design and implementation, constraint-based inference, distributed computing, and human-computer interfaces...

    Mozart is based on the Oz language, which supports declarative programming, object-oriented programming, constraint programming, and concurrency as part of a coherent whole...

    We have developed many applications including sophisticated collaborative tools, multi-agent systems, and digital assistants, as well as applications in natural language understanding and knowledge representation, in scheduling and time-tabling, and in placement and configuration.

  10. Oz by thelenm · · Score: 4, Interesting

    Yep, we had to use Oz in a Programming Languages & Semantics course I took in grad school. All I really remember is that it used "constraints" rather than "values" for variables. For example, a variable doesn't necessary contain a single value, but it might contain the constraint "greater than 100, less than 2000". And you can do all kinds of stuff with intersection and union of constraints, and... ahh, that's all I can coerce out of my brain. I thought I had repressed it forever. :-)

    --
    Use Ctrl-C instead of ESC in Vim!
  11. Note about the Oz language by Anm · · Score: 5, Insightful

    For those curious why this books uses Oz as it's language of choice, it is one of the few, if not the only language, to support the many popular paradigms of programming:
    * procedural, like C & BASIC
    * object-oriented, like Ada & Java
    * functional, like Scheme & Haskel
    * declarative, like Prolog

    It that way, this book is a good way to keep your mind open to different approaches to doing things.

    Anm

  12. Mirror Here by Bluetrust25 · · Score: 5, Informative

    It's mirrored here courtesy of SurveyComplete.

    Incedentally, I highly recommend the book Code Complete: A Practical Handbook of Software Construction by Steve C McConnell. It tought me more about programming than the rest of my computer book bookshelf!

    Another great resource is Safari. It's a web service that for a fee, allows you to view O'reilly, Que, and Sams books online. I find the code search feature to be invaluable. Cheap way to read technical books.

  13. hmm by rpeppe · · Score: 3, Interesting
    I'm a bit dubious about a book that talks about the "substitution property" of objects without once mentioning Liskov's substitution principle, or that talks about message passing concurrency wthout mentioning Tony Hoare's CSP.

    Is this book really as authoratitive as it tries to appear?

    1. Re:hmm by KZigurs · · Score: 2, Interesting

      Most probably no. But then - what is? If it would pretend to be JustAnotherBookFromThatLibrary noone would be interested to read it. And as for the contents - anything may miss something, but if it is good writen, easly readable and actually lets you have a look from a different perspective - it very well may be worth reading. :D

  14. I Know How a Transistor Works! by Sunlighter · · Score: 4, Interesting

    There are two kinds of transistors, bipolar junction transistors and field-effect transistors. Bipolar junction transistors are sandwiches made from two layers of N-type silicon separated by a layer of P-type silicon. A bipolar junction transistor has three terminals: an emitter, a base, and a collector. The emitter and collector are connected to the N-type silicon (on opposite sides of the sandwich) and the base terminal is connected to the P-type silicon. When a small voltage is put on the base terminal, current is allowed to flow from the emitter to the collector. (This is for an NPN-type transistor. There is also a PNP type which is the opposite and works with negative voltages instead of positive.)

    A field-effect transistor has three terminals, too, but they are called the source, the gate, and the drain. The source and the drain are connected by a channel made of N-type silicon, but the channel is somewhat narrowed by P-type silicon in the middle which is connected to the gate terminal. When you put a voltage on the gate, it creates an electric field which chokes off the current flow from the source to the drain. There is also a type of field-effect transistor with a channel made of P-type silicon, and the voltages are negative.

    I have done better than implementing a sort algorithm; I implemented keyless 2-3 trees in a functional style and thus speeded up my LR(1) parser generator from 27 minutes to 4 minutes.

    The work of people like us makes the work of people like you possible. So: nyah nyah na-nyah nyah.

    --
    Sunlit World Scheme. Weird and different.
  15. But don't look for... by sohp · · Score: 4, Interesting

    Based on reading the Preface and a brief scan of the table of contents, this book is interesting for what the authors do not cover, by design. Nothing on static typing, nothing on algorithms, AI, databases, or numerical techniques.

    To some, leaving these topics out of a "bible" would amount to extreme heresy. The content of this book owes more of its lineage to The Structure and Interpretation of Computer Programs than The Art of Computer Programming.

  16. Re:Kneejerk reaction by jason_watkins · · Score: 2, Insightful

    all depends what those 1000 pages are full of. If it's 1000 pages of "teach yourself NEW_FAD_TECHNOLOGY in 21 days" then I'd agree. If it's 1000 pages of authoritative, carefully considered and exhaustive thought, then I'd say 1000 pages is to little... I'd like a lifetime supply.

    As for this book... so far I've only skimmed, and for being free on the web as a preprint, I'd say it's fantastic. I'm also reading Programing Language Pragamtics right now, and it's a little more complete treatment of the same subject area.

  17. Why understanding the basics still matters by Anonymous+Brave+Guy · · Score: 2, Informative
    I'm not saying that it is useless to know how sort algorithms work, but suggesting that it's relevant in the day-to-day work of a typical software developer (which is what you seem to be implying) is very misguided, in my opinion.

    On the contrary. In my experience, an awful lot of programmers, mostly those who are self-taught but don't realise what they're missing, frequently choose an incorrect data structure or algorithm even for simple things like sorting and searching. If you're working in a field where performance matters at all, that can be crippling.

    I agree that hardly anyone should need to write the usual sorting or searching algorithms from scratch today. It's almost invariably easier and safer to use one from a library, though of course there are a few legitimate exceptions. But you do need to understand the basics of the algorithms you use, their performance characteristics and the limitations they have.

    This is particularly important with the growing dependence on library code, because most libraries provide only a few "typically best" algorithms. Sometimes an introsort variation isn't the best, or even close, but only the programmer who knows about his own data and who understands the range of algorithms available is able to judge when an alternative is more appropriate.

    Just out of curiosity, do you know how a transistor works? I'd wager that most folks around here don't, any more than they could write an implementation of QuickSort without having to look it up.

    No, but I could tell you off the top of my head the algorithms for intro sort, quick sort, merge sort, radix sort and several others, and implement them for you in a procedural or functional language without a whole lot of reading. I work with performance-critical applications every day, and you'd expect nothing less from a professional in my position.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  18. Cautious first impressions by Anonymous+Brave+Guy · · Score: 2, Informative
    Is this book really as authoratitive as it tries to appear?

    I had a quick scan over it, and while I'm reluctant to judge on first impressions, I couldn't help feeling that it had a lot of breadth but not much depth. It struck me as somewhat similar in style to the wizard book, though obviously with wider coverage.

    I had the same immediate reservation as you did: the OOP section seemed weak compared to established "classics" in the field. Failure to mention things like LSP is unforgivable in a book aiming for a theoretical approach. The offhand comment about "whatever that means" in reference to sending messages to everything didn't much help, either; I'm guessing anyone who's used a language like Smalltalk or Ruby would be quite comfortable with the idea.

    All of that said, there appears to be a lot of useful and worthwhile material in the book, and I'll certainly be dipping into other parts of it as time allows over the next few days. It's only a preprint, and I only looked at one section in any real detail at all, so I'll give it the benefit of the doubt for now.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  19. OK, damning indictment time :-( by Anonymous+Brave+Guy · · Score: 2, Insightful
    Why, the LSP is known by many different names. The 'substitution property' for example.

    What they called the "substitution property" is a waffly version of Liskov's clear and concise principle.

    Why not try actually *reading* the OO chapter before giving such a sweeping judgement :-).

    I appreciate the smiley there, but OK, I've now read the first half of the OO chapter in its entirety. Not only does it fail to mention the LSP in any useful way, it also fails to stress the interface/implementation separation, the significance of polymorphism and the way inheritance is used in many languages to allow it, the concepts of invariant conditions on a class' state and pre- and post-conditions on its methods, and just about everything else that's actually important about OO. Instead, they seem to spend lots of time going on about the cute syntax in their pet language.

    Just to finally convince me that they don't really understand OO, their example (in section 7.4.1) of bad inheritance is dubious at best. They could have used the circle/ellipse or integer/rational "paradoxes" to demonstrate the hazards of using inheritance poorly, but instead they use an example that actually seems entirely reasonable to me. Their claim about what the outside world can expect violates the very principle of encapsulation: the outside world shouldn't know that, because it's an internal proprerty of that class... Unless, of course, it's documented in the interface as a post-condition of the method calls, but in that case, the derived class is breaking LSP. Oh, but they haven't mentioned post-conditions and how they are constrained by LSP, so it's kinda hard to say that.

    Sorry, but having read 50 pages of that book, I'm quite convinced that it's not the new bible of programming. On the contrary, I would actually steer anyone interested in learning OO away from it, as I think its overweight theory and underpowered practice would be harmful to a newbie.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    1. Re:OK, damning indictment time :-( by Peter+Van+Roy · · Score: 2, Interesting
      Ok, let me take the technical points one by one.
      • The interface/implementation separation. It is explained starting in Chapter 3 (Section 3.7) and continues in Chapter 6. The OO Chapter follows on this long discussion.
      • The LSP. It is mentioned prominently and usefully in the Account example and in several other places. It is called the "substitution property". This is a perfectly acceptable name in our view; Bertrand Meyer also uses it.
      • Polymorphism. It is completely natural in a dynamically typed language. Perhaps we have underemphasized it as a concept, but we use it freely.
      • Invariant conditions. These are explained in Chapter 6, when we talk about reasoning with state. This reasoning naturally applies to classes as well. (There is also a discussion on invariants in Chapter 3, when we talk about accumulators.)
      • "Cute syntax". In fact, we introduce two important concepts, namely first-class messages and name values, in the early part of the OO chapter. These are important, e.g., name values allow us to *program* any kind of visibility constructs (like private, public, etc.) instead of accepting them as hard-wired.
      • The example of Section 7.4.1. The AccountWithFee class violates an algebraic property of sequences of method calls. Where is encapsulation being violated here?
      • "Overweight theory". All concepts in the book are defined formally, in as lightweight a way as we could devise. We find this essential for getting a deep understanding. However, we never do theory for theory's sake. Furthermore, the theory is clearly separated from the rest and can be ignored if desired.
      • "Underpowered practice". The book distills more than a hundred man-years of system-building expertise. We have tried to extract the essential ideas from this experience.
      • Finally, remember that we cover a wide territory in the book. We introduce reasoning with invariants a few times, but we do not have the space to develop it everywhere in the book. The same goes for many other concepts. We rely on the alert reader to make these connections.
      As a final comment, I am sorry that you have such a harsh opinion of our work. I think you have misconstrued what you have read by taking it out of context.