Sunday, April 15, 2007

Looking Back over 20 Years

This article appears in slightly different form in the March/April 2007 issue of IEEE Micro © 2007 IEEE.

With this issue I start my twenty-first year writing the Micro Review column. Microsoft Windows, the World Wide Web, Java, the Y2K flap, the dotcom bubble, and a new wave of globalization all happened on my watch (not to mention the Loma Prieta earthquake, the Oakland/Berkeley Hills fire, 9/11, the Afghanistan and Iraq wars, the Indian Ocean Tsunami, and Hurricane Katrina).

Quite a lot has changed in our industry since my April 1987 column, in which I reviewed Motorola's manual for the MC68851 paged memory management unit and Danny Hillis's book about the connection machine. That year I reviewed Michael Slater's marvelous book, Microprocessor-Based Design and Maurice Bach's The Design of the Unix Operating System. I also looked at Microsoft Word 3.0.1 (for the Macintosh, of course) and an implementation of Donald Knuth's TeX.

Microprocessors and Computer Architecture 

Over the years I have branched in many directions, but I continue to focus on Micro's core themes. I reviewed the long awaited Hennessy and Patterson book on computer architecture in 1990 and their sequel on hardware/software integration in 1994. I reviewed Mike Johnson's Superscalar Microprocessor Design in 1991. I have reviewed books on cache design, busses, spread spectrum, high-speed digital circuits, logical design, the Pentium architecture, the PowerPC architecture, and more. Especially notable were Muhammad Ali Mazidi's coffee table sized book on the 80x86 architecture and Clive Maxfield's quirky Bebop to the Boolean Boogie (Micro Review Sep/Oct 1995) and its sequel, BeBop Bytes Back (Micro Review Jul/Aug 1997).

Computers and Consciousness

A consistent theme of my columns over the years has been the human mind and how it works -- especially when the workings turn out to be similar to computer architectures. In 1988 I reviewed Johnson-Laird's The Computer and the Mind. This got me into trouble with my friend Bernie Baars, because I never did review his much better book on the same subject, A Cognitive Theory of Consciousness. In subsequent years I reviewed Penrose's The Emperor's New Mind, Dennett's Consciousness Explained, Dyson's Darwin among the Machines, and, in 2004, Dan Lloyd's Radiant Cool -- A Novel Theory of Consciousness. 

If we broaden the subject to include decentralization and self-organizing behavior, we can include my Nov/Dec 1994 column, in which I reviewed Michael Resnick's Turtles, Termites and Traffic Jams -- Explorations in Massively Parallel Microworlds. In that book Resnick puts forth the general theory that Systems don't need a controlling intelligence to achieve purposeful behavior. No leader directs birds to fly in formation or ants to form trails from their nests to food sources. Instead, large numbers of independent entities, each following simple rules, produce the large scale patterns that we observe. This is also, essentially, Dennett's idea of how consciousness works. It is also the theme of Michael Crichton's Prey, which I reviewed in my May/Jun 2003 column.

Globalization

In 1988 I took issue with a blurb on the back of a book about WordPerfect. The blurb quoted Andy Rooney as saying that the author had written the first book about computer software that does not appear to have been translated from the Japanese. I said, somewhat pompously, that the situation that Andy Rooney mocks does not result from an inability of Japanese speakers to express themselves but from a general unwillingness of Americans to learn the language of a people whose products they crave insatiably. I'm mellower now, but Andy Rooney hasn't changed. 

China, India, and 9/11 have placed American concerns about Japan on the back burner, but in 1990 I reviewed The Fifth Generation Fallacy, a book about the difficulties of processing Japanese characters using computers. Moore's law has made that problem vanish too. Language processing that seemed out of reach in 1990 is commonplace today.

I began to focus on globalization in 2005 with the publication of Tom Friedman's The World Is Flat. Since then I have reviewed several more books on the subject. My Job Went to India by Chad Fowler, which I reviewed in my Jan/Feb 2006 column looks at how individual workers can remain valuable to employers. In my Jan/Feb 2007 column, I reviewed Joseph Stiglitz's Making Globalization Work, which authoritatively identifies the essential problems of globalization and shows how to solve them.

Windows and Its Challengers

In the early days of my column, the software I reviewed, like my consulting business, was largely based on the Apple Macintosh. Microsoft Windows 3.1 tipped the balance in the early 1990s, and by the time Windows 95 came on the scene, most of the books and software I saw were PC-related.

My 1995 columns are full of books about the Internet and browsers. My favorite is Lamont Wood's The Net After Dark, which focuses on the fun side of the Internet. Netscape and the World Wide Web nearly derailed the PC train, but Microsoft took decisive action to avert the Netscape challenge. Courts later found some of that action to have been illegal, but it had the desired effect. In my Jan/Feb 1996 column I reviewed Bill Gates's The Road Ahead, in which he asserts Microsoft's intention to dominate the information superhighway. 

