Home
Events  RSS Feed for Upcoming Events
Directions
Job Opportunities  RSS Feed for Jobs
Members' Forum
Book Reviews
Software Reviews
Links and Resources
Member's Menu
New Member Registration
Contact Us
Premier Sponsors
Special Offers
 BOOK REVIEWS
 Reviewers, please read these handy tips for writing fun, informative reviews.
Visual C# 2005: A Developer's Notebook
by Jesse Liberty
Visual C# 2005: A Developer's Notebook by Jesse Liberty



Rating: 5 dots

Reviewed by: Adnan Masood
Review date: 11/16/2005

Best Delta Book on C# 2.0 Out There!

So, you are a seasoned C# 1.x developer very much looking forward to learning the lean mean C# 2.0? Great! But as much as you want to learn the new language enhancements, you despise the fact that any book you pick seems to start teaching you the same old things over and over again; all the features you already knew (or should know); the for loop, the if statement, basics of OO; and therefore you'd have to skip several hundred pages to get to learn a new feature...that is painful.

Like you, I was looking for a book that would teach me the delta, i.e. the differences and enhancements to the new language and not the features that I already know as a C# developer for several years. Written with this upgrade-only concept in mind, seasoned author Jesse Liberty's "Visual C# 2005" came to the rescue. As series creator Bret McLaughlin says "People don't have time (or the income) to read through 600 page books, often learning 200 things of which only about 4 apply to their current job.” This book is the right choice for today’s busy developer who wants the right value for his time.

From the very beginning, this book is focused on explaining generics, iterators, anonymous methods, partial types, static classes, nullable types, limiting access to properties, delegate covariance, contra-variance, enumerators, etc: Concepts you'd want to learn as these are new to C# 2.0. The next chapter talks about IDE enhancements (not necessarily a language feature but it helps), visualizers, refactoring and debugging tools provided with Visual Studio .NET 2005. It just gets better: Web apps, data-driven forms, asynchronous tasks, one click deployment...you name it. In a little over 200 pages, it is a concise upgrade guide to C# 2.0 and Visual Studio.NET 2005 enhancements to support this update.

A Developer's Notebook also talks about security controls, personalization, authentication, master pages, themes, and other ASP.NET enhancements you'd find ubiquitous in all ASP.NET 2.0 books, but without the fluff. I made myself sound almost like the marketing person for O'Reilly but the truth is that I found this book really exciting. As Bret further said "the often-frantic scribbling and notes that a true-blue alpha geek mentally makes when working with a new language, API or project. It's the no-nonsense code that solves problems...." See it for yourself; download the source from http://www.libertyassociates.com/pages/Books.htm and check out code samples, labs, and reference links.

I've also just recently attended Juval Löwy's workshop on Visual C# 2.0 at the DevConnections 2005 conference held in Las Vegas. Along with the conference notes handout, I used A Developer's Notebook as a follow-up reference. Example labs like CreateATypeSafeList, GenericEnumeration, and ImplementingGenericInterfaces were similar to some of the demos performed at the conference. Also, the author, Jesse Liberty is a Microsoft .NET MVP and author of Programming C#, Programming VB 2005, Programming ASP.NET, Programming .Net Windows Applications, and various other books, which explains why the book is so cohesive and contemporary.

Like any other book, it has some shortcomings too. For instance the level of detail in certain topics, but the link section covers references if you are interested in learning more about a specific subject. I think this comes hand in hand with being to-the-point and concise.

If you are not an existing C# developer or want to learn old language features over again, this book is NOT for you. However, if you want to adapt to the new awesome features of C# 2.0 without further ado, there is only one thing to do: Add to cart!


Top Of Page

Expert Service-Oriented Architecture in C#: Using the Web Services Enhancements 2.0
by Jeffrey Hasan
Expert SOA in C# by Jeffrey Hasan



Rating: 5 dots

Reviewed by: Adnan Masood
Review date: 11/04/2004

