Those of you familiar with the general form of a Complete Idiot's Guide will know what to expect from this book. This one sets out to teach the complete novice how to program in C# but actually teaches them C# while avoiding teaching them to program. This is a common failing. Authors confuse the process of writing syntactically correct source code with the process of writing a program. All that source code does is to express your solution to a problem in terms of a computer language. That is the easy part. The hard part is teaching the newcomer how to crystallise their ideas into a form that can be expressed in a programming language.
By the time you have finished reading this book you will have a reasonable idea as to how to write syntactically correct C#. You will have reached, in programming terms, about the equivalent of being able to write 'The cat sat on the mat." The unfortunate thing is that you do not need the whole panoply of a modern computer language in order to write a novel program that means something to you. Indeed much of the mechanism of a modern language gets in the way of the newcomer trying to do just that.
I was recently discussing the difference between a book aimed at teaching a newcomer to program and one aimed at teaching someone a new language. One of the participants commented that the trouble with newcomers is that they kept wanting to know what something was good for, while those who already know another language keep wanting to know why you do not do it that way. I think many authors would be well advised to think carefully about that.
As I worked through this book, I kept hearing the ghost of a student muttering 'But what use is it? What problem does it solve?' The fundamental problem with this book is summarised by the front cover where it says:
Expert advice for both beginners and advanced programmers.
The style of writing would drive the average advanced programmer up the wall. On the other hand breadth of information would simply leave the average newcomer mired and confused as to how to write a program that did something that was actually useful.
If you have some knowledge of programming and have written successful programs of your own design in at least one other language but you do not consider yourself an experienced programmer then this book might work for you. But if you really have no programming background you will need to look elsewhere and if you really are an advanced programmer you would not appreciate the style of this book.