Elaine Rich's Automata, Computability, and Complexity book is, to me, the CLRS of automata theory. CLRS never goes terribly deep into it's algorithms,...moreElaine Rich's Automata, Computability, and Complexity book is, to me, the CLRS of automata theory. CLRS never goes terribly deep into it's algorithms, but it provides an extremely wide breadth of material backed by solid explanations and clear prose.
While the Sipser book probably remains my favorite book on Theory and Automata, Rich's book definitely covers more, and definitely covers it at a slower pace, making sure not to lose students. Sipser's book is excellent as long as you can follow along, but if something comes along that doesn't make sense to you, the book offers you no assistance. Rich, on the other hand, takes more time to explain things to make sure they are clear. As a result of this slower pace and wider variety of material, Rich's book is certainly larger and more intimidating.
I think Rich's book makes for a better desk reference than a tutorial (like CLRS), though I have to note that Rich's writing style is excellent and clear, so it doesn't make for a poor tutorial text at all. Rich covers lots of complexity-related topics that Sipser barely mentions as well, so this book makes a great reference for basic complexity theory.
One complaint is that it, like Sipser and most other Theory and Automata books, introduces FSM and PDA before Turing machines. I acknowledge that this is more or less the standard order for academica, but I strongly feel that introducing TMs and computability/noncomputability first helps frame an understanding of regular languages and context-free languages that makes them more approachable and interesting. I can't really fault this book for doing what everyone else does, but I felt I had to mention it.
All in all, this is an excellent, expertly-written desk reference for Automata/Theory, and I highly recommend it to anyone interested in CS theory.(less)
Essentials of Theoretical Computer Science isn't your standard cs theory book. Almost every other theory book I've ever read, including the classic Si...moreEssentials of Theoretical Computer Science isn't your standard cs theory book. Almost every other theory book I've ever read, including the classic Sipser book, starts off with finite state machines, then builds up to pushdown automata, then covers turing machines, in a sort of "lets increase the power" manner. Once Turing Machines are covered, the books cover decidability and reducibility, and complexity.
Lewis's book almost completely flips this around, immediately jumping into Turing Machines, decidability, reducibility, and the difference between recursive and recursively enumerable sets. Afterwards, a more standard approach is taken, covering finite state automata, pushdown automata, and then linear-bounded automata. THEN complexity. Finally, the concept of a grammar is introduced, in the very last chapter.
At first, I was really skeptical of this ordering. It seemed completely backwards to me, but after reading through the book, I've completely changed my mind. This is the ideal order to present this material, and I now consider almost every other theory book to be fundamentally flawed.
Covering TMs first and discussing decidability in the first chapter provides an anchor point for every other discussion about other kinds of sets and automata. And saving grammars to the very end lets the reader focus us reducibility and closure properties of sets without muddying the waters with parsing or the Chomsky hierarchy.
In addition to the completely unorthodox and excellent ordering of the material, the book is extremely readable, written in a conversational, occasionally humorous tone. Proofs are simple and straightforward (as well as ample) and usually followed by a practical example as well to help solidify concepts. Despite the strangeness of the book, I highly recommend it for undergraduates and graduates studying CS Theory.
To make things even better, the entire book is completely free as an eBook from the author on his web site. If you have an interest in CS Theory, you owe it to yousrelf to read this book, which you simply can't beat for the price.
Introduction to Cryptography with Coding Theory is a very math-heavy, but excellent and readable text on Cryptography.
As compared to the standard text...moreIntroduction to Cryptography with Coding Theory is a very math-heavy, but excellent and readable text on Cryptography.
As compared to the standard text, Applied Cryptography by Bruce Schneier, ItCwCT is very light on implementation details and code examples, and much heavier on the fundamental mathematical basis for various encryption schemes.
Normally a book that skews this heavy toward the theory is one I won't like, but ItCwCT avoids the mistake of many other theoretical textbooks by providing many examples of applying the theory (it just does so in terms of math, not code), and is extremely readable and well paced. Very rarely did I feel confused by the text, and overall I think the ideas are presented very well.
ItCwCT is wider in scope than Schneier's book as well. Applied Cryptography deals with the basics of cryptosystems such as DES and RSA, then gets right into implementations and source code. ItCwCT establishes the foundational basis of the text early on with a primer on essential number theory, talks about some simple cryptosystems such as substitution ciphers and block ciphers, then goes deep on topics like AES, DES, RSA, Signatures, Digital Cash, Secret Sharing, Games, Key exchanging, Information Theory, Elliptic Curve Cryptosystems (not covered at all in Applied Cryptography), Error Correction Codes, and Quantum Cryptography. Most of these topics get a brief mention, if any at all, in Schneier's book, and ItCwCT goes very deep in all of these topics.
I think Applied Cryptography works well as an introduction to cryptography, maybe for Undergrads, but ItCwCT works much better as an advanced, graduate text, while remaining readable and understandable even for undergrads.(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)
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...moreDraft of Algorithm Design:
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 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)
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.