Practical, Developer-oriented, and Contemporary!

Long awaited Jeffrey Hasan’s Expert Service-Oriented Architecture in C#: Using the Web Services Enhancements 2.0 is finally out. Developing distributed applications has become an increasingly indigenous part of a present-day developer's software life cycle. XML web services provide us an easier and standardized way to facilitate distributed communications. Service orientation takes this to another level, i.e. standardizing loose coupling of these services via contracts. Hasan's book provides answers for today's enterprise needs to learn and formulate their existing distributed communication frameworks as they shift towards Service Oriented Architecture.

This book is about technology we can implement today; it's neither a superficial overview of terminologies nor is it a manager's guide or executive summary. Expert Service-Oriented Architecture in C# is the answered prayer of various developers like me who were looking for a book that comprehensively addresses SOA in Microsoft .NET and couldn't find much help. There are only a handful of books out there on this thriving discipline, Service Oriented Architecture, and most of them fall short in technical implementation details. Most importantly it answered my own skepticism of having another fancy TLA (three-letter acronym) and how it can change the way we program distributed apps today. You'll have to read it to get the answer. Hasan acquired a masters degree from one of the top ten U.S. schools and you'll see the academic excellence in his writing. His technical fluency, vocabulary, and in-depth explanation are salient features that give this cutting edge technology book priority over its counterparts, if there are any.

Expert Service-Oriented Architecture isn't just a good read about SOA but as its title depicts, also a great reference for WSE 2.0. Individual chapters are categorized in a way that each chapter covers a topic of interest; WS-Security, Policy Frameworks, WS-Addressing & Routing, Design Patterns, and so on. Therefore it provides an excellent reference for WSE 2.0, a fairly new release from Microsoft providing support for the latest developments in the Web Services arena. Examples in this book are simplified but not trivial, simpler but not marginal, and the style shows them coming from a software developer who has encountered real world application architecture challenges. Jeffery touched various important topics concisely which a developer encounters either in practice or theory; for instance RPC vs. document literal invocation, web services building blocks, digital signing with x.509 certificate, integrating web services and MSMQ, XML schema definition, etc. The last chapter, beyond WSE 2.0, I found very interesting since it addresses Microsoft's new breed of communications infrastructure built around the Web services architecture and code named "Indigo". WSE 2.0 is here for a relatively small period of time until Indigo kicks in with support for secure, reliable, and transacted messaging along with interoperability. However, future proofing the applications is what Hasan explained in this book, and you have to read it to know it--like Emerson said "Nature and Books belong to the eyes that see them."


Top Of Page

Applied Microsoft .Net Framework Programming
by Jeffrey Richter




Rating: 5 dots

Reviewed by: Jeff Phillips
Review date: 09/20/2004

If you wrote C++ code for Windows back before the Managed Code Era, chances are that you referred often to books written by the triumvirate of Windows programming authors: Charles Petzold, Jeff Prosise and Jeffrey Richter. Petzold’s Programming Windows was both the standard reference for the straight-C Win32 API and the best source of information on GDI. Meanwhile, Prosise’s Programming Windows with MFC was the definitive work on the Microsoft Foundation Class library, and perhaps the book most frequently cracked open by the typical C++ Windows developer.

Jeffrey Richter’s specialty was the Win32 kernel. His Advanced Windows and related follow-on books offered the best coverage of Win32 architecture and operating system services. They were the places to go to find in-depth explanations of processes and inter-process communication, threads and thread synchronization, memory mapped files, thread-local storage and hooks. They were as close-to-the-metal as one could get without going into the world of device drivers and ring zero.

In Richter’s most recent offering, Applied Microsoft .NET Framework Programming, he retains his unique system-level perspective. There’s very little discussion of application-centric APIs such as Windows Forms or ASP.NET. Yet it would be foolish to attempt to write a professional .NET application without reference to Richter’s book, as it adds the insight and depth necessary to write code that transcends what you can crank out using the typical copy-and-paste programming paradigm.