With Netscape subdued, another challenge to Microsoft arose. I devoted my May/Jun 1996 column to Java, which, with the advent of application servers, resulted in a platform to rival Windows. At the time, I contrasted Java with C++ and predicted that the Java and Microsoft lines would look more and more alike as time went on. Java has done very well since 1996, and Microsoft has moved strongly in the same direction with .NET. I have reviewed many books on Java and .NET, but my favorite is Josh Bloch's Effective Java, which I reviewed in my Jul/Aug 2002 column. I met Bloch at JavaOne in 2006, and he told me that sales of his book increased sharply after my review. I suspect that's just a coincidence, but I'm glad the book is doing well. It's essential reading for anybody who develops Java-based systems.

Of course, Microsoft's first important battle was the original DOS vs CP/M affair. In my Mar/Apr 2005 column I reviewed Harold Evans book They Made America -- From the Steam Engine to the Search Engine: Two Centuries of Innovation. The book is a collection of short essays about innovators and innovation. The one that drew me to the book describes the way Bill Gates outmaneuvered the brilliant, talented, idealistic Gary Kildall to freeze CP/M out of the IBM PC picture.

Programmers and Their Tools

Another major theme of my columns has been computer programming. I have looked at tools like the Brief editor, Visual SlickEdit, True Basic, the Microsoft and Borland IDEs for C++, the MKS Toolkit, UML, design patterns, the open source movement, Perl, Ruby, regular expressions, and Rails. I have reviewed books like Debugging, Code Complete, The Pragmatic Programmer, Literate Programming, The Cathedral and the Bazaar, Programming Pearls, and The Practice of Programming. 

Several publishers produce excellent books for programmers, but the undisputed leader is O'Reilly. In my Jul/Aug 1989 column, I reviewed Managing Projects with Make by Steve Talbott, one of the Unix in a Nutshell series. I have reviewed dozens of O'Reilly books since then, but my most recent favorites are the Head First series. My thirteen year old daughter is learning to program using Head First Java by Sierra and Bates. The depth of her understanding of the topics she has read about astonishes me.

In my Nov/Dec 1999 column, I reviewed Kent Beck's Extreme Programming Explained, the first of many books about that phenomenon. Extreme programming is part of a larger topic called agile programming. These methodologies try to strip away a lot of bureaucratic overhead. They follow a simple pattern of asking customers for requirements in small bites called use cases, then quickly implementing bits of software that satisfy the use cases. Agile techniques work well for small projects, but many large firms are finding ways to apply them to parts of large projects. 

The theme of programming is close to the themes of usability, interaction design, and project management, all of which have appeared many times in my columns. 

Usability and Interaction Design

In my Jan/Feb 1993 column I reviewed the second edition of Paul Heckel's The Elements of Friendly Software Design. My old friend, the late Rudolph Langer, then editor-in-chief of Sybex, was very fond of this book, which had gone out of print. He encouraged Heckel to republish it with Sybex. I'm not aware of a more recent edition, but the book's principles go beyond the details of particular software packages. I haven't seen another book that looks at interface design quite the way this one does. It is still worth reading today.   

In my May/Jun 1992 column I reviewed Tog on Interface by Apple Computer's human interface evangelist, Bruce "Tog" Tognazzini. Tog applied the Jungian I-E and N-S axes (popularized by Isabel Meyers-Briggs) to interface design. He pointed out that a small cadre of IN designers are creating interfaces for the great multitude of ES users. In The Humane Interface by Jef Raskin and The Inmates Are Running the Asylum by Alan Cooper, both of which I reviewed in 2000, the authors make the same point in different ways. Several years later, Cooper followed his observations with a detailed explanation of how to perform interaction design. It appears in his book About Face 2.0, which I reviewed in my May/Jun 2006 column.

Even more detailed and academic books on usability are User and Task Analysis for Interface Design by Hackos and Redish (Micro Review Mar/Apr 1998), Dynamics in Document Design by Karen Schriver (Micro Review Jul/Aug 1999), and the imposing Contextual Design by Hugh Beyer and Karen Holtzblatt, (Micro Review Jan/Feb 2001). 

Project Management

More than thirty years ago, long before I was a columnist, I read Gerald Weinberg's The Psychology of Computer Programming, where many ideas we take for granted today first appeared as startling innovations. For example, Weinberg is responsible for the concepts of egoless programming and code walkthroughs. Nowadays Weinberg frequently teams up with the wonderful small publisher Dorset House to produce pithy books on technical leadership. He has become a guru in this area, so that many Dorset books by other authors have the Weinberg look and feel. One of my favorites is Waltzing With Bears: Managing Risk on Software Projects by Tom DeMarco and Timothy Lister, which I reviewed in my Jul/Aug 2003 column. Failure to manage risks is one of the biggest reasons that software projects cost more and deliver less than their planners imagined that they would.

