I bought this book last October, but I didn't have the time to read it until two months ago. I started reading it, and since I have knowledge in C# and C++, I found this book very easy to read, but while I was on that, I saw the concepts that were impossible for me to understand back when I was learning C++.
It seems that authors many times make the mistake of assuming that readers know some basic concepts about the book, but that's not really the case. I have been reading programming books for over 2 years now, and they always make the same mistake: They assume we have an idea of what a concept is, but in reality, we have no idea what they are talking about.
In this book, it was not my case, because I had to pick the concepts when I was learning C++, but I was able to detect what tends to kill beginners when they are learning a new programming language. And those mistakes are not good; not only they induce the reader to read the book in a "jumping" motion, but at the end, the readers, specially the beginner, has to use external resources to understand the book completely. Not all the basics are always covered in a beginners book, or at least they do not appear where they should appear.
When I say that the book induces the beginner to read the book in a "jumping", I mean the book says things like:
This class lets you deal with arrays. Don't worry about arrays now, you will see them in chapter X
At first, that doesn't look like a problem at first. It becomes a problem when the Arrays are mentioned over and over again in that section, saying what the class can do with arrays and how. Without knowing what an array is, you can't understand what that part is saying, so you "jump" to chapter X of the book to read about Arrays. You read about it, find other weird terms you can't understand at first, so you keep jumping through some chapters, until you can finally jump back to the chapter you were reading. Reading like this is a problem. It is confusing, and beginners will find it difficult. I know I would if I still was one.
A quick fix to this problem would be to give a basic explanation of the array (in this example, that is. This is just an example, the book doesn't do this with arrays, but it does with collections, indexers, interfaces, and others), and after the explanation of what an array is, just say that more details about them will be found in Chapter X. In that way the beginner reader will know what an array is, will be able to work with them, and understand what that section is about.
Never the less, this book does an awesome job setting a hard base on the reader, specially when the reader is question is NOT a beginner. I now know C# thanks to this book, and I didn't have to do much (though, like always, I had to look for external resources to fully understand everything the book was saying). It has a deep coverage on LINQ, which is essential when dealing with Databases with C#.
It has a lot of examples as well. The best way to learn by example, and Jesse Liberty did exactly that. He puts code, and then he explains the code in a clear manner. I can't remember examples that required "jumping" reader, so that is definitely a plus. It also does explain the concepts very well. While you have to jump to other sections to read them, at least the concepts are very well covered.
I recommend this book to people who have a deep understanding on C++ at least, rather than to beginners. It reminded me about what I found hard when I was learning C++, and if it wasn't because my knowledge with C++, this book would have been the same case. If you' have knowledge on C++ (or even better, Java), then you will be able to pick this book without too much problem.
|