Not surprisingly, Richter provides in-depth coverage of .NET’s implementation of familiar object-oriented concepts, including types, exceptions, properties, methods and events. Two chapters are devoted to events: a how-to chapter with cookbook-style source code and explanations, and a later chapter that covers delegates, the type-safe function pointers through which .NET implements events. Other chapters detail more architectural features, including metadata, assemblies, garbage collection and AppDomains. I found the garbage collection chapter to be particularly useful, and plan to tweak some of my own managed C++ code to conform to a design pattern for object disposal that he recommends within that chapter.

More generally, you’ll benefit from Richter’s exploration of .NET’s tricky areas. These include boxing, where a primitive type gets promoted to an object, and unboxing, where an object gets cast to a primitive type, topics where his explanations are very informative. I also think you’ll like Richter’s objectivity: he’s clearly a fan of .NET and on-board with Microsoft’s managed code vision, yet is nevertheless quite candid when describing bugs and criticizing design flaws.

I’ll conclude by noting that Richter’s book is not the place to learn the C# language or basic .NET application programming. In fact, Richter’s target reader may have been the former Win32 C++ developer who has learned some C# elsewhere. If you’re new to C# and the .NET framework, you may want to start with the new Petzold book, Programming Windows with C#. Then as you become more proficient, and therefore more curious, you’ll find that a read of Richter will bring you to another level.


Top Of Page

Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions
by Gregor Hohpe, Bobby Woolf
Enterprise Integration Patterns on Addison Wesly Professional



Rating: 4 dots

Reviewed by: Sorin Gudea
Review date: 09/07/2004

The book focuses on systems integration using messaging. Among all the various technologies available to solve the integration problem, messaging appears to carry a lot of promise. Messaging enables separate applications to communicate and to transfer data: it is asynchronous in nature: it requires different approaches (e. g., the application logic is split up into multiple event handlers). Integrated applications run independently, yet coordinate each other in a loosely coupled manner. Asynchronous exchanges of data through messaging offer - despite somewhat increased complexities as compared to synchronous methods - increased reliability through retries, requests throttling and load balancing.

The book is intended for developers and integrators using various messaging products and technologies: Message-Oriented Middleware (MOM), Enterprise Application Integration (EAI) suites, Java Message Service (JMS), Microsoft’s Message Queuing (MSMQ), etc. It should be of interest to application architects and developers, integration architects and developers, and enterprise architects. The examples provided in the book are based on a number of different technologies (JMS, MSMQ, TIBCO, BizTalk). Yet, the authors managed to stay focused on the design decisions rather than the specific technologies. Numerous patterns – solutions evolved through experience and actual use – are provided to the reader. While the reader may be familiar with some of them, it is rather nice to have so many patterns grouped together as a consolidated reference. As the two authors state, this book is the result of a two-year community effort that brought together a large number of people: if anything, this ensured the correctness of the technical content. To quote one of the official book reviewers – John Crupi – "read this book and keep it by your side."

The organization of the book is as follows: the book starts by discussing asynchronous messaging and its advantages and limitations (Ch. 1-2); message channels and message control (Ch. 3-4); message properties (Ch. 5-6); message routing (Ch. 7); message conversion between different formats (Ch. 8-9); message monitoring and management in the enterprise (Ch. 10-14).

The book website has some interesting content to offer as well. Check it out when you have time. Available for download are sets of Visio 5 and Visio 2002 stencils containing 51 integration pattern icons; examples of code; and a PDF version of chapter 3 of the book. The stencils will save you precious time while helping make those Visio diagrams look better.


Top Of Page

VB.NET Database Programming with ADO.NET
by Anne Prince, Doug Lowe
Murach Web Site



Rating: 5 dots

Reviewed by: Michael McTaggart
Review date: 06/10/2003