Another excellent Dorset book is Project Retrospectives: A Handbook for Team Reviews by Norman R Kerth, which I reviewed in my May/Jun 2001 column. Disdaining the usual 2-hour project post-mortem held in a conference room, Kerth suggests spending a few days at a resort (or at least off-site). The idea is to let people feel safe enough to speak their minds and then provide enough time to explore the issues that arise.

Yet another wonderful book about managing software projects is Tom DeMarco's Deadline: A Novel About Project Management, which I reviewed in my May/Jun 2000 column. Every bad management practice that has ever been inflicted on you is in this book, and DeMarco turns them all into aphorisms.

My Favorites

In writing a regular column, I tell you about many things that will soon be unimportant. Sometimes, however, I write about something that gives me, and I hope you, a special feeling. Here, in chronological order, is a list of reviews that I look back on with special pride:
  • Consciousness Explained by Daniel Dennett (Mar/Apr 1992)
  • The Man Who Knew Infinity (about S. Ramanujan) by Robert Kanigel (Mar/Apr 1993)
  • Code Complete by Steve McConnell (Jul/Aug 1993)
  • Digital Mantras by Steven R Holtzman (Mar/Apr 1995)
  • Java (May/Jun 1996)
  • Only the Paranoid Survive by Andy Grove (Mar/Apr 1997)
  • Darwin Among the Machines by George B Dyson (Jul/Aug 1997)
  • Extreme Programming Explained by Kent Beck (Nov/Dec 1999)
  • The Pragmatic Programmer: From Journeyman to Master by Hunt and Thomas (Jan/Feb 2000)
  • Bill Joy's warning from the April 2000 Wired Magazine (Jul/Aug 2000)
  • The Inmates Are Running the Asylum: Why High-Tech Products Drive Us Crazy and How to Restore the Sanity by Alan Cooper (Sep/Oct 2000)
  • Effective Java by Joshua Bloch (Jul/Aug 2002)
  • Me++: The Cyborg Self and the Networked City by William Mitchell (Nov/Dec 2003)
  • The World Is Flat: A Brief History of the Twenty-First Century by Tom Friedman (May/Jun 2005)
  • The Singularity is Near: When Humans Transcend Biology by Ray Kurzweil (Jan/Feb 2006)

Wednesday, February 14, 2007

Invisible Engines, Making globalization Work

This article appears in slightly different form in the January/February 2007 issue of IEEE Micro © 2007 IEEE.

Economics

This time I write about two books by economists. The first looks at the economics and winning business strategies of industries that require software platforms. The second addresses globalization.

Invisible Engines -- How Software Platforms Drive Innovation and Transform Industries by David S. Evans, Andrei Hagiu, and Richard Schmalensee (MIT, Cambridge, MA, 2006, 395pp, ISBN 0-262-05085-4, www.mitpress.mit.edu, $34.95)

The authors are experts who consult regularly with leading platform-based businesses. Evans and Schmalensee have advised Microsoft for many years, particularly about Microsoft's antitrust difficulties. Hagiu wrote a doctoral dissertation on two-sided economies -- situations in which two groups must participate (for example, auctions, which need both buyers and sellers). 

In this book the authors lay out the underlying principles and parallels of personal computers, mobile phones, video games, online auctions, search engines, and similar industries. All of these have in common that they have more than one "side." For example, the Microsoft Windows operating system creates an ecosystem of hardware manufacturers, application developers, and end users.

The various sides in the ecosystem that a software platform creates depend on each other in various ways. Hardware manufacturers need software support to maximize their performance/price ratios. Hardware manufacturers and developers need buyers for their products, while the existence of desirable products on a platform leads to more buyers. These are the well known network effects that cause some platform ecosystems to grow rapidly while others shrink and die.

The interdependence of the sides in a platform-based ecosystem is commonplace knowledge. This book, however, goes into the details. It provides brief histories of various platforms and shows how their business and pricing strategies evolved. 

The authors find that in each platform ecosystem, one side gets a better deal than the others. For example, in the Windows ecosystem, developers receive valuable tools and support for minimal cost, while buyers of Windows-based computers and software provide most of Microsoft's profits. In the video game business, on the other hand, users receive the game platforms at highly favorable prices, and the platform makers receive most of their profit from game developers. Media players (for example, Real Player or Apple Quicktime) are always free to end users, while the developers of the player software obtain their profits from content developers and distributors.

The book delves into pricing issues such as price discrimination, bundling, and charging for access versus charging for usage. The authors find, sadly, that it almost always pays the manufacturer to bundle features together, even though most buyers won't use most of what they buy. This leads to a kind of Moore's Law of software bloat: software platforms double in size roughly every two years.

