Electronic Review of Computer Books

[ ERCB Home | New | Feature | Brief | DDJ | Letters | Links ]

[an error occurred while processing this directive]

Summer Reading

Review by Gregory V. Wilson
Copyright © Dr. Dobb's Journal, August, 1998

One sign of how much the Web has already changed our lives is that I'm reluctant to start this month's reviews by saying, "Christmas is a lousy time to try to do any serious reading," because Christmas will be just a fading, calorie-rich, memory by the time this column is published. If I hadn't procrastinated for most of January, you could theoretically have been reading this column on-line three or four months ago.

It's therefore a bit embarrassing to admit how little I know about how the Web actually works. I can stitch together terms like "name server" and "hypertext transfer protocol" as glibly as anyone when I'm sober, but when asked, "Yes, but how does it actually work?" I'm often at a loss. A companion to Ron White's earlier How Computers Work, Preson Gralla's richly illustrated book, How the Internet Works, covers everything from packetization and file compression to cookies and electronic cash. Each topic gets a two-page spread, in which crisp, clear paragraphs of text explain the equally crisp, and equally clear, illustrations. While How Computers Work wouldn't make much sense to someone who wasn't already very familiar with computer technology (hexadecimal notation is used on page 10 without any explanation), How the Internet Works ought to be comprehensible to anyone who feels comfortable using a browser and e-mail. Its only shortcoming is its lack of a glossary, but its readability more than makes up for that.

The second edition of Scott Meyers' Effective C++ is equally well written, but you have to know a fair bit about C++ to appreciate that. As with the first edition, the book's aim is not to teach the language, but to explain how it ought and ought not to be used. The book's 50 rules are divided into seven sections, with titles like "Memory Management" and "Constructors, Destructors, and Assignment Operators." Some of the rules cover things that the language ought to take care of, but doesn't, like making sure that arrays are deleted correctly. Others describe ways of avoiding commonly encountered problems, such as making destructors virtual, checking for self-assignment, and returning objects rather than references. While some of the rules (such as "strive for class interfaces that are complete and minimal") sound a bit nebulous, Meyers backs up all of them with engaging, informative discussion, and plenty of small examples. The first edition of this book taught me a lot about how to use C++; to my surprise, I learned a fair bit more from this new edition, and think it should be on the shelf of every serious C++ programmer.

Software as Capital, by Howard Baetjer, Jr., is about the same size as Effective C++, and is also well written (although the typesetting could have used some work--the book is practically marginless). A follower of the "Austrian school" of economics, Baetjer argues that we owe much of our improved standard of living to the way in which capital structures evolve to capture and reify knowledge. For example, he says that:

"...it is is actually the tool itself -- the new software -- that 'learns.' The client never learns what the designer knows of modularity and information hiding; the designer never fully understands the client's management style to which he is tailoring the system; the programmers never learn why the screens must look like *this* instead of *that*. The only place in which all the relevant knowledge truly resides is the software itself."

The two key ideas here are that we know things collectively that no one person knows, and that this knowledge arises through evolution, rather than planning. To quote Lachmann (who wasn't writing about software, but could have been):

"The capital stock...always contains 'fossils,' items that will not be replaced and would not exist at all had their future fate been correctly foreseen at the date of their investment."

Software as Capital is an engaging and nontechnical look at how our industry creates value. Its only real flaw is its author's uncritical praise of Smalltalk in particular, and object technology in general. As important as these are, they have made much less difference to the way software is developed and deployed than their proponents claim, and have not led to the creation of component markets outside a small number of domains. Baetjer's discussion of the need to design for evolvability was fun to read; I just wish he had devoted a chapter to the economic implications of the Free Software Foundation's "copyleft."

Inside the Java Virtual Machine, by Bill Venners, is not as engaging as Software as Capital, but it is thorough. The Java Virtual Machine (JVM) is the interpreter, or combination of compiler and interpreter, that allows one piece of Java code to execute on any physical processor. Some of this book simply recapitulates the JVM specification, and could have been much shorter: Several of the chapters on instruction groups, for example, could have been compressed into one general explanation and a reference to the spec. The best parts, however, explain not only how the JVM operates, but why it does what it does, and how a JVM might be implemented. Venners' description of the lifetime of a class clarified a lot of things that I sort of knew but wouldn't have been able to explain myself, while his description of how classes are linked dynamically was all new territory for me. I think the book could be improved by omitting some repetitive material, and expanding some of the discussion of "how" and "why" (I'd particularly like an explanation of how exception tables can be implemented efficiently), but it is a good way to get to know the JVM's ins and outs.

Where Inside the Java Virtual Machine is concerned with the generic, Meggitt and Ritchey's Windows NT User Administration is concerned with the particular. The book is a guide for system managers who have to set up, maintain, and troubleshoot large NT configurations. It is prescriptive rather than descriptive, in that it makes some fairly strong recommendations about what to do, and how to do it. I was initially surprised that much of the "how" relies on Perl, but it made sense upon reflection. O'Reilly & Associates, the book's publisher, has historically been closely associated with Perl, and many NT system managers cut their teeth on UNIX.

While Perl might really be the best sysadmin tool for NT, I had to wonder whether it might also be something of a safety blanket for the publisher, the authors, and much of the audience. As someone who has spent much of the last two years moving from UNIX to Windows, I would have enjoyed seeing the book's configuration and auditing scripts presented in Windows' native language, Visual Basic (VB), or to have an explanation of why that wouldn't work. It will be interesting to see whether attempts like this to transplant Perl succeed, or whether VB acquires Perl's most useful characteristics (such as built-in regular expression handling) instead.

The last book on my reading list, The History of Geographic Information Systems, is the only one that I won't be keeping on my shelves. While I enjoyed its anecdotes about graduate students revolting against difficult-to-use software, I didn't learn much about the key concepts of GIS, or about how those concepts evolved. A good history of a scientific field has to describe more than just who invented what; it has to describe what people used to believe, why they believed it, and how they came to change their minds. Brian Hayes' article "The Invention of the Genetic Code" (American Scientist, January- February 1998, http://www.amsci.org/amsci/ issues/Comsci98/compsci9801.html) is a good example of how to do this well; The History of Geographic Information Systems, unfortunately, is not.


Software As Capital: An Economic Perspective on Software Engineering
Howard Baetjer, Jr.
IEEE Computer Society Press, 1998
ISBN 0-8186-7779-1

The History of Geographic Information Systems: Perspectives from the Pioneers
Timothy W. Foresman (editor)
Prentice Hall PTR, 1998
ISBN 0-13-862145-4.

How the Internet Works
Preston Gralla, with Sarah Ishida and Mina Reimer
Ziff-Davis Press/Macmillan Computer Publishing, 1997.
ISBN 1-56276-552-3

Windows NT User Administration
Ashley J. Meggitt and Timothy D. Ritchey
O'Reilly & Associates, 1997
ISBN 1-56592-301-4

Effective C++, Second Edition
Scott Meyers
Addison-Wesley, 1998
ISBN 0-201-92488-9

Inside the Java Virtual Machine
Bill Venners
McGraw-Hill, 1998,
ISBN 0-07-913248-0

How Computers Work
Ron White, with Timothy Edward Downs and Sarah Ishida Alcantara
Ziff-Davis Press/Macmillan Computer Publishing, 1997
ISBN 1-56276-546-9


Copyright © 1998 DDJ Electronic Review of Computer Books
Created 7/10/1998 / Last modified 7/10/1998 / webmaster@ercb.com