This is one of the best, if not the best, ADO.Net book I have read. It covers most everything you need to learn to develop an application using ADO.Net. The book is relevant for beginning all the way through expert level developers.

It starts out with the assumption that you know nothing about databases and database programming. There is a good primer on client server systems, relational databases, and SQL. After the intro, it goes into the basics of ADO.Net. It then builds on that foundation and provides in-depth details of the syntax and usage of .Net database programming.

The authors are clear, concise, and explain things very well without being verbose or chatty. There are also many useful and relevant tips throughout the lessons. After you have learned the syntax and functions of ADO.Net, they give you two sample applications, an order entry Windows program and a vendor maintenance web app, that apply the lessons learned in the previous chapters. My one problem with the book is that the code samples do not contain comments, which would be useful with the sample apps. All examples and code are available for download. I haven’t done this yet so I can’t speak to how well the code works.

Besides ADO.Net, there are excellent sections on ASP.Net and N-Tier applications, but what I especially like is the chapter on Crystal Reports. Most every application requires some type of reporting but almost none of the .Net books I read cover the subject. This book devotes 30 pages to Crystal. I wish I would have read this book before I wrote my first .Net app using Crystal; it would have saved me a lot of time.

If you need to quickly get up to speed with .Net database programming, this is the book. It covers most every aspect of database development in a little over 500 pages and despite the complexity and detail of the subject, it is very easy to read and understand. I wish they would write a C# version! I recently converted to C#. It is an excellent book. My compliments to authors Anne Prince and Doug Lowe.


Top Of Page

SQL Server 2000: A Beginner’s Guide
by Dusan Petkovic
Osborne Web
Site



Rating: 5 dots

Reviewed by: Scott T. Hutchinson
Review date: 03/22/2003

This book is not a great introduction to relational database design and programming, but is what it claims to be: an excellent introduction to SQL Server 2000. If you’re not already familiar with relational databases, then I recommend reading a good book on that topic before beginning this book.

Although this book is called “a beginner’s guide”, it actually delves deeply into several advanced topics. For instance, in the chapter on indices and query optimization, it gives a thorough explanation of the techniques (nested-loop, merge, and hash) that SQL Server uses to process joins. It goes on to discuss the application of optimizer hints in T-SQL. These are probably completely new topics for most beginners, possibly even for some who have used SQL Server for years. The book also includes very detailed coverage of data locking models, backup and recovery models, and Data Transformation Services (DTS). Replication, on the other hand, is given only a modest look; but the book makes up for it with an excellent introduction to data warehousing and how it differs from online transaction processing (OLTP).

This book was obviously very carefully edited, which makes it somewhat of a novelty in today’s IT publishing industry; I reached page 257 before noticing a typo. In all, I noticed only three typos and no other errors in this book of over 600 pages.

The author stumbles only occasionally, when he introduces new terms that are not defined until much later in the book. However, in most such cases the book’s index made it possible to easily locate the definition. Interestingly, some of T-SQL’s most basic keywords (e.g., USE and GO) cannot be found in the book’s index. In a couple of cases, the author mentions a command briefly without providing any information about its syntax; however, the reader can always look up the syntax in the Books Online help system provided with SQL Server 2000.

I read this book as part of my preparation for the Microsoft certification exam 70-229 “Designing and Implementing Databases with Microsoft SQL Server 2000 Enterprise Edition,” and though I haven’t taken the test yet, I feel confident that reading this book went a long way toward making me ready. The book even includes exercises at the end of each chapter with solutions in an appendix, making it even more suitable for exam preparation.

Postscript: Thanks in large part to this book, I passed the SQL Server 2000 exam (070-229) on the first try on Apr 9, 2003.


Top Of Page

Programming ASP.NET
by Jesse Liberty, Dan Hurwitz
O'Reilly Web Site



Rating: 3 dots

Reviewed by: Scott T. Hutchinson
Review date: 03/22/2003