The access versus usage question arises most notably in communication platforms like phones or personal digital assistants (PDAs). In theory, platform providers should charge for both, but in practice they usually charge for just one.

Interestingly, an industry rarely changes its pricing strategy as it matures. It tends to stick with the model that made it successful. An industry does, however, change its integration strategy. New platforms usually provide all sides of the ecosystem, because the network effects have not yet occurred. Later, as the ecosystem grows, the provider defines application programming interfaces (APIs) to allow outside vendors to supply alternatives to the platform provider's offerings. Microsoft Windows, for example, defines many standards to allow computer and peripheral makers, application developers, and even browser makers to complement each other's offerings. The Apple media delivery system, on the other hand, works best when all of the components (iTunes, iPod, the Apple music store, and the associated digital rights management software) come from Apple. Apple buys and resells content for this system.

As the authors discuss one platform after another, they repeatedly stress the importance of APIs and other standards that allow different sides of the platform ecosystem to innovate without entanglement with other players. We all know this, but it is interesting and useful to see the principle at work in many different platform ecologies.

The best thing about this book is the concrete detail. While the authors work hard to show the similarities between different platform-based businesses, their theories are not a procrustean bed. They discuss the quirks and odd corners of each industry and show how those quirks lead to the unique business strategies of that industry.

This is a valuable book for anyone who wants to understand or engage in a business based on a software platform. I recommend it highly. 

 
Making Globalization Work by Joseph E. Stiglitz (Norton, New York, NY, 2006, 384pp, ISBN 0-393-06122-1, www.wwnorton.com, $26.95)

In The World Is Flat (Micro Review, May, 2005), New York Times columnist Tom Friedman emphasized the bright side of globalization. In Globalization and Its Discontents (Norton, 2002), Nobel Prize winning economist Joseph Stiglitz addressed the dark side of globalization. In his latest work, Stiglitz fuses these threads. He proposes ways to correct the problems he described in his earlier work, so everyone can benefit from globalization.

Joseph Stiglitz shared the 2001 Nobel Prize in Economic Sciences for his analysis of markets with asymmetric information. His research disproved many cherished assumptions that had persisted from the time of Adam Smith to the late twentieth century. In 1776, Adam Smith argued that free markets lead to efficient outcomes as if by an invisible hand. Starting with his field work in Kenya in 1969, Stiglitz accumulated the insights that led him finally to the conclusion that the invisible hand, if it ever existed, had disappeared. In its place, Stiglitz argues, government has a role in keeping free markets working. For example, free markets naturally lead to rapid flows of speculative capital into and out of developing countries. Institutions and regulations must protect those countries from the resulting instability.

By the time he received his Nobel Prize, Stiglitz had put his ideas into practice. He served as chair of President Clinton's Council of Economic Advisors, then as Chief Economist of the World Bank. While at the World Bank, Stiglitz went to war against the policies of the International Monetary Fund (IMF) and its chief supporter and shareholder, the United States Treasury Department. 

Stiglitz's 2002 book Globalization and Its Discontents contends that IMF policies favored United States financial interests, while short-changing the poor nations that the IMF is supposed to help. That book was widely influential, especially after huge protests against globalization like the one at the Seattle World Trade Organization meeting in November, 1999. The book identified many problems and suggested some changes, but it didn't offer a comprehensive solution. Four years later, Stiglitz continues the story of the adverse effects of globalization, but also offers solutions to many of the problems he sees.

Stiglitz summarizes the main complaints against the current implementation of globlization:
  • The rules favor the industrialized countries. The rules are so unfair that the poorest countries are worse off.
  • Material values are more important than the environment or even life itself.
  • Developing countries lose sovereignty over decisions that affect their citizens' welfare, thereby undermining democracy.
  • There are many losers in both developed and developing countries.
  • Developing countries must accept Americanization of their economies and their culture.
An issue that exemplifies several of these points is especially relevant to technology-based industries. The protection of intellectual property ensures that those who invest their time and money in writing books or developing inventions receive a reward for their efforts. Granting a time-limited monopoly to creators encourages innovation and helps to expand the body of knowledge.

In recent years, however, United States laws about intellectual property have become a drag on innovation in the software industry. In the drug industry, patent laws favor the development of minor variations of high-volume drugs rather than cures for "orphan" illnesses with low potential sales. They also keep life saving drugs out of the hands of people who need them but can't afford to pay.

In 1993, bypassing the existing World Intellectual Property Organization, the World Trade Organization adopted the TRIPs agreement (for trade-related intellectual property). This subjected developing countries to even more onerous intellectual property restrictions. The most well known example is the fight over the right of countries with high incidences of HIV AIDS to manufacture generic versions of expensive drugs for that disease. More humorous examples are attempts to enforce western patents on traditional Chinese medicine or on the medicinal use of turmeric in India.

