Tuesday, October 24, 2006

Miscellaneous Books

This article appears in slightly different form in the September/October 2006 issue of IEEE Micro © 2006 IEEE.

I have covered many subjects in this column, but the majority of my reviews are of books in the fields of computer science, software, project management, and technical publication. In the last few months I have seen a large number of new works. Their subjects are interesting, and their production values make them a joy to look at and to hold.

Rather than choosing just a few from among these books, I present a larger than usual selection -- though there are many more books I wish I had time and space to review. Many of these books are from a few small publishers. I'll let you draw your own conclusions about why that is.

Interface Oriented Design by Ken Pugh (Pragmatic Bookshelf, Raleigh NC, 2006, 232pp, ISBN 0-9766940-5-0, www.pragmaticprogrammer.com, $29.95)

Ken Pugh is an experienced software developer and an award winning author. In this book he treats an important design subject that many developers, even experienced ones, fail to appreciate. 

Every introduction to object oriented programming begins by explaining the key concepts of encapsulation, polymorphism, and inheritance. Pugh shows how to use interfaces to achieve true encapsulation and polymorphism. He explores the problems that inheritance presents and shows how interfaces can sometimes provide a better alternative to inheritance.

In his book Object Oriented Software Construction (Prentice Hall, 1997), Bertrand Meyer formalized the idea of design by contract. An interface is a contract that provides explicit provisions about the preconditions for invoking a method and the conditions that should follow its return. Meyer also specifies certain implicit rules that all contracts should follow. Pugh applies design by contract throughout his book, but he focuses on only the main points, which he simplifies, in an homage to Isaac Asimov's I, Robot (Gnome, 1950), as the three laws of interfaces:
  1. An interface's implementation will do what its methods say it does.
  2. An interface implementation shall do no harm.
  3. If an implementation is unable to perform its responsibilities, it shall notify its caller.
Interface design is not an exact science. There are many ways to achieve the same basic functionality. Meyers discusses the issues and considerations that will help you make optimal designs. Many of these, like loose coupling, are fundamental design principles. Others are specific to designing interfaces. Meyers illustrates his principles with several case studies, then looks back to summarize the patterns that they illustrate.

The chapter that I found most helpful is the one on interfaces and inheritance. Inheritance is a powerful means of developing a hierarchy of behaviors and implementations. But a hierarchy of behaviors can be inflexible and limiting. Interfaces focus on behaviors that may or may not be hierarchical. A hierarchy of implementations centralizes the code for common behaviors, but the delegation pattern can provide a way to achieve the same end for non-hierarchical interfaces.

This book will repay careful study. If you design computer programs, especially in object oriented languages, you should read it. 