All in all, this 900-page book is a reasonably good way to begin learning ASP.NET. It is equally as good for C# programmers and VB.NET programmers, since nearly every one of the many examples in the book is listed in both languages. This approach can be especially useful to those who wish to learn both languages, though it uses up a lot of pages—nearly half the book is example code. (After a while, the reader realizes that most of the code is virtually identical in either language, and usually flips right past one language or the other.) This extensive use of example code in two languages helps to explain how a 900-page book could be a mere introduction to the topic of ASP.NET programming.

Aside from the book’s language duality, its other most significant feature is its nearly 200-page introduction to ADO.NET. This section provides many examples, including some advanced topics, such as the use of either database transactions or connection-based transactions to ensure that data remains in a consistent state.

The book contains several typos and other minor errors, but no more than the average book of this sort. There are also a few instances where the authors gloss over a topic, leaving the reader wondering how or why what the authors say makes any sense.

Finally, the book includes only a cursory explanation of regular expressions, a topic of increasing importance to today’s web developers, who must defend their web servers from potentially malicious user input. Other important ASP.NET topics, such as exception handling and the use of page inheritance, are missing entirely from this book, which should probably be subtitled “A Beginner’s Guide.”


Top Of Page


Top Of Page

Programming Visual Basic .NET
by Dave Grundgelger
O'Reilly Web Site



Rating: 2 dots

Reviewed by: Michael Lawlor
Review date: 10/07/2002

Programming Visual Basic .NET by Dave Grundgeiger introduces application development on the Microsoft .Net platform. Conceptual overviews of the .NET philosophy are mixed with procedural steps designed to walk readers through basic programming tasks and code fragments that illustrate specific Visual Basic .NET features. Programming Visual Basic .NET contains eight chapters that cover the Visual Basic .NET Language, the .NET Framework, Windows Forms, Web Forms, ASP .NET, ADO .NET and Web Services.

The introductory chapter is modeled on the ‘Visual Basic Version of Hello World!’ topic in the Visual Basic .NET Help system. Three different .NET application types are presented in the context of a simple programming specification. Command-line compilation, windows form, and web form applications are demonstrated.

Mr. Grundgeiger uses the command-line compilation example to introduce the concept of a namespace, use of standard modules, and the Main subroutine. He instructs the reader to compile from the “Windows command line”. However the Visual Studio .NET Command Prompt is the correct tool to use when compiling a .NET console application. The distinction is critical because .Net applications cannot be compiled on the Windows command line as it does not reference the .NET Framework.

The .NET Language chapter provides a good introduction to the syntax of the Visual Basic .NET language. Conceptual overviews are supported by code fragments. However if the reader wants to experiment with the code fragments then s/he must type them into the IDE. The unavailability of code samples in electronic format is a drawback. For example, the ability to copy and paste code would have been more than welcome during the discussion of validation techniques and server controls in the chapter on ASP.NET and Web Forms. The code for that example is reprinted in the book but it runs on for five pages. The prospect of typing it all up conflicts with the momentum of reading the book.

O’Reilly books are not sold with CD supplements glued to the inside back cover. We are, however, told in the preface “that there is a webpage for this book” and that it contains “errata” and “examples”. In fact the webpage dedicated to Mr. Grundgeiger’s book does not offer any code. O’Reilly encourages customer contact so I emailed them about this issue and received a prompt response acknowledging the problem. Also, a few serious readers have submitted error reports related to code samples in the book. To date the errors remain unconfirmed by the publisher.

An important discussion in the .NET Language chapter concerns passing arguments to and from methods and arrays by value and by reference. Mr. Grundgeiger explains that when an argument “is passed by reference, the address of the argument is passed to the routine” and that when an argument is passed by value "a copy of the argument is passed.” The author then warns us to “be aware of the effects of ByRef and ByVal on arguments that are reference types.”