I never advocate any particular political point of view in this column. Globalization, however, is inherently political. In laying out his program to address the problems of globalization, Stiglitz makes many statements that others might regard as politically biased. Nonetheless, Stiglitz presents a compelling, comprehensive case for his program. Like Thomas Jefferson, he believes that an informed electorate that is willing to hold its leaders accountable can solve problems like those of globalization. He hopes to help today's voters and leaders understand the issues that globalization has raised.

I won't go into Stiglitz's views further here. I recommend that you read his book for the details of his analysis and his solutions. 

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.

Thursday, August 17, 2006

Weinberg on Writing, Knuth, Java to Ruby, DITA Intro

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

This article looks at old masters and new challengers.

Words from the Masters

In this section I look at works by two of the most respected and most prolific writers in the field of computer programming and beyond.

Weinberg on Writing -- The Fieldstone Method by Gerald M. Weinberg (Dorset House, New York NY, 2006, 208pp, ISBN 0-932633-65-X, www.dorsethouse.com, $24.95)

Gerald Weinberg has 40 published books to his credit, so I was eager to read about the techniques that work for him and have worked for many participants of his writing workshops. He describes his approach to writing as the fieldstone method. It derives from the first lesson he learned in college: only write about things you care about. As a result, he goes through life noticing what he cares about and making notes. These unordered notes are like the fieldstones you might collect to make a stone wall. He goes to great lengths to ensure that he can find these notes when he needs them. Then, when he decides that he wants to write about something, he gathers appropriate fieldstones and builds a book or essay the way a skilled stonemason would build a wall.

Building a wall requires you to select the right stones, organize them, and then assemble the wall -- trimming and polishing to make the best wall you can with what you have. Writing by the fieldstone method requires the analogous actions. Weinberg has developed principles and procedures for all of those actions. He describes them in this book, using frequent anecdotes and many exercises. These slow you down and keep you from skimming -- like the chunks of celery that make you chew your potato salad thoroughly.

Weinberg shows how his methods prevent writer's block, the paralyzing affliction that can lead writers into addictive behaviors that keep them from working for weeks at a time. He regards writer's block not as a disorder in you, the writer, but as a defect in your methods. It is natural to have too few or too many ideas. The problem comes from what you do about it. Weinberg tells you to ask yourself the Goldilocks question: is the number of ideas I have to work with too many, too few, or just right? Depending on the answer, you gather more ideas, dump some, or start trimming and polishing the ones you have.

Weinberg mixes his practical techniques with what we referred to as "new age" in the 1970s. One of his students writes that Weinberg offers intangibles like "motivating, raising self-esteem, building confidence in writing, considering self-other context, teaching the true meaning of discipline, thinking more clearly, and raising awareness." I'm sure this comes across more powerfully in his workshops, but it is amazing how much those intangibles come through in this short book.

Weinberg addresses the mechanics of selecting, organizing, trimming and polishing. Here he gives excellent advice, including some practical techniques for achieving the famous dictum of Strunk and White: omit needless words.

Weinberg addresses the difficult problem of knowing when to stop. The fieldstone method makes this easier than other approaches do. For example, if you start by developing an outline, you may be held up by even a minor point that you may not be able to provide right away. He likens it to waiting for the number that completes your card in a game of bingo. I thought of that analogy as I read Donald Knuth's latest contribution to his magnum opus, The Art of Computer Programming. 

Other authors are stopped by their desire for perfection or their fear of criticism. All of these seem silly in the context of building a fieldstone wall.

Weinberg provides useful anecdotes about his own experiences with publishers. The Psychology of Computer Programming was not his first book, but it was his first blockbuster. Aspiring writers may find it encouraging that Weinberg had difficulty finding a publisher who would take it. He persisted, and finally found a publisher. When I reread parts of that book recently, I remembered how radical they seemed in 1971. As I look around at today's programmers, I see that their underlying ethic and approach contain much that came from that book  -- even though few programmers have ever heard of it.

This summary is no substitute for reading the book. I have left out many good parts that are hard to summarize. For example, I'd like to steal the entire chapter on plagiarism. If you want or need to write, this book can help. It is full of practical advice that can help you succeed.


The Art of Computer Programming, Vol. 4, Fascicle 4 by Donald Knuth (Addison-Wesley, Reading MA, 2006, 128pp, ISBN 0-321-33570-8, www.awprofessional.com, $19.99)

Don Knuth received the ACM Turing award in 1974, became a Fellow of the British Computer society in 1980, was a charter recipient of the IEEE Computer Pioneer award in 1982, and received the J.D. Warnier prize for software methodology in 1989. He holds the unique title of emeritus professor of the art of computer programming at Stanford University.

