Slashdot Mirror


Ask Slashdot: Have You Read 'The Art of Computer Programming'? (wikipedia.org)

In 1962, 24-year-old Donald Knuth began writing The Art of Computer Programming, publishing three volumes by 1973, with volume 4 arriving in 2005. (Volume 4A appeared in 2011, with new paperback fascicles planned for every two years, and fascicle 6, "Satisfiability," arriving last December). "You should definitely send me a resume if you can read the whole thing," Bill Gates once said, in a column where he described working through the book. "If somebody is so brash that they think they know everything, Knuth will help them understand that the world is deep and complicated."

But now long-time Slashdot reader Qbertino has a question: I've had The Art of Computer Programming on my book-buying list for just about two decades now and I'm still torn...about actually getting it. I sometimes believe I would mutate into some programming demi-god if I actually worked through this beast, but maybe I'm just fooling myself...

Have any of you worked through or with TAOCP or are you perhaps working through it? And is it worthwhile? I mean not just for bragging rights. And how long can it reasonably take? A few years?

Share your answers and experiences in the comments. Have you read The Art of Computer Programming?

54 of 381 comments (clear)

  1. Unfortunately no and I have a reason by Anonymous Coward · · Score: 4, Informative

    Unfortunately no and I have a reason:
    Reading those books requires high degree of mathematical sophistication, particularly, knowledge of complex analysis, which I lack.

    1. Re:Unfortunately no and I have a reason by lgw · · Score: 5, Informative

      Reading those books requires high degree of mathematical sophistication, particularly, knowledge of complex analysis, which I lack.

      They're just algorithms textbooks. They're hard to read because of when they were written, and the accompanying style. More like pseudo-assembly than high-level pseudo-code.

      But, hey, if you want to optimize your search algorithm that uses tape as storage, to take advantage of the new-fangled tape drives that can write backwards as well as forwards, it's the book for you! (Yes, that was really a thing, and an algorithm you'll find in Volume 3: Sorting and Searching.)

      Personally, I don't think he does a great job explaining algorithms. I once needed to look up O(n) median for something, tried to understand it from Knuth, gave up on the cryptic text, and understood it right away from CLR (now CLRS). It is an exhaustive catalog, but it's not a great learning tool.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    2. Re: Unfortunately no and I have a reason by aglider · · Score: 2

      The little amount of maths that's in there is not that difficult to understand. And if you skipped it, you would be still learning a lot. Not reading taocp because of maths is just an excuse.

      --
      Sent as ripples into the electromagnetic field. No single photon has been harmed in the process.
    3. Re:Unfortunately no and I have a reason by lgw · · Score: 3, Informative

      The "R" is Rivest, who invented the algorithm for O(n) median, and some other stuff.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    4. Re:Unfortunately no and I have a reason by ShanghaiBill · · Score: 4, Interesting

      Personally, I don't think he does a great job explaining algorithms .... It is an exhaustive catalog, but it's not a great learning tool.

      I agree with all of the above. There are better books. But criticizing TAOCP is like saying the emperor has no clothes. The series is difficult to understand, and everyone thinks it is their own fault for not being smart enough, rather than that the books actually aren't very good.

      Disclaimer: I own the entire series, and keep them in my office to impress people, but I haven't actually opened them in the last 20 years.
      Additional Disclaimer: I loved Don's "Concrete Mathematics" book ... for the humor as well as the math. I keep it in my office to impress people too.

    5. Re:Unfortunately no and I have a reason by bzipitidoo · · Score: 4, Interesting

      CLR is Introduction to Algorithms by Cormen, Leiserson and Rivest. The S in CLRS is for Stein, who joined the team for the 2nd edition. When CLR came out in 1990, it was hailed as the best algorithms textbook ever, and what an algorithms textbook should be, a huge jump in readability and clarity over the not wholly satisfying existing algorithms textbooks. It uses pseudocode, instead of a real programming language. Allowed the algorithms to be presented cleanly, without any boilerplate code, overhead, or worries about limitations, no need for tedious checks for array out of bounds, numeric overflow, or out of memory, or invalid input. Don't have to declare any variables, or figure out how many elements an array needs.

      The Abelson and Sussman textbook, Structure and Interpretation of Computer Programs, uses LISP (actually Scheme). There are quite a few LISP fanatics who passionately feel it is still the best programming language made, citing such reasons as the simplicity of writing an interpreter for it. However, that textbook is pretty difficult. The authors didn't appreciate how hard recursion can be for many students to understand, and LISP and functional programming in general uses recursion so heavily it's the proverbial hammer for every nail of a programming problem.

      Since then, programming languages have improved. Still not good enough for the textbook, but closer.

      --
      Intellectual Property is a monopolistic, selfish, and defective concept. It is "tyranny over the mind of man"
    6. Re:Unfortunately no and I have a reason by passionplay · · Score: 2

      presented .... without any boilerplate code, overhead, or worries about limitations, no need for tedious checks for array out of bounds, numeric overflow, or out of memory, or invalid input.

      Wait - did I read that correctly? "without any boilerplate code, overhead, or worries about limitations, no need for tedious checks for array out of bounds, numeric overflow, or out of memory, or invalid input" = improved textbook?

      Aren't these the attack vectors used by malware and viruses today?

      I think I'm lost. We use a newer shiny shiny that shows us to do something without showing it done safely and it's better because people will magically include the necessary safety checks and our new algorithms are better because they are clearly implemented without the safety checks.

      That's the premise of this statement and the assessment?

      Just making sure I'm on the same page.

    7. Re:Unfortunately no and I have a reason by shaitand · · Score: 4, Insightful

      Since the safety checks are language dependent and aren't actually related to the algorithm logic, yes, that is better. This isn't a copy and paste recipe book. Learn the algorithm logic from the book then write your own implementation in the language of choice.

    8. Re: Unfortunately no and I have a reason by Anonymous Coward · · Score: 5, Insightful

      So you can't read them?

      They are some of the most valuable books I'be ever owned. Whether during programming, developing FPGA logic or just trying to have a method of proving some of my algorithms. TAOCP is invaluable.

      Computer science is still... well science and TAOCP is a cornerstone of computer science. You're confusing computer science and application programming.

      There are certainly better places to learn the basics. Like for example, what is a red black tree? But TAOCP is where you understand them.

      And I think his pseudo-computer concept was nifty. As for FORTRAN, all the fortran developers I know are generally slobs. They'd never touch these books.

    9. Re: Unfortunately no and I have a reason by Anonymous Coward · · Score: 2, Insightful

      This is so true. Knuth hasn't substantially updated his book to reflect modern thinking about his many subjects. It's encyclopedic, as in Encyclopedia Britannica, not as in Wikipedia. Pick a subject that you know something about, and Knuth still retains very old examples to fortify his analyses. There are many examples he gives in his book, where he doesn't give credit to the original designer of an algorithm. He tries to be historical in some parts, giving due credit to authors of algorithms, but not in other parts. His book is rambling, reflecting his thinking during the late '60s, and not well organized to clearly define a subject, step by step. That is where his successors surpassed him in writing useful reference books about algorithms. Indeed, his was the art of computer programming in 1968-1973. My recommendation: don't waste your time reading through the four to seven volumes of his "monograph", unless you're interested in the history of science. In all fairness, Donald E. Knuth has bitten off more than he can chew. That is why, in my opinion, he has failed to complete his oeuvre, and he is now in his late 70's.

    10. Re:Unfortunately no and I have a reason by Anonymous Coward · · Score: 2, Informative

      search algorithm that uses tape as storage, to take advantage of the new-fangled tape drives

      Such co-location issues are actually still very relevant if you consider cache optimisation, or even GPU implementations of algorithms.

    11. Re: Unfortunately no and I have a reason by RabidReindeer · · Score: 5, Interesting

      I can't say I've ever read Knuth in the literary sense. It's more of the ultimate reference.

      Thankfully, I no longer have to construct sorts, searches, random number generators, etc. every time I write a program, since modern-day language systems come pre-supplied. However, someone has to implement those pre-supplied algorithms, and that someone almost certainly referenced Knuth. He has provided a concise, well-explained collection of analyses, discussions and sample implementations of many of the most important functions needed by almost everyone in the software development field.

      The downside of it is MIX. I understand the reason Knuth created MIX, but MIX is an assembly language and not even a commonly-used one (and intentionally so). I know that there are many who think that the purpose of computers is to run machine (assembly) language, but they're wrong.

      The purpose of computers is to run software. How it runs the software is secondary. You can see this in the fact that some machines include in their instruction set specialized functions related to specific abstract features. The Prime Computer instruction set had machine-language implementations of the FORTRAN 3-way branch. I think it was Honeywell that had an OS task dispatcher function implemented as a machine-language instruction. The Inter iAPX432 was designed to run Ada, the IBM System/360 had the Translate instructions, and the IBM zSeries has a major subset of the Unix stdlib implemented as CISC instructions, including a few of the Knuth algorithms.

      Keeping software as a set of bits corresponding to primitive functions is convenient for implementing von Neumann machines, but it should be realized that it's the means and not the end, and when scaled, tends to lose the abstract picture in the minutae. If minutae were the end of it, one should be programming microcode and manually switching gates - on many machines, the "machine language" is itself an abstraction interpreted via microcode.

      I've often complained that one of the biggest annoyances in IT is that you can pop out a prototype GUI in a day or 2 and everybody thinks it should go to full production next Thursday, where no one in their right mind would ever expect a scale cardboard model of a building or bridge to be ready for use in such time.
      But there's a similar break in education in that in most cases CIS courses use a "practical" language instead of an abstract one.

      While assembly language was very common when Knuth wrote Volumes I-III, he was aware that there was no universal high-level language any more that there was a universal low-level one, which was another reason he invented MIX. Even academically-inclined languages such as Modula ultimately detoured into practical use, warping their abstraction. And, although ideological purity makes me projectile-vomit, when you're dealing with abstract concepts, I prefer to keep things truly abstract. Otherwise it warps one's approach to later solutions.

      Djisktra did. in fact attempt an abstract high-level language in his "A Discipline of Programming", although it has some odd warts of its own. Personally, I'd vote for Ada, because while the last time I actually ran Ada, it nearly burned out the bearings on a mid-line IBM mainframe, it is the only common language I know where values and functions are assigned ranges and domains - an essential concept that is taught at the very beginning of differential calculus classes, but not nearly well-stressed enough in most CIS curricula. Were it otherwise, perhaps fewer satellites would have been destroyer.

      Ada, incidentally, is part of the gcc/gnat toolset available on almost any Linux development system and modern-day PCs are considerably more powerful than a 1990 mid-level IBM mainframe (but then again, probably so are most cellphones), so anyone who's curious can explore.

    12. Re:Unfortunately no and I have a reason by luis_a_espinal · · Score: 4, Informative

      presented .... without any boilerplate code, overhead, or worries about limitations, no need for tedious checks for array out of bounds, numeric overflow, or out of memory, or invalid input.

      Wait - did I read that correctly? "without any boilerplate code, overhead, or worries about limitations, no need for tedious checks for array out of bounds, numeric overflow, or out of memory, or invalid input" = improved textbook? Aren't these the attack vectors used by malware and viruses today?

      Everything you mentioned are supposed to be a given. A person who needs explicit indication of them are not at the level required to use a book like CLRS. I don't mean it as an insult, but as an observation.

      Moreover, many of the checks you mention are handled by constructs and idioms that are language dependent. For example, boundary checking in C will be different from, say, Ada or Java, let alone something like Ruby or LISP.

      Also, when you are stuying algorithms at that level, you are assumed to have a certain maturity that makes reference to such things irrelevant. Think of it like this: If you are learning how to solve quadratic equations, you do not need a lesson in adding fractions, do you?

      Same principle applies here. When you are taking a book like CLRS, it is to study the mathematical properties of algorithms.

      I would say that a there is a more hands-on book that directly addresses these concerns: O'Reilly's Algorithms in a Nutshell. This is a really nice pocket book.

    13. Re:Unfortunately no and I have a reason by pthisis · · Score: 3, Informative

      I constantly switch between the major C languages (not a major feat), C, C++, Java, C# and my resume has Visual Basic, Ada, Python, Perl, Assembly, FORTRAN, Lab Windows

      A lot of these languages are kind of samey-samey; the mind expansion he's talking about comes from working in languages that use very different programming models that make you approach problem-solving in new ways. Try adding, say, Haskell (or SML or ELM), Forth, and Prolog to the list, for starters.

      --
      rage, rage against the dying of the light
  2. Re:Never admit by 110010001000 · · Score: 2

    empress? memcached? redis? You guys have strange names for programs.

  3. Torn between reading and doing by mykepredko · · Score: 4, Interesting

    I read the first three books in University and did examples from the first two when I started debating with myself, friends and professors, is it better to have the ultimate reference or be able to create code on your own as the requirements come up?

    Over the thirty plus years since, I'm happy to say that volume two and three have gotten pretty ratty as I've used them as references (along with "Programming in C", 2nd edition) so I feel like I've struck the right balance (for me) between reading them, using them as reference and creating my own code/algorithms.

    1. Re:Torn between reading and doing by jnaujok · · Score: 2

      Few developers are going to have to know how to really code, or what is really happening in the engine they are using.

      And THIS is why I get paid nearly twice as much as all the people I work with who fit exactly this mold. Because when you do understand how the code really works, you can make software perform better than anyone believes. For example, 10,000 complex business logic transactions per second with database and third party interactions on 3 boxes of physical hardware with a total cost under $20,000. (Probably less if our ops people didn't insist on IBM branded servers.)

      --
      Life, the Universe, and Everything... in my image.
  4. Daughter was a big fan when she was younger by 93+Escort+Wagon · · Score: 3, Funny

    Although she preferred his other works, like The Land Before Time and Anastasia.

    --
    #DeleteChrome
  5. May the Source Be With You by ramorim · · Score: 2

    Just buy it (the entire and updated book set) and read it ;) and continue to use it as a permanent reference for whatever you want to do with programming...

  6. Read the first volume by guruevi · · Score: 5, Interesting

    It's really great reading if you do stuff like program low-level (think C, Assembler), efficient programming or do stuff close to the hardware level (such as microprocessors). It describes the very low level of a program and a computer.

    If you're into a higher level of programming (Java, C#, Python etc), unless you're building libraries for it, it is probably going to confuse you, most of the 'hard stuff' is (double precision, floating point, sorting and searching through lists ...) abstracted away. Obviously 'someone' has to know how it works in the end, someone has to write the compilers, I haven't started on the rest of the volumes because that's not "me".

    You should understand how computers work before you start reading these, I've been in the 'business' for 20 years, I've read it 3 times just to get a basic grasp on the first volume.

    --
    Custom electronics and digital signage for your business: www.evcircuits.com
    1. Re:Read the first volume by un1nsp1red · · Score: 3, Funny

      It's a difficult read between full time work, family and social lives

      Who let this guy in here? How'd he get past security?

    2. Re:Read the first volume by TheRaven64 · · Score: 3, Insightful

      It describes the very low level of a program and a computer.

      No it doesn't. It describes the very low level of a program running on a computer from 30-50 years ago. The lessons that it teaches about algorithmic complexity are still valid, but the low-level stuff is not. Once you get to limits of the implementation, rather than of the algorithm, artefacts of caches in pipelines are far more important to performance. Not only will you not find, for example, Hopscotch Hash Tables in TAOCP, you also won't find an explanation of the underlying reasons for their performance.

      --
      I am TheRaven on Soylent News
  7. Re:Hell no by UID30 · · Score: 3, Insightful

    It isn't terribly complex now that geniuses like Knuth have spent literally decades simplifying it for you, sure. Step deeper into the world and you'll be truly amazed at how deep it is ... and likely staggered that it works as well as it does.

    --
    "Glory is fleeting, but obscurity is forever." - Napoleon Bonaparte
  8. A SkyRim Read? Then Yes. by xxxJonBoyxxx · · Score: 5, Funny

    I read the three volumes like I read any book in SkyRim: I opened the cover, got my +1 level in computer science, dropped it and hit it with a fireball.

  9. Absolutely. If you want depth, read it. by alvarez.pablo · · Score: 2

    It's definitely worth reading, and working through at least some of the exercises. It is an excellent example of rigor, depth, and attention to detail. You may not have time to work like that every day, but it's very useful to be capable of doing it and to have a good mental model of what it's like.

  10. Re:Never admit by 93+Escort+Wagon · · Score: 2

    You think anything written by anybody 77 years old is relevant?

    So I take it you think K&R is irrelevant as well.

    --
    #DeleteChrome
  11. Parts by Erich · · Score: 5, Informative

    TAOCP is a great reference. There are some really important things that are pretty good for someone who wants to be a professional software engineer.... 0) understanding how algorithms execute on a processor. While MIX is behind the times, (and MMIX is ahead of the times in many ways) understanding how an algorithm executes on a processor is important. I think Knuth really did the right thing in not selecting the language of the day. 1) algorithm reference. If you need to understand an algorithm, or choose between a family of algorithms, it is often a great place to find the art. 2) The humor is pretty good, at least to me. Done get me wrong, it's on a humor book, but there is wittiness and puns and some running gags... 3) It's always good to have some humility, and reading TAOCP always makes me a little more humble. It's worthy of a place on your shelf.

    --

    -- Erich

    Slashdot reader since 1997

    1. Re:Parts by cruff · · Score: 2

      Anyway, my question is: what is MMIX, and how does it differ with MIX which was rather limited, even for the 6502 programmer I was at the time ?

      MMIX is a 64 bit RISC-like processor that reflects where CPUs were headed in the 1990-2000 time frame. I found the algorithms coded in MMIX assembler to be much easier to understand than the original MIX versions. There are one or more simulators and tool sets available for it if you want to actually test some code.

  12. If you want to write a book, just do it by KalvinB · · Score: 2

    Sure, yeah, you could take a few weekend courses and bang out some stuff and possibly even find a job paying decent money.

    But if you want to move up in the world you need to turn your hack and slash techniques into a refined art.

    The kind of crap commodity programmers write is the stuff that skilled developers get paid a lot of money cleaning up or just re-implementing.

    It the difference between dime store trashy romance novels and real actual novels. The different between the the Divergent movies and Hunger Games.

    If you're content being a direct to DVD wholesaler of crap sure, just get to work.

    If you want to work in the big leagues on important things, you need to be open to learning some things and respect the craft.

    1. Re:If you want to write a book, just do it by Sique · · Score: 2

      One of the most important chapters in my basic CS courses was "robustness", the ability of algorithms to still work correctly even if fed random or maliciously formed input. The mantra of the teacher was: "Never expect input to be what the spec says."

      --
      .sig: Sique *sigh*
  13. Re:Hell no by Tablizer · · Score: 4, Insightful

    Programming isn't terribly complex. If you want to program, just do it.

    It's not complex if you merely want it to run, but if you want flexible, maintainable, and readable code, then it is complex.

  14. huh? by smithcl8 · · Score: 2

    I thought everyone learned from a Dummies book and building a few cell phone flashlight apps.....

  15. Improved open source program. by tenter · · Score: 2

    I used Vol. 2 to improve the multiply algorithm in an open source program.

  16. I have read some by hgriggs · · Score: 4, Interesting

    I have them. I have studied small parts of some of them. I have been delving into them over 30 years.

    For day to day programming, I do not need or use the detail in those books.

    At various times in the past, I have delved into library writing, and then they were very helpful, mostly in understanding issues and problems that I had not thought about. But I think time has moved on. Hardly anyone needs the details in those books, and in many cases, some classes of problems are well solved.

    Looking back, I am glad that I studied some parts. But today I would not recommend them. Unless you really wanted to look back at history.

  17. Re:I just DO it & folks like it... apk by 110010001000 · · Score: 2

    Your closed source code is full of malware. No one should use it.

  18. Re:Hell no by Tough+Love · · Score: 3, Insightful

    It isn't terribly complex now that geniuses like Knuth have spent literally decades simplifying it for you, sure. Step deeper into the world and you'll be truly amazed at how deep it is ... and likely staggered that it works as well as it does.

    +1. Programming isn't terribly complex if you always do it with your training wheels on, and if you never write anything that hasn't been written a hundred times before.

    --
    When all you have is a hammer, every problem starts to look like a thumb.
  19. Re:Hell no by Tough+Love · · Score: 4, Funny

    Nah, I've been programming longer than Knuth has, starting with machine language. You just need to think procedurally.

    In your case, it sounds more like "sporadically".

    --
    When all you have is a hammer, every problem starts to look like a thumb.
  20. Yes, and it's good. but not gospel by Anonymous Coward · · Score: 2, Informative

    It depends on what you mean by "work through it". Do all the exercises? Some are unsolved problems, so that's not terribly realistic.

    There's nothing in the books that's not also discussed elsewhere (with the possible exception of the very thorough discussion of out-of-core sorting with tapes, which is a bit unusual these days), but it takes quite a few other books to equal the series.

    I have read it at length, and it's definitely full of good stuff to know, but it really depends on your field. It's still dedicated to single-threaded algorithms, so concurrent and functional data structures aren't touched. If you're slinging matrices around for computer graphics, not so much.

    But I definitely feel that it covers a greater span than, say, the CLR textbook Introduction to Algorithms.

    Why don't you read some in a library (or download some of the torrents floating around) and see what you think? It's a reference book, not a mystery novel which isn't nearly as good if not read in order.

  21. I have, not worth it by AuMatar · · Score: 5, Informative

    Don't get me wrong, Knuth is a genius. If you need to do deep research on sorting algorithms, definitely read it. If you want to do CS research and need to learn how to read research papers, its a good start. But you aren't going to get any deep insights on how to write a good program from it. Its too academic and far too focused on deep research. And even for the topics it does cover, unless you want to do research on how to really optimize the hell out of them you're better off using tutorials written for a more practical level.

    --
    I still have more fans than freaks. WTF is wrong with you people?
  22. Maybe by kwerle · · Score: 5, Interesting

    I wasn't sure if I'd read 'em. I know a friend/colleague (who I regard highly) who has - and I think he thinks highly of them. But he also has terrible taste in movies.

    A quick google search landed me at http://broiler.astrometry.net/...

    I have not read it.

    I've been coding professionally for 25-30 years, depending on how you count. I studied CS in college. I've read a few outstanding books on the subject since then.

    I don't have the patience for these, and I suspect I'm not going to miss out on much.

    On the other hand, I long ago came to the conclusion that I'm really not interested in low level code. Give me a nice high level language with nice high level functions and features and I'm a happy coder. That's not to say that I don't understand O notation or the costs behind the complexity - but it is to say that I know when to use a drill and when to use a power saw - but I don't want to build either of 'em.

    Maybe you're into the nitty gritty. Or maybe you like bad movies.

    Check your local tech library and see if you can check out a copy. Or ebay 'em for $20-40/volume. Or if the pdf strikes your fancy, maybe take the plunge.

  23. I have read much of it, as I would an encyclopedia by Ungrounded+Lightning · · Score: 3, Interesting

    My wife and I each had a copy of the first three volumes when we married. Yes, there are female computer nerds. B-)

    I first encountered it when assigned one of the volumes as a text back in 1971. Of course the class didn't consist of learning EVERYTHING in the volume. B-)

    I use it from time to time - mainly as a reference book. Most recently this spring, when I needed a reference on a data structure (circular linked lists) for a paper. I've found it useful often when doing professional computer programming and hardware design (for instance, where the hardware has to support some software algorithm efficiently, or efficient algorithms in driver software allow hardware simplification).

    I don't try to read it straight through. But when I need a algorithm for some job and it's not immediately obvious which is best, the first place I check is Knuth. He usually has a clear description of some darned good wheel that was already invented decades ago, analyzed to a fare-thee-well.

    I only see him about once a year. He's still a sharp cookie.

    --
    Bantam Dominique roosters crow a four-note song. Once you've heard it as "Happy BIRTHday" you can't NOT hear it that way
  24. Buy a set for the US Patent Office by rowdysailor · · Score: 3, Insightful

    We should all chip in and get a complete set for the US Patent office. It might help them get rid of some bad patents they have issued over the years.

    Or if you say you are using a computer in a patent app and don't cite Knuth as prior art for something you get tossed for that as well.

  25. Re:It's highly overrated by guruevi · · Score: 2

    CPU and memory are still very expensive, especially on the mobile market and efficient programming and memory management is still very relevant especially as large swathes of memory is becoming scarcer. But there are still plenty of people using microprocessors that have no more than a few MHz and several kilobytes of memory.

    Even the Arduino libraries themselves are rife with examples of such 'bad' programming, some operations unnecessarily take many more cycles than necessary while using a simple example in Knuth's books shows how to do it in one (such as bit shifts).

    --
    Custom electronics and digital signage for your business: www.evcircuits.com
  26. Re:Hell no by Pseudonym · · Score: 3, Interesting

    I've been programming longer than Knuth has, starting with machine language.

    If it's not a rude question, how old are you, exactly?

    --
    sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
  27. simple concept can be as complex anything by globaljustin · · Score: 3, Insightful

    They're completely correct.

    OP is being a bit flippant.

    Conceptually, the idea of using alphanumberic characters to give computers instructions is "simple" and getting a computer to do basic operations is fairly simple with a good tutorial or guide.

    The idea that the codebase for a web app like Yelp's website or a phone app like Snapchat is "simple" or "easy to learn" is of course patently ridiculous...I think it boils down to whether or not you give OP the benefit of the assumption.

    Seriously OP really didn't say much other than, "No it is easy"

    --
    Thank you Dave Raggett
  28. Re:Yes.... by eagl · · Score: 2

    Yes but. I used to declare variables overly large as a kludge to help out when error-trapping was consuming too much time and I knew that the compiler wasn't good with overflows. So I'd do input error checking up to the point where it started to take too much time, then declare a variable larger than reasonable input would be, and then attempt to trap and reject input at a length between reasonable input values and the declared variable size. Declaring a variable just larger than the input buffer was one specific way to address attempts to force overflows through buffer overruns. Yes it was a horrible kludge and can't survive any sort of dedicated attack, but it served to deter casual probes looking for exploitable boundary condition errors.

    Of course the better answer is to not use an OS and compiler that sucks so bad that the basic io buffers and basic overflows are exploitable, but sometimes you gotta use what you have.

  29. Yes, most of the 3 volumes by ihavnoid · · Score: 3, Informative

    I started reading them around 2001 and went through the three books, a little bit at a time. Went through most of the exercises with 30+ difficulty, but couldn't really solve all of them.

    A lot changed to myself - back then, I was a newbie undergrad programmer with undergrad-level math skills. Fast forward 15 years, I went through grad school and then couple of years of industry experience. My main programming languages moved from C++/Java to VHDL, then moved on to SystemC and SystemVerilog, and back to C++ with a bunch of bash scripts.

    So, did I get to use the knowledge that I gained from reading it? Not much, I didn't even have to write a single data structure or algorithm because there are perfectly good (or at least, good enough) libraries for most of the issues that I had to deal with. Neither did I have a good usage of the math courses I learned (remember things like Laplace transformation or L-U decomposition?), nor did most of the non-engineering courses I took helped much. Still, all of them helped shape myself on understanding the world and helped gaining problem-solving skills.

    Would I recommend it to other people? Depends, if you find your data structure and algorithm textbook easy enough and you want more challenging stuff, TAOCP is a perfectly good motivator to train yourself to solve complex problems. However, I think there are other ways to train complex problem-solving - e.g., a lot of advanced math/physics textbooks. However, for people who tend to fall asleep once they see those weird characters (and would rather live with pseudo-assembly code) TAOCP is a much better solution.

    If you want to learn practical programming skills, then don't bother reading.

  30. Re:Hell no by aldousd666 · · Score: 3, Insightful

    "Real programmers don't use PASCAL!" http://web.mit.edu/humor/Compu... I picture 110010001000 toggling the OS into the front panel while the rest of us have already bootstrapped the machine with kixtart a month ago. It's ok to stand on the shoulders of giants, but at the same time, it's good to look down and see how the foundation is you're standing on is really laid. There are times in my storied career where I have actually benefitted debugging c# or ruby code because I understood how parsing and execution worked. I have written better database queries in 4GL by knowing what was happening on the metal. So, before you get overly dismissive of knowing soup to nuts, I'd say that you should be aware that YES you can get by without it. But knowing the whole shebang, all the way down to the machine code, at least in broad strokes, DOES help you out occasionally, if not all the time.

    --
    Speak for yourself.
  31. Yes, I have. by aglider · · Score: 2

    And You should as well. It would give you the right knowledge to understand the whys and the hows.

    --
    Sent as ripples into the electromagnetic field. No single photon has been harmed in the process.
  32. Re:Used to be that if you found *any* error ... by thestuckmud · · Score: 2

    My check from Knuth, for finding an arithmetic typo in Vol. 2, is for the amount of $5.16 which includes accrued interest.

    Regarding the original question: These books are fantastic, but they are challenging and the bit-miserly focus does not map well to today's typical programming needs. They are frankly too detailed and difficult for many readers. My advice is have a look at them and decide whether you need them to complete your life. If so buy the set and enjoy! If not, you probably won't miss them.

    Just don't ask for mine. I'm keeping these books.

  33. Parts of it by dcollins117 · · Score: 2

    It's not like a novel you read front to back. If you need an algorithm you look it up.

    I had to write a math library for a DSP that didn't have compiler support yet. TAOCP came in handy then. The parts I did read I went over again and again and once again. It wasn't fun by any means.

  34. eternally incomplete by definition by Anonymous Coward · · Score: 2, Funny

    He hasn't even started volume 7 on APPing APPs in APPOS 10.

  35. Separation of Concerns by luis_a_espinal · · Score: 2

    'supposed to be" ???

    clearly you haven't been paying attention. All the attack vectors we currently have in code are because of the lack of coders, er, uh, sorry, I know you prefer the term 'developers' these days, don't do any-damn-thing about doing inputs testing or overflow, invalid input, etc.

    So, don't climb on your high horse and lecture about how the 'best textbook' doesn't teach a damn thing about them, when that led to the code we now have to try to make secure.

    So, also, if all that is, "... a given...", then why is none of it done reliably????

    Ramble ramble, gurrr gurrr, hear me roar.

    Oh, I've been paying attention. A significant chunk of my professional experience (22 years) has been involved in secure programming and in scanning and fixing vulnerabilities left by accident (or more often than not, by incompetent developers) in the commercial and defense sectors. I'm not exaggerating that my entire career has been devoted to fixing other people's fuck ups. So when I say something it is (most likely) because I have some experience in the matter. I am not an authority in the matter, nor I claim to know it all, but I sure make sure to check my premises when I speak.

    People are sloppy, plain and simple. Cobbling security concerns in an algorithm book accomplishes nothing. There are tomes and tomes of material out there regarding secure development, security and what not. There are online encyclopedias devoted to secure programming in, say, Java or C/C++. A entire web site (https://www.cert.org/secure-coding/) is devoted to canonical attack vectors and remediations. There are industry standards out there, for anyone to read, regarding secure coding. Take the MISRA C guidelines or the Ada Ravenscar Profile for examples.

    If people aren't bothered to even do a fucking google on the most common attack vectors when developing a web site or a device driver, what makes you think they will pay attention when technology-specific secure coding details are embedded in text designed for mathematical description of algorithms?

    It is called separation of concerns. That exists for a reason, and any secure developer worth a damned shit knows why. Separation of concerns does not mean ignorance of concerns. The fact that you do not know the importance of this (and its implications) made me suspect the quality of the work you (if you do any work at all.)

    You do not pick a book about Operating Systems or Hardware Architecture and expect a description of routing protocols, do you? If you pick a book on security, say, attack vectors or public key infrastructure, you do not expect to find a discussion on lower or upper bounds for a distributed hash algorithm, do you?

    Same deal with security. You pick a book about security, and you study it. You pick a book about algorithms and you study it. You pick a book about operating systems, and you study it. You pick a book about networking, and you study it. And so on, and so on. And you do so throughout your studies and continue to do so throughout your career.

    Expecting all shit to be cobbled together in the same book gets you one of those mediocre "Be a Rock Star Programdude in 24 Hours" kind of a deal.

    Sorry to bust your bubble, but it is people like you that litter the software industry with crap that the rest of us have to clean. I guess I should be thankful for it, because fixing shit written by others (specially when it is critical) can be a financially rewarding experience.