The standard AI text is Artificial Intelligence: A Modern Approach by Russell and Norvig, but I'd like to argue that Elaine Rich's AI book is better i...moreThe standard AI text is Artificial Intelligence: A Modern Approach by Russell and Norvig, but I'd like to argue that Elaine Rich's AI book is better in many ways.
First, it is shorter, and it covers less. While that makes it less suitable as a desk reference than the Russell/Norvig book, it makes it perhaps better as an introductory text, as it's a bit more focused, more content to cover "core" AI rather than comprehensively cover every aspect of the field like Russell/Norvig.
Second, and this may run counter to what a lot of people may say, but frankly the Rich book is simply more readable. She's a better writer overall, and lays out the material in a way that I think is more instructive and more informative. I think that, as an introductory text, this book works much better than Russell/Norvig. Despite Russell/Norvig devoting more overall text to explaining any given topic, I think Rich's coverage of the same material tends to be clearer.
There's no denying that nothing is going to knock Russell/Norvig from it's throne any time soon, but I have to suggest for any professor teaching an introductory AI class to at least consider Rich's book, which as a student I found helped me with the material much more than A Modern Approach.
I've seen a lot of complaints about this book being overly formal, grounded in theoretical material too much. As a theory-focused student, I actually liked that, and I think a lot of the complaints are from students who just wanted to build Quake bots or something. Besides, Russell/Norvig is just as formal, if not more so.
It's an Algorithms book. So I know what you're thinking "why would I read this book, when the standard text on Algorithms is CLRS, which is in fact so...moreIt's an Algorithms book. So I know what you're thinking "why would I read this book, when the standard text on Algorithms is CLRS, which is in fact so popular that nobody even refers to it by name, but simply as 'CLRS'?" Bear with me here; Algorithm Design is better than CLRS.
Now, it's not as COMPREHENSIVE. If you want a reference book to sit on your desk for later use, by all means use CLRS. CLRS is a great book to pick up, flip to the index, find the thing you're curious about, and read the relevant section on it. Virtually everything you encounter in Algorithms is in that book.
Algorithm Design isn't that way. There's tons of stuff in CLRS that isn't even touched on in Algorithm Design. Basic data structures like stacks, queues, heaps, trees, and such are not taught at all. You're expected to already be familiar with these concepts, since they should be covered in a Data Structures course, not an Algorithms course.
That's it. These topics tend to show up in graduate courses more than undergrad courses, so if you're an undergrad, this probably isn't the right book for you. But if you're taking graduate algorithms, this book is fantastic. The reason why is that Algorithm Design doesn't merely cover those 7 topics, it annihilates them.
The presentation of each topic is so well-covered, so perfectly-paced, so thorough, and so readable, that you almost forget you're reading a textbook. Topics are introduced slowly and gradually. The authors write in a readable style unmatched by any other algorithms book I've ever read. While you are reading, the authors may make a claim. As soon as they do this, they immediately prove it true. The proofs are just as readable and followable as the rest of the text. I never felt lost or confused with this book, it was like having an excellent professor close by at all times. Each section is packed with examples - it's not enough to prove something true, Algorithm Design also delves into enough examples that it makes things extremely clear.
My only real complaint is that, in the name of readability, sometimes the book authors deviate a bit too far from standard terminology. As a quick example, proving a Greedy Algorithm to be correct, one must illustrate that it exhibits a) The Greedy-Choice Property and b) Optimal Substructure. These names don't really tell you what they are, so the authors refer to them as the "staying ahead" properties. This works well within the confines of the book because the argument is that the greedy algorithm "stays ahead" of the optimal solution, but I can easily imagine a student using that terminology getting confused looks from peers who learned with other books.
Otherwise, AD is a fantastic book that I cannot recommend highly enough for people studying algorithms within the confines of the limited subset of what the book covers.(less)
It's a textbook on Operating Systems. There's not really all that much to say about it beyond that, so instead I will compare it to two other OS textb...moreIt's a textbook on Operating Systems. There's not really all that much to say about it beyond that, so instead I will compare it to two other OS textbooks that I've read, "Operating Systems: A Modern Perspective" by Gary Nutt and "Modern Operating Systems" by Tanenbaum, generally regarded as the seminal textbook on the subject.
OS Concepts is, to put it bluntly, very dry. This is somewhat expected with a book on Operating Systems, but the level of dryness is worth noting. I often found the book difficult to stay awake reading. Compared with Tanenbaum's book, it's slightly less dry and occasionally more conversational, but it doesn't come close to approaching Nutt's book in terms of presentation and readability.
OS Concepts also has a strange tendency to rapidly switch from being extremely detailed and getting into very low-level mechanics to being almost humorously broad. In one chapter I was looking at detailed drawings of how virtual memory works in operating systems, and a few chapters later I was reading about what a virus is and how you should use tapes to back up important files. The tone is all over the place, with some chapters feeling like "Operating Systems for Dummies" full of advice for how to effectively USE your computer and pick good passwords, and other chapters feeling like lengthy tomes on how to effectively DESIGN an operating system. These shifts make the book significantly harder to read, because it's dangerous to skim through a section that seems basic, as it may often contain important details as well.
One key advantage of OS Concepts is that each edition comes in two flavors: regular and Java. Initially I had hoped that the Java version of the book would be the same book, simply using Java for code samples for familiarity with Java programmers. Unfortunately, while that is occasionally true, more often than not the book is simply the regular OS concepts book, with a few Java-specific sections tacked onto the end of each chapter.
Overall, it's not a bad book, but I don't really see the audience for it. If you want the nitty-gritty, classic detail of OS design, you should probably stick with Tanenbaum's classic text. If you want a more conversational, readable Operating Systems book (with just as much information), it'd be better to stick with Nutt's. Silberschatz's book falls somewhere in the middle, and is therefore as effective as neither.(less)