When I reviewed the second edition of volume 3 of The Art of Computer Programming (Micro Review, Sept/Oct 1997), I compared the entire work to Herman Melville's Moby Dick. I did not mean that it constitutes an obsession on Knuth's part. Rather, it is, as Moby Dick is to students of literature, a work that you should study when you begin your career and reread as the years go by. Unfortunately, this is only partially possible. Though Knuth announced six volumes in 1969, he has to date completed only three, and there is no firm schedule for the rest. In fact, his greatest accomplishment, his single-handed design, programming, and documentation of the TeX system for document preparation, intervened. He spent many years developing that tool and then spent more years using TeX to "reimplement" the first three volumes.

Knuth has now devised a scheme for publishing the remainder of The Art of Computer Programming a little more quickly. Inspired by Charles Dickens, a nineteenth century English author who published novels in serial form, Knuth has begun to publish volume 4 in parts, or fascicles. In the last year he has brought out 4 such installments. The first fascicle, long-time Knuth fans will be delighted to hear, describes MMIX, an imaginary computer to replace the thirty-five year old MIX, the imaginary computer he used to describe algorithms in his original work. While MIX represented an idealized mixture of the assembly languages of 1960s era computers, MMIX is "A RISC Computer for the New Millennium."

Volume 4, as originally announced in 1969, covers combinatorial algorithms. Fascicles 2 and 3 deal with generating tuples, permutations, combinations, and partitions. These lead up to fascicle 4, which deals with generating trees. This fascicle also reviews the history of generating combinatorial patterns. For example, King Wen devised the I Ching in 1143 BC, and it is still a bestseller today. It has 64 chapters, corresponding to 64 hexagrams in which each of the six lines has one of two values -- yin or yang.

I can't in good conscience urge you to rush out and buy this book (unless you're a librarian). Aside from designers of searching algorithms, most people will not find it directly relevant to their work. Nonetheless, it is important as part of a coherent encyclopedia of computer science. And there is the added incentive that Knuth will pay you $2.56 for each typo that you find.  

Like the monks moving the Tower of Hanoi, Knuth soldiers on. I hope he lives long and prospers, and I hope he never finishes.


Challengers

Our industry has many stories of challenges to accepted ways of doing things. Some of the challenged leaders lost their positions. Others held on. Here are books about new technologies that challenge accepted leaders.

From Java to Ruby -- Things Every Manager Should Know by Bruce Tate (Pragmatic Bookshelf, Raleigh NC, 2006, 164pp, ISBN 0-9766940-9-3, www.pragmaticprogrammer.com, $29.95)

Bruce Tate is a consultant specializing in persistence and lightweight development in Java and Ruby. He is the author of the award winning Better, Faster, Lighter Java and a number of other books. He wrote this book for managers, or for developers who are advising managers, who are considering moving some development projects from Java to Ruby.

Java has come a long way since its introduction eleven years ago. In the May/June 1996 Micro Review, I described the design processes by which C++ and Java put themselves forth as object-oriented successors to C. I also wrote at the time:
I think Java will eventually replace C, but I think C++ will persist as its competitor for a long time. That conflict will probably follow the model of the RISC vs CISC wars, so that ten years from now it will be hard to know which is which.
Those ten years have gone by, and Java has acquired a lot of the complexity of C++, especially in the competing frameworks that developers must evaluate and learn to use. Meanwhile, a number of more nimble languages have acquired large communities of users. According to Tate, one of those languages, Ruby, in the form of the Ruby on Rails framework, presents a better solution than Java for an important class of problems: database-backed web applications.

Tate makes the point that moving to a new computer language is risky in many ways. You should not consider it unless you see serious problems with your current situation. Tate suggests that you consider Java's greater complexity and lower productivity as risks to be balanced against the risks of moving to Ruby. He sees a large part of Java's complexity as coming from the various frameworks that Java programmers must use. He compares this with the simplicity and productivity of Rails.

Tate presents other arguments and provides greater detail. He doesn't try to decide for you, but if you decide to try Ruby, Tate provides detailed strategies for migrating and for coexisting with Java. Tate acknowledges that not everybody agrees with his point of view. He has a pro-Ruby bias, but he presents the arguments on both sides. He includes the comments of many industry experts, most notably Martin Fowler, who are frustrated with Java's deficiencies. 

If you are seriously considering a change of this sort, you should read Tate's book carefully. 


Introduction to DITA -- A User Guide to the Darwin Information Typing Architecture by Jennifer Linton and Kylene Bruski (Comtech, Denver CO, 2006, 348pp, ISBN 0-9778634-0-9, www.comtech-serv.com, $50.00)

Most software products require some sort of documentation, above and beyond what the bare user interface provides. Providing that documentation has traditionally been the task of technical writers. Those writers produced manuals: printed or online books that covered the subject sequentially. 