Ajax Design Patterns -- Creating Web 2.0 Sites with Programming and Usability Patterns by Michael Mahemoff (O'Reilly, Sebastopol CA, 2006, 654pp, ISBN 0-596-10180-5, www.oreilly.com, $44.99)

Michael Mahemoff is a computer consultant whose academic research dealt with reusing designs in software and in user interfaces. Ajax (loosely an acronym for asynchronous JavaScript and XML) is a design pattern first described early in 2005 by Jesse-James Garrett. It enables web applications (for example, Google Maps) to provide highly interactive user interfaces within browsers, without using plugins.

Ajax is not a new technology. It is simply a new way of using old technologies to design applications that run in browsers and interact with remote servers. Mahemoff has compiled and described the patterns and best practices that have grown up around this new approach. Any web application designer can benefit from reading his book.

Documenting APIs -- Writing Developer Documentation for Java APIs and SDKs by James F. Bisso and Victoria Maki (Bitzone, Richmond CA, 2006, 318pp, ISBN 0-9630021-0-4, www.bitzone.com, $49.95)

I have known and worked with the authors of this book for many years. Jim Bisso is a software engineer at Sun. Viki Maki is a technical writer and trainer. Both have taught classes in technical documentation. 

The authors take you through all aspects of documenting Java APIs (application programming interfaces). They explain the different roles of different kinds of API documentation. For example, a programmer's guide and an API reference serve different purposes and complement each other.   

Though the authors focus on Java, much in the book applies to API programming for other languages. Buying the book entitles you to access additional information from an associated website, which contains sample projects that the book refers to. 

The authors write from the viewpoint of the person documenting the interfaces, but developers can get valuable insights from understanding that viewpoint. In many cases, developers provide the bulk of API documentation.

My connection with the authors makes me a biased reviewer, so I am hesitant to say too much about the book. I think I am safe, however, in saying that this is the only book on this subject. If you are involved in API documentation, you should definitely read it.

Communicating Design -- Developing Web Site Documentation for Design and Planning by Daniel M Brown (New Riders, Berkeley CA, 2006, 368pp, ISBN 0-321-39235-3, www.newriders.com, $39.99)

Dan Brown is a web consultant who specializes in information architecture and user experience. He has written an unusual and valuable book. It is not about the mechanics of designing and implementing websites. Rather, it describes the artifacts that support clear communication among the designers and between the designers and their clients. Wireframes, site maps, flow charts, content inventories, personas, and other artifacts (known collectively as "the deliverables") provide the basis for this communication. 

The deliverables are independent of the design and development methodologies you choose to use. Using definitions, explanations, and clear pictures and diagrams, Brown shows how to produce and use these artifacts. If you are buying or selling websites, you should read this book.

CSS -- The Missing Manual by David Sawyer McFarland (Pogue, Sebastopol CA, 2006, 494pp, ISBN-13 978-0-596-52687-0, www.missingmanuals.com, $34.99)

David Sawyer McFarland is an author, a teacher, and a webmaster. He has designed many websites. Cascading style sheets (CSS) is a language that enables web designers to apply global styles to the raw HTML they use to encode the content of web pages.

When browsers and websites first became popular in the early 1990s, designers were forced to apply font size, color, and other elements of appearance directly to each HTML element (heading, paragraph, and so forth) that they created. There was no mechanism to ensure that every first level heading on a given page, let alone on the whole website, had the same appearance. Furthermore, HTML has only a limited number of ways to control appearance. Sophisticated visual designs required cumbersome misuse of HTML elements (for example, tables).

Designers soon recognized these defects, and CSS was born. But HTML was evolving rapidly, and CSS had a late start. It was not until recently that we had a version of CSS that designers could use effectively with their designs.

Using CSS is relatively simple, but it requires looking at design in a different way. McFarland explains this viewpoint, then goes on to show how to use each feature of CSS. He also starts with common design problems (for example, styling tables or forms) and shows how to use CSS to solve them.

The Missing Manual series of books fills the need for user centered documentation for many underdocumented products. This book does the same for CSS. 

Secrets of RSS by Steven Holzner (Peachpit, Berkeley CA, 2006, 344pp, ISBN 0-321-42622-3, www.peachpit.com, $24.99)

Steve Holzner is a prolific author of books about XML and related topics. RSS (really simple syndication) is, as the name suggests, a system for syndicating content. That is, it enables publishers to make content available in an XML format called an RSS feed. It enables subscribers to aggregate content into personal collections and read that content using a browser. Many web logs use RSS feeds to distribute content.

Following the excellent style of many books from this publisher, Holzner provides profusely illustrated step by step instructions for producing and consuming RSS feeds.

If your only interest in RSS is to be a subscriber, this book is more than you need. If you wish to publish, however, this book provides a clear view of everything you need to do.  

.NET Internationalization -- The Developer's Guide to Building Global Windows and Web Applications by Guy Smith-Ferrier (Addison-Wesley, Boston MA, 2007, 670pp, ISBN 0-321-34138-4, www.awprofessional.com, $49.99)

Internationalization is the process of preparing software to be easily translated (localized) for users who expect different languages, date formats, and other cultural conventions.
Guy Smith-Ferrier is a developer who specializes in internationalization. His book focuses on how to internationalize Windows Forms, ASP.NET applications, and other programs running in the .NET environment. 

Internationalization is not conceptually difficult, but it requires building and using a large and complex infrastructure. Fortunately for .NET developers, .NET includes such an infrastructure, so you don't have to build your own. This book teaches you how to use that infrastructure. If you develop applications in a .NET environment, you will sooner or later need to understand how it supports internationalization. This book is the place to start.