I know this is all ‘judge a book by its cover’, but I was really disappointed in the second edition. It’s super cheaply printed compared to the first.
Black, thin, warped, glossy cover stock instead of that super nice feeling matte white one, and much thinner nastier paper (despite being longer the book is much thinner).
I have in the past given copies of ‘Code’ to people who’ve seemed interested in learning about computer science/engineering with a ‘this book is so good!’ and upon reflection just now I’m ashamed to say I’ve stopped doing that because the book _feels_ like a cheaply made textbook rather than a nicely presented popular science book now.
I've mostly stopped recommending O'Reilly books at my public library because in many cases the printing has been so bad, it's embarrassing. Just-in-time manufacturing, I guess.
It's not like the old days when books were heirlooms with attentive layouts, quality paper and ink, and solid bindings. Addison-Wesley's offerings come to mind, even softcover books from Prentice-Hall. And especially the ancient Computer Science Series from McGraw-Hill College.
Manning and No Starch do a better job these days.
Here's a new hardcover many here could appreciate:
Heavy Wizardry 101: Shellcodes, Backdoors, Droppers, and Worms
I had some similar ideas for an assembler targeting MIPS, I wanted to use symbolic names, reserved within called scopes, and have the assembler find an allocation or error (requiring an explicit decision of what to spill), didn't find relevant examples at the time (circa 2018). Ultimately I decided I was wasting too much time on the assembler and went with global allocations for the most part.
Same, seeing the title and having not read Bradbury for a long time I was thinking either The Veldt or that one (The Long Rain). I did remember it on reading, though, and it's an unsettling feeling.
Well, yes, which is why they don't measure it your way, as it doesn't lead to discovering anything interesting about computation to have a shortcut like that. Or if they do it's part of a larger analysis, called an oracle machine.
Maybe I'm not communicating the point clearly. In order to use a table to do the whole multiplication it has to be much larger than the largest number you would want to multiply with it. A lot of the analysis of algorithms, especially multiplication as discussed here, is about astronomically large numbers, so you don't want the existence of an even more astronomically large table as a prerequisite.
We are talking about mathematicians. We are not talking about computer engineers trying to implement a physical GPU that can multiply matrices as fast as possible. You don't have to physically build the astronomically look up table by hand. One can simply state that it exists. Proofs do not have to be clean to be a proof. You might not "want" something in a proof, but if it works then it works.
What you are stating is simply that any algorithm whose inputs are bounded can be solved in O(1) time with a lookup table. That's known and obvious, which makes it not interesting.
Moreover it only works with bounded inputs. If your input is unbounded (as is this case with multiplication over arbitrarily large numbers) then an infinitely big lookup table is just not possible because it's part of the algorithm and hence needs to be finite.
If infinitely-big lookup tables were allowed you could for example write an algorithm that solves the halting problem, just index into the lookup table for its solution. And actually you could do this for any problem! So any problem, even so called "non computable" ones, admit a solution that runs in time linear to their input. I hope you see that this is nonsensical and it's why lookup tables are considered part of the algorithm and hence need to be finite.
> You might not "want" something in a proof, but if it works then it works.
And at the same time you don't get to change the definition of algorithm to allow your "proof" to be valid, otherwise you're just talking about nonsense.
>And at the same time you don't get to change the definition of algorithm to allow your "proof" to be valid
It is other people who are trying to attack my statement who are trying to apply words like "algorithm" to it. You have such a fixed view of how things operate that you are failing to be able to take a step back and accept the existence of being able to solve any problem in a single step. You can claim that it is obvious, and trivial, and uninteresting, but that doesn't invalidate it. Sometimes thinking outside of the box is required and such strict adherence to what has come before can cloud your view of an "obvious" solution that was there the whole time.
> You can claim that it is obvious, and trivial, and uninteresting, but that doesn't invalidate it. Sometimes thinking outside of the box is required and such strict adherence to what has come before can cloud your view of an "obvious" solution that was there the whole time.
Then sure, go ahead. Define your own model of computation, one not based on turing machines and which somehow allows for infinitely big lookup tables, and then see what great insight it provides you.
I wonder discoveries you will be able to make in a system where you can say that the solution of a problem is just its solution.
Agreed that Code is great! I'll pick up the second edition some day if I ever see it on a bookshelf.
reply