I have to start by saying I have a "love/hate" relationship with this book. It's one of the absolute best Graphics Programming books I've ever read, and it's one of the worst XNA books I've ever read.
I would consider myself an advanced student of XNA. I teach others XNA. I answer other people's questions on XNA forums. People rarely are able to answer my questions in the forums, and I ultimately end up answering my own questions in the forums a couple of days later. I've programmed in Assembler and C++ and I'm reading advanced computer graphics books for C++ and DirectX along with this book. On the other hand, I'm reading this book because I'm studying HLSL and don't know how to do a lot of what this book teaches.
Let me start with the bad. First of all, I own a few books from this publisher, and I have to say that I firmly believe that this publisher is a couple of frat boys publishing out of their basement. They are by far the most unprofessional publisher I've ever seen in my life. Fortunately, this book is one of their better ones. However, the publisher published this book in spite of all of its faults. Furthermore, the book doesn't include source code. The publisher couldn't be bothered to add 30 cents cost to the book and publish it with a CD. Instead, they make you go to their website and give them your email address to get the source code. That's not that unusual these days, and they have the "excuse" that it would allow them to update the source code where a CD would not. Except they don't seem to be concerned about problems with the source code; half the example programs I downloaded from them would not build. I was able to get them to build by redefining the References for the code and the content and fixing a couple of other minor problems. But, it's a bit unprofessional to expect those learning to be able to fix the problems with your code. I blame that on the publisher. I also blame the publisher for not insisting that the author be more professional.
My biggest complaint is that the author really doesn't explain a lot of how things work in the book. If there is any hope for someone to learn from this book, it is in downloading the example programs, fixing them, and then reverse engineering them line by line until you understand them. Without doing that, there is no way someone who doesn't already know how to do what this book teaches is going to learn it from this book. The book itself is often little help in understanding what is being taught. It gives very high level cursory explanations that maybe give you a vague concept of what is being taught, but it often ends up teaching you nothing in the end. I seriously doubt anyone who is new to the topic is going to be able to write their own code that does this after JUST reading the book without reverse engineering the code.
So, in order to learn from this book, you WILL have to download, fix, and reverse engineer the example programs. Once you do, you will have a small nightmare on your hands. First of all, the author writes very few comments in his code. The code does a poor job being self documenting. And for code where the only way you are going to learn is from reverse engineering the code, it's just simply not acceptable for educational code to include few, if any, comments. The book doesn't explain the code in many cases, and neither does the comments within the code.
And to make matters worse, the projects downloaded from the publisher include massive amounts of extraneous code and files. Entire files, within the project, can be completely deleted from the example code and it will not change the way the program runs AT ALL. A lot of it is code from other examples in the book that is completely disconnected from the code for the given example. It's just there confusing you as you try and reverse engineer the example. Remember that the only way you are going to learn anything here is reading the code line by line, and then realize that a lot of the code isn't even connected to the program, let alone part of illustrating the lesson.
Within the code that is required, much of it is either bypassed and unused or not relevant to illustrating the current lesson being taught. The code is extremely convoluted in terms of educating people and staying focused on the lesson currently being taught.
The hardest part of reverse engineering this code is trying to figure out which parts of the code are needed and which parts could be removed or rewritten in a MUCH more simple fashion and still have the program do the exact same thing.
In short, the author is a terrible educator and the publisher published the book anyway.
So after that scathing review, now let me explain why this is one of the best Graphics Programming books out there, let alone one of the best XNA books ever published. In spite of all it's very serious problems, this book simply covers topics that I've never been able to find in any other book or tutorial ANYWHERE. And I mean, not only for XNA, but C++/DirectX graphics programming as well. And let me tell you, the book does such a poor job explaining and the example code is so hard to reverse engineer, I've bought several hundred dollars of advanced graphics and rendering DirectX/C++ books and spent countless hours Googling trying to find someone else to explain the same thing to me, and I just haven't seen these important topics explained anywhere else. (I own just about every XNA 3.0 and 4.0 book ever published and none of the cover half the stuff in this book at all. These are subjects in advanced 3D graphics books for professionals.)
Even if the author is getting paid for it, you have to salute him for being willing to share with people some things about 3D programming that you will DEFINATELY need to know that just really aren't explained anywhere that I've been able to find in the past couple of weeks LOOKING all over the Internet and every book published on the subject I can find.
But keep in mind, this book is not REALLY an XNA book at all. 80% of the book is teaching High Level Shader Language(HLSL), not XNA. XNA is used to call HLSL in the examples, but the author could have used C++ and 80% of the book would remain completely unchanged. So, needless to say, this is an ADVANCED XNA book. XNA programmers tend to be students of graphics programming, where C++ programmers tend to be more on the professional side, and this book probably has a few things to teach C++ programmers about using HLSL and game programming. So, for beginning game programmers it's a rough book that does a terrible job teaching an advanced subject that you NEED to know.
You could write professional 2D games for years without knowing anything in this book. It's really for 3D XNA students learning about HLSL. Or HLSL students programming in C++, or any other language (although you may have to learn XNA to get full value out of the book, especially since even the C++ programmers are going to have to reverse engineer the XNA code to get anything out of it).
I would definitely recommend this book to anyone studying HLSL in XNA or C++, in spite of how much I hate the book. Just realize that you're going to have to reverse engineer the source code that isn't even included with the book. But there are things covered in this book that you may simply not be able to find anywhere else. Stuff that you may use in almost all the 3D games you write from now on. It's just a shame that the author barely explains it in the book, and that reverse engineering the source code is such a nightmare.
So to sum it all up, you can't afford to not own this book if you are doing 3D XNA(or C++) with HLSL. Don't bother if that's not you. And realize, it's going to be like pulling teeth to actually understand all the lessons in this book.