Over the last ten to fifteen years, many movements have converged upon a model of documentation that throws away the book. In this model, writers write topics -- atomic pieces of information that they recombine as needed and present to users online on demand. Users press a help button specific to the task they are working on or use indexes, tables of contents, or search engines to find the topics they need. Topics typically describe procedures, but they can also explain concepts or provide reference information.

As this model has developed, writers have tried to achieve its goals by using the available book-oriented tools. In the area of structured writing, this meant using the Docbook system, which was originally developed in the 1980s to work with SGML (Standard General Markup Language, an ancestor of XML). The Docbook DTD (document type definition) is in widespread use with XML publishing tools today.

Darwin Information Typing Architecture (DITA) marks a clean break with the book model. Its designers at IBM started from topics. They introduced a system of maps to take the place of the structure imposed by a book. Maps externalize dependencies and cross references, which facilitates automated recombination and reuse of topics.

Until now, there have been few organized presentations about DITA for writers. Linton and Bruski try to fill that need. They build the book around a complete online help system developed in DITA from the ground up. If you work your way through it, you will learn how all the pieces fit together. 

Unfortunately, the book does show signs of the speed with which it has been brought to market. Its structure is a combination of parts, sections, and lessons, but no chapters. It appears to superimpose a book's outer trappings onto a set of lecture notes and lab instructions. Also, the editing leaves a lot to be desired.

If you are in a hurry to understand DITA, this book can help. If not, you might want to wait for the second edition.

Sunday, June 25, 2006

More on Old Topics

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

This time I look at interesting books on subjects I have touched on in recent reviews.

Globalization

The books in this section give interesting perspectives on the dark side of globalization.

In Defense of Globalization by Jagdish Bhagwati (Oxford, New York NY, 2005, 320pp, ISBN-13 978-0-19-530003-1, www.oup.com, $15.95)

Jagdish Bhagwati is a Columbia University economist. His 1993 book, India in Transition, detailed problems with the bureaucracy that had grown up in the decades after India's independence from Britain. The reforms that he endorsed in that book have contributed greatly to India's rapid economic advance in recent years.

This book is a paperback edition of his widely acclaimed 2004 book about globalization. In it he answers the critics of globalization who point to its dark side. Bhagwati argues that many of these criticisms are exaggerated or simply wrong.

Bhagwati begins by recognizing that the discussion of this subject is often highly emotional, with fears masquerading as evidence and neither side listening to the other. He listens carefully to the anti-globalization advocates, articulates their concerns, and then addresses those concerns. In particular, many critics claim that globalization lacks a human face. By this they mean that economic globalization has adverse social consequences. Bhagwati rejects this notion but still addresses the social concerns that the critics cite. As he puts it, he discusses "the design of institutional changes, both domestic and international, that are necessary to make the generally good effects of globalization even better."

Bhagwati's stature as an economist and his careful arguments make his rosy view believable. If you wish to hear an informed argument for the benefits of globalization, this is the book to read. 


Globalization and Its Enemies by Daniel Cohen (MIT, Cambridge MA, 2006, 256pp, ISBN 0-262-03350-X, mitpress.mit.edu, $27.95)

Daniel Cohen is a professor of economics at the École Normale Supérieure, an economic advisor to the French prime minister, and an op-ed columnist for Le Monde. Like Thomas Friedman in The World Is Flat (Micro Review, May/June 2005), Cohen sees todays globalization as the third wave of a process that began with the Spanish conquistidors.

Globalization has not usually brought wealth. India was just as poor in 1913 as it was in 1820. Globalization has also brought terrible consequences, but these have often been completely unintentional. Cohen cites Germaine Tillion's account of the impoverishment of an Algerian village as a result of French actions to eradicate malaria and typhoid and to reduce the village's isolation. Twenty years later, the lack of disease had led to a population explosion. Shepherds increased the size of their flocks, destroying the soil. The roads to the outside allowed some people to become richer by exporting their sheep, while others grew poorer. The traditional societal values disappeared.

According to Cohen, the enemies of globalization fall into two camps: those who decry the westernization of the world and those who see it as a battle in the global class struggle. Both camps share the view that globalization imposes a model that people do not want. But Cohen believes the opposite. Global communication lets people all over the world see the films and television programs of the wealthy nations. Many wish to share in the lifestyle those programs depict, but they see no way to do so.

Cohen sees globalization as proceeding efficiently in the northern hemisphere but not in the southern. He cites Jared Diamond's Guns, Germs, and Steel (Norton, 1996) to explain why this is true.

One of the most contentious issues in globalization is intellectual property. For example, the global AIDS epidemic is manageable in the north but runs rampant in the south. The difference is the general availability in the north of drugs to control the disease. Intellectual property laws make these drugs difficult to obtain in the impoverished south.