This warning is followed by an interesting code sample that is compromised by an editorial error. A variable is declared in one class and then two instances of that class are instantiated in another class. The purpose of the sample is to demonstrate that when an argument in a derived class is passed by value the parameter in the calling method is exposed to change regardless of the fact that it has been passed by value. Unfortunately the code in the calling method invokes the ByRef subroutine twice when the author is in fact describing the results of a reference pass followed by a value pass.

I was able to work through the example and rescue the technical point by referencing the Help system. The ‘Argument Passing ByVal and ByRef’ topic provides close coverage of the intricacies of passing parameters: “Passing arguments by value and by reference is not the same distinction as the classification of data types into value types and reference types. However, the two categories do interact.” The ‘Argument Passing Mechanism’ topic in the Help system is also worth reading.

There are two chapters on Windows forms that provide a basic introduction to controls, events, signatures, MDI applications, and menus. Mr. Grundgeiger demonstrates how to create Windows forms using the Windows Forms Designer as well as by writing code in Notepad and compiling the application on the Visual Studio .NET command line. The exercise of writing a simple windows form application from scratch is very instructive because it gives the reader a clear view of how a simple application hangs together in the .NET Framework.

The book lacks a consistent presentation style. Sometimes the editors use numbered procedural steps to outline a programming task. At other times the procedural steps are simply described in narrative prose in a paragraph. This stylistic inconsistency detracts from the overall friendliness of the book.

Brief introductions to ADO and Web Services are followed by five appendices. One of the appendices consists of a five page list of culture attributes. A discussion of the challenge of designing and developing software products that function in multiple cultures would have added to the value of this list, which seems like filler the way it is presented.

In the preface Mr. Grundgeiger states that “the purpose of this book is to provide experienced software developers with the means to quickly become productive in Microsoft’s Visual Basic .NET development environment.” O’Reilly, Mr. Grundgeiger’s publisher, declares a slightly different purpose by stating on the back cover that the book is “targeted at programmers with some prior programming experience, particularly in Visual Basic.”

Code sample errors and inconsistent layout appear to be the logical extension of an editorial touchstone as inconclusive as the phrase “programmers with some prior programming experience.” How seriously would a legal book be taken if it were described as a resource for lawyers with some prior experience of the law?

Time spent with Programming Visual Basic .NET by Dave Grundgeiger could provide a profitable return on investment if the reader is willing to troubleshoot code samples and supplement the text by researching .NET concepts in the Microsoft Development Environment Help system. Caveat emptor.


Top Of Page

Programming VB.NET: A Guide for Experienced Programmers
by Gary Cornell, Jonathan Morrison
Apress Web Site



Rating: 3 dots

Reviewed by: Scott T. Hutchinson
Review date: 03/29/2002

Good introduction, but only takes you so far…

This is a good introduction to VB.NET, but I think some better, more detailed books have been published since this one. This book has many minor errors. Gary Cornell posted several dozen corrections on the Apress web site, but I'm sure I found just as many errors that have not yet been corrected. Most of the errors are just typos, so I guess that shouldn't keep you from buying the book. However, I think Apress should try to improve their editing.

More importantly, nearly all of the example code in the book is of the "Hello, World!" caliber. The code demonstrates the concepts ok, but generally is of little use in a real-world application. For instance, I don't think I'll ever have need for the Knife and Fork classes or the Programmer.Eat method, but I could be wrong. I've also found little demand for foo and bar classes in my part of the country, but maybe we're special. I think you could find another book with much more code that could actually be reused.

Also, the book does not come with a CD. You can download the code from Apress, but there is no electronic version of the book available for searching. If you're looking for a VB.NET reference to use over and over, I think you should find one that includes an electronic version you can quickly search.

Lastly, the final chapters of the book are extremely short and cursory, hardly more than long magazine articles really, barely covering important topics like database access, ASP.NET, and COM interop. If these topics are important to you, this book is not the one for you.

I bought this book in January 2002, but if I were shopping for a VB.NET book now I'd be looking at these authors: Francesco Balena, Andrew Troelsen, John Connell, or Mike Snell.