Used price: $6.25
Collectible price: $6.50
Used price: $28.50
Buy one from zShops for: $34.70
If I had to rate the book overall, I would give it an "average" rating, as the book just doesn't seem to stand out among all the other titles available. The book seems to fit best with a specific audience. People who would benefit the most from this book are intermediate-level C# programmers, who know very little about object oriented design patters.
If you are a beginner with C#, this book is not for you. The Basics of C# are covered very quickly in the first 7 chapters, but does not go into detail enough to help novice programmers. In fact, I cannot understand why those chapters are included at all. The materials in those chapters breeze over the C# language too fast for C# beginners, but at the same time, it is far too basic for those who have experience with C#. Beginners would be better suited picking up a introduction to C# book and working with the language for a little while before reading C# Design Patterns.
Intermediate C# programmers with little knowledge of object-oriented design patterns will develop a new skill set from reading the book. The everyday usefulness of these design patterns makes a book on the subject a very worthwhile read. If the reader is already familiar with C# than this book is a good choice from them.
The code samples presented in the book are well constructed and the accompanying CD provides has provided benefit whenever I wanted to see a full code listing. For certain code listings in the book, I would have liked to see a few more comments. Sometimes, it takes a little while to understand exactly what the author is doing with the code. The screenshots and figures do a very nice job representing the concepts visually.
One of the best attributes in this book is the thought questions at the end of the chapter. They really get the reader to think and make sure they understand the concepts before continuing. Having a through understanding of each pattern is crucial as later patterns either build or use patterns which have already been learned.
People who have read James Cooper's previous works such as Java Design Patterns or Visual Basic Design Patterns or Design Patterns by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides really do not have a need for this book. This book covers all of the same material as those other works.
I have noticed several typos and minor mistakes throughout the book, which is getting far too common in technology books in general. With that aside, I would recommend this book to anyone who knows a good bit of C# and would like to learn about Design Patterns used in Object Oriented programming. I would also recommend that these people skip the first 7 chapters or quickly skim over them. As for anyone else, I would suggest passing on this title, and getting a book that caters to design principles in a language they are more familiar with.
The first part of the book covers the mere basics of Visual Studio .NET, the C# language, object programming concepts and UML diagrams. I feel this section is not necessary since there are abundant books available.
I'd also like to see in future editions a heavy-duty application designed throughout the book using most, if not all of the 23 patterns. -- Review by Timothy D.
OOP addreses one of the real shortcomings of C# and VS.Net--their Visual Basic heritage. Visual Basic was certainly easy to use; slap some controls on a form, add some code to the controls' event handlers, and you had yourself a working program. The problem is, this simplicity encouraged really ugly programs that couldn't be changed or extended. To use a house analogy, you couldn't simply repaint your kitchen. You had to tear it down and build a new one.
That's one of the main reasons why VB developed a reputation as a 'toy' language, and why 'real' programmers turned to Java in droves. It offers much of the simplicity of VB, but it encourages the creation of cohesive, loosely coupled objects that are easily extended, maintained, and reused.
C# has retained almost all of VB's simplicity, with predictable results. C# web sites are full of slapdash apps that whip up a few forms and plug in some code. C# is in real danger of becoming another toy.
And yet, C# offers a rich set of abstaction tools. With these tools, a developer can create real applications, in a fraction of the time required to do it in C++. The same language can be used to build junk, or really elegant applications.
The key to using C# effectively is OOP. The 'Gang of Four' (GoF) design patterns discussed in this book provide proven solutions to common OOP issues. If you understand the GoF patterns, you have a good understanding of OOP. It's that simple. And that's what Cooper sets out to provide.
In the first seven chapters of this book, Cooper does as good a job as I have seen of introducing C# and OOP. If you have no previous experience with OOP, you will probably need another book to get you started. I'd recommend 'Object Design' by Rebecca Wirfs-Brock. If you have been exposed to OOP, but you are not fully conversant with abstraction and its role in your designs, I strongly recommend 'Agile Software Development' by Bob Martin.
Those books will prepare you for Cooper's explanation and demonstration of the 23 GoF patterns. Cooper recommends getting the original GoF 'Design Patterns' book (Gamma et al) to use as a companion reference, and I think that's a good idea. What Cooper does best is describe how to implement the patterns in C#-- how to get from design to working code.
This book has been criticized for the style of its pattern implementations. Some reviewers consider them simple Java ports, and others have criticized the fact that they do not always use all the bells and whistles provided by C#. I agree that the implementations owe a lot to Java, and I might even go so far as to consider them ports.
And that, I think, is one of the book's great strengths. For it results in code that is highly portable between Java and C#. Even if you are married to C#, you will at some point have a client who is just as married to Java. Reusing your C# components is going to be a lot easier if you follow the sort of cross-platform style in this book. And if you are a Java programmer considering C#, it makes this book a great reference for migrating pattern-based solutions from Java to C#.
I have a few quibbles with the book, but these are mainly editorial. There are code listing typos, but apparently no web site with corrections. The UML editor provided on the CD-ROM to read its UML files doesn't seem to read them. And the UML editor is a much weaker editor than several other UML editors on the market. I would not consider it a top-tier product.
Subject to these reservations, I would strongly recommend this book to anyone learning C# and OOP. I wish it had been around a year an a half ago, when I was trying to learn both at the same time.
List price: $14.99 (that's 30% off!)
Used price: $5.99
Buy one from zShops for: $5.39
Used price: $10.98
Buy one from zShops for: $10.98
For example, on page 54, in the explanation of the Builder pattern, it is stated "The simpler of the two builders is the list box builder." Then further down the page, the author contradicts himself by saying "The Check box builder is even simpler."
On page 99, the paragraph reads, "The problem of replacing the Employee instance with the Boss instance means replacing a Vector element with a new one using the setElementAt method." This paragraph seems inappropriate since there is no setElementAt method in the code listing. What is he talking about?
There are other typos too numerous to mention.
Some of the examples are overly complex. For example in the Chain of Responsibility example, he uses a previously created adapter pattern which is unnecesary to understand the Chain of Responsibility pattern.
I was using this book to make sure I had a good understanding of patterns as they are used in my Java Developer Certification project. I will need to consult other sources to confirm what I read in this book. One looses confidence in an author when there are so many errors.
If you want to read this book for yourself, you can buy my copy of the book on e-bay. I'll be listing it soon.
As "A Tutorial" the text quickly explains what Design Patterns are, introduces UML and gets on with teaching the patterns. Each pattern has at least one example with its Java code described. Some of the examples, like those involving swimmers, seemed a bit esoteric, but they all illustrated their patterns sufficiently. The text only shows the Java code that illustrates the design, other code required to run the example is thankfully hidden away on the CD-ROM.
The best thing about this book and about design patterns in general is that it takes your OO understanding up another level. If you are familiar with the basic OO principles of inheritance, polymorphism, etc., then you know how to build objects to meet your needs. The design patterns illustrated here takes you to the next step to show you what you should build to solve particular problems. It doesn't do your thinking for you, you still have to implement your own solutions, but now you're not lost in the woods as at least you have a place to start.
What would have been even nicer if the book hadn't been loaded with so may typos. Most of them are very minor, but their sheer abundance is annoying at times. Specifically, the code examples are fraught with inconsistent indenting and bracketing that can make them very difficult to read. Also, the inclusion of the JVISION tool on the CD-ROM would have been welcome (or even a URL where it could be found) as the text makes frequent use JVISION produced UML diagrams. A demo version of JVISION can be downloaded from www.object-insight.com.
To clarify an issue raised by a previous reviewer, an Appendix A, mentioned in the preface, does not exist, but its content, a JFC tutorial, is covered in Section 5 of the text -- another minor, but avoidable, mistake.
If you are waiting for the perfect design patterns book then Java Design Patterns will disappoint, but you are probably in for a very long wait. This book gets you over the hurdle of initial understanding and for that it should be praised.
Used price: $44.36
Buy one from zShops for: $49.03
This is only half of the book, however. In later chapters, he examines complications to his model to see how they affect his derivation, and upon this basis makes some suggestions about how logic as a discipline should be practiced. Although a simplification, I think it is fair to say that he would like further reasoning about logic to be descriptive, to show how we should think in light of biology instead of some
The major annoyances from this book come are in its tone: the author constantly compares himself with Copernicus, Newton, and Einstein and calls his thesis "scientific," even though it is based in no way upon empirical data, or even "evolutionary theory," as he claims. Like many theorists with radical conjectures, he chides (unnamed) people for trying to think of situations in the world that could actually test the hypothesis, and the empirical arguments he does refute are obviously straw men.
The least satisfactory part of the book is the identification of an ill-defined concept of fitness (which the author himself says he doubts) with subjective utilities. In particular, he postulates intelligence to be evolution by other means by imposing on human judgment that the limit of subjective probability assessment be objective probabilities and the limit of utility (happiness) assessment be evolutionary fitness (more or less, fertility rates).
Were this book less expensive, I would think about using it in a freshman or sophomore-level logic class in conjunction with Flew's _Thinking About Thinking_. Its earlier sections are a good introduction to the connections between differently levels of mathematics, its various discussions of plausible inference and subjective probability are accessible, and its later interpretations show logic to be alive in a way that could encourage students.
Usually, I wouldn't recommend it to the general reader, however I think that because of currently fashionable academic trends, it is likely that Cooper's theory or one very much like it will become very popular in the coming decades, and it might behoove an interested party to be familiar with it beforehand.
Used price: $11.65
Collectible price: $13.22
Buy one from zShops for: $11.99
Used price: $24.08
Used price: $30.00
Collectible price: $21.18
Cooper identifies four factors that animated the "politics of slavery": the institution of slavery itself, southern parties and politicians, the political structure of the South, and the values of white southern society. Cooper would certainly agree that the North and South were culturally different in the antebellum era. He describes this sectional difference in political terms: local issues predominated in northern politics, whereas slavery dominated southern political discourse. Conditionally, southerners viewed parties' roles differently than did their northern counterparts--southerners relied on the national parties to work for the preservation of southern rights within the nation. Local issues were irrelevant in the South, Cooper argues repeatedly, compared to the indomitable politics of slavery. He rejects emphatically the common belief that economic matters defined party politics in the era of the second party system. Cooper dismisses the crucial significance of economic and diverse social issues at the local and state level by placing over each such issue a mask of proslavery. Specific issues emerged and faded, he argues, but slavery remained always at the core of each one. He does not seek to understand just who became Whigs or who became Democrats or the reasons why, for he sees in the South a unified system of political thought. Cooper's argument is almost circular: the drive for southern rights shaped the national party structure, but this selfsame party system fostered sectionalism within the parties and essentially destroyed the second party system. Cooper insists that the Democrats enjoyed political hegemony in the South in the late 1850s because no new party could replace the Whigs under the unspoken rules of the southern political system; the existence of anti-Democratic voters--who were a large minority of the southern population--and the existence of local issues could not subsume the slavery issue in politics. Cooper relies mainly on data from Presidential elections, ignoring nonpresidential contests at the state and local level. This approach prevents him from acknowledging the lack of unity and order in southern politics. He refuses to admit the existence of discord not only between but within parties, and he is blind to any evidence that the South was anything but unified in proslavery ideology by the 1850s.