This small book contains many interesting ideas and uncommon points of view. I recommend it.  


Database Design

The Art of SQL by Stéphane Faroult with Peter Robson (O'Reilly, Sebastopol CA, 2006, 367pp, ISBN 0-596-00894-5, www.oreilly.com, $44.99)

SQL (no longer an acronym) is the standard language for posing queries to databases. Faroult is a database consultant who has worked on query performance issues for more than 20 years. He regards each new performance challenge as a battle to be fought against an army of database rows. He titled his book as an allusion to Sun Tzu's Art of War. He hopes to pass on his "battlefield" experience to help you write good SQL code. He carries the battle metaphor into his text. For example,
The way that we have to attack that data depends on the circumstances and conditions under which we have to fight the battle. Our attack will depend on the amount of data from which we retrieve our result set and on our forces (the filtering criteria), together with the volume of the data to be retrieved.
Faroult takes you through all of the aspects of performance tuning -- from creating a good design to working with a bad one. He covers a set of standard SQL situations and describes patterns to handle them. He even explains the basic idea of relational databases and shows how using the model correctly can result in code that performs well.

Occasionally, Faroult breaks out a principle and displays it with an owl icon. Examples include the following:
  • A confused query can confuse the optimizer. Clarity and suggested joins can help the optimizer provide good performance.
  • To reduce the sensitivity of queries to increases in the volume of data, operate only on the data that is strictly necessary at the deeper levels of a query. Keep ancillary joins for the outer level.
  • There is no need to code explicitly what the database performs implicitly.     
Tuning the performance of database applications can be a dull subject. Faroult presents it in an interesting way. If you write database applications and you've never studied performance tuning, you should read this book.

Interaction Design

In the Sept/Oct 2000 Micro Review, I looked at Alan Cooper's The Inmates Are Running the Asylum. That book presents the business case for a proposed new profession called interaction design. At that time Cooper promised a subsequent book to explain how to do interaction design.

About Face 2.0 -- The Essentials of Interaction Design by Alan Cooper & Robert Reimann (Wiley, Indianapolis IN, 2003, 504pp, ISBN 0-7645-2641-3, www.wiley.com/compbooks, $35.00)

In 1992 Alan Cooper gave up programming to devote himself to making products easier to use. The first fruit of this effort is his highly regarded book, About Face: The Essentials of User Interface Design (IDG, 1995). 

While Cooper believes that the design principles in About Face are right, he has decided that the audience is wrong. The book starts from the premise that programmers, by default, do most user interface design. As a result, Cooper talks primarily to them, trying to help them design good interfaces. Unfortunately, however, even though programmers would like to design good interfaces, they don't have the time, and often don't have the skills to do so. Moreover, programmers face an overwhelming conflict of interest. 

Competitive demands force programmers to push their systems and their tools beyond their limits. To survive, they must simplify the development process. Making programs easy to use conflicts with making development easy. Programmers have no time to develop  interfaces that mirror users' views of the task. They choose an easy-to-develop interface that mirrors the program's inner workings. Programmers understand the interfaces that result, so they don't see why those interfaces confuse and frustrate users.

The subtitle of the 2.0 version shows the change of audience. Now he is writing for interaction designers. The 3.0 version will be for the same audience, but with more emphasis on online interactions.

This book is much too dense to summarize. The authors present a comprehensive view of the strategy and tactics of designing software that focuses on the needs of users. If you'd like your software to focus on the needs of your users, you probably have a long row to hoe. Reading this book would be a good first step.


Media

Deep Time of the Media -- Toward an Archaeology of Hearing and Seeing by Technical Means by Siegfried Zielinski (MIT, Cambridge MA, 2006, 304pp, ISBN 0-262-24049-1, mitpress.mit.edu, $33.95)

Zielinski is a professor of media and communication studies. In this book he describes a field of his own invention: media archaeology. 

The highly respected science writer John McPhee coined the term "deep time" as an analog to deep space (Basin and Range, 1981). It refers to things so long ago that our brains cannot grasp the magnitude of the interval. We are in deep time when we consider the age of the Earth or the lengths of geological ages. To this concept, Stephen Jay Gould added another dimension that represents biological diversity (Wonderful Life, 1991). Zielinski's deep time of the media is relative to internet time. From that standpoint, the 1500s are ancient. That is where his archaeological investigations begin. The book describes his digging methods and the discoveries he unearthed. A collection of skulls of female Italian criminals seems to have little to do with what we think of these days as "the media," but Zielinski connects them and their collector, Lambroso, to early twentieth century films.

With nearly a hundred pages of notes, bibliography, and index, this is an academic book. Its dry style follows the standard for such books. Yet, Zielinski manages to convey the excitement of finding the turning points that push media history in one direction rather than another. The fascinating illustrations make the book pleasant to page through.