The books I look at this time are about pervasive technologies. The publishers are highly respected producers of books for programmers and systems designers, but these books are for a wider audience.
Computers as Components: Principles of Embedded Computing System Design by Wayne Wolf (Morgan Kaufmann, San Francisco CA, 2001, 688pp, $64.95)
Wayne Wolf is a professor of Electrical Engineering at Princeton University, a former employee of AT&T Bell Laboratories, and a graduate of Stanford University. He is editor-in-chief of IEEE Transactions on VLSI Systems and a well known researcher in the fields of embedded systems and hardware/software codesign. He is eminently qualified to write this much needed book.
Embedded systems are as old as microprocessors, which means they have been around for about thirty years -- longer if you count dedicated minicomputer-based "turnkey" applications, such as the clinical laboratory data acquisition and reporting systems I worked on in the 1960s. Creating such systems has remained challenging. Programming and debugging facilities tend to be limited by the often primitive and non-standard nature of the underlying hardware. In the late 1980s, for example, when object oriented high level languages and integrated development environments were already widely available, I worked on a new version of a medical instrument. It used an 8-bit Intel 8085 microprocessor (introduced 12 years earlier), programmed in assembly language, to control a complex control panel and an automated data acquisition system. The underlying software was based on a minicomputer operating system I had worked on in the 1960s. The debugger allowed me to examine the contents of memory (in hexadecimal) and to place a breakpoint at a specified memory location. I had no simulator -- the test bed was the instrument itself.
Designing hardware and software to work together has lagged behind software development on standard software platforms. UML diagrams, CRC cards, concurrent engineering, and design reviews, for example, are in the main stream of software development, but embedded system development projects rarely use them. In her introduction, Lynn Conway, herself the coauthor of a landmark book, praises this book for providing a systematic approach to embedded system design, based on such systems development techniques and processes.
Now, as the market for embedded systems expands exponentially, the time has come to civilize this frontier. Wayne Wolf's book shows the way to do that. It is essentially a course in computer science and software development, oriented totally to the problems of embedded systems designers. Wolf assumes that his readers are not computer scientists, so he covers many topics that other books take for granted. He complements this self-contained introduction to embedded computer science with a number of detailed design examples, taken from real projects at places like Bell Labs.
If you are planning to teach a course in embedded systems design, or if you are a long time practitioner and want to bring your skills up to date, this is the book for you.
Introducing .NET by James Conrad et al. (Wrox, Birmingham UK, 2000, 462pp, www.wrox.com, ISBN 1-861004-89-3, $34.99)
Sixty-five million years ago, dinosaurs ruled the earth. A huge meteor struck, and the environment changed. The dinosaurs died out, and eventually we arrived at today's flora and fauna.
Ten years ago, Microsoft ruled the computer world. Objects, the web, Java, and XML struck in rapid succession, and the environment changed. Software can evolve more rapidly than dinosaurs could, and Microsoft's new platform, .NET, makes MS-DOS and Windows 3.1 look Jurassic by comparison. The .NET platform addresses the challenges of objects, the web, Java, and XML.
To support object-oriented development, .NET replaces COM with the common language runtime (CLR), which allows all Microsoft languages to share an object management environment. Object have formats that are independent of source language. They share garbage collection, exception handling, and a common class library, including common datatypes.
To support deploying applications on intranets or the web, Microsoft is developing ASP.NET, a complete overhaul of the slow, error-prone, language-limited, non-object-oriented ASP (active server pages) that today's developers are forced to use. Complementing that development is ADO.NET, which replaces today's ADO (ActiveX data objects) in much the same way that ASP.NET replaces ASP. Finally, the simple object access protocol (SOAP) and Microsoft's web Services and web Forms promise to make web-deployed applications look very similar, in appearance and in implementation, to applications deployed on desktop systems.
Microsoft's response to Java is a little more subtle, entangled as it is in legal wrangling. The .NET platform moves toward Java's "write once, run anywhere" promise by encapsulating the operating system in a common set of classes that have different implementations on different platforms. These serve a function similar to the Java virtual machine. Microsoft has also sidestepped Sun's control of Java by developing its own Java-like language called C#. While similar in form and philosophy to Java, C# introduces a few improvements. For example, it standardizes the getting and setting of object properties.
Finally, to mix a metaphor, Microsoft has embraced XML and jumped into it with both feet. Much of the .NET functionality depends on the XML-formatted metadata that accompanies every object. XML also provides the base format for remote interfacing, and it serves as the working data format for ADO.NET. Both the System and System.Data class hierarchies devote a namespace to XML.
Wrox Press specializes in books for programmers. They have assembled a team of 10 men, all with programming backgrounds, to put together a survey of Microsoft's .NET plans, based on Microsoft's public statements and on their own experiences with the public beta release of the .NET software development kit. They give a pretty coherent picture, hedged in disclaimers, of what the first release -- probably still about a year away -- will look like. If you expect to develop software for Microsoft systems in the next few years, you need to know all about .NET, and these authors are excellent guides to the territory. Don't expect definitive information, but if you can stand the missing pieces and loose ends of a work in process, this book will get you up to speed.
Learning XML: Creating Self-Describing Data by Erik T. Ray (O'Reilly, Sebastopol CA, 2001, 368pp, www.oreilly.com, ISBN 0-596-00046-4, $34.95)
Erik T. Ray (not to be confused with Eric J. Ray, whose HTML books I reviewed here a few years ago) describes himself as a software wrangler and XML guru for O'Reilly and Associates. He wrote this relatively short book to give readers a bird's eye view of the XML field. He succeeds remarkably well at that, but it is more than a bird's eye view. At appropriate points Ray delves deeply into the details by presenting complete, clearly written examples.
If you plan to work with XML to produce technical documentation, this book pays for itself many times over. Ray includes a completely worked out DTD called Barebones DocBook, which you can probably use as is. He also includes an XSLT stylesheet for producing HTML from Barebones DocBook documents.
If you plan to write programs to process XML, you might use, and can learn a lot from reading, Ray's Perl code for an XML syntax checker.
Many authors dump sample code into their books, but the XML, XSLT, and Perl examples in this book are well organized, clearly formatted, well annotated, and easy to understand.
For brevity, completeness of coverage, clarity of writing, and usefulness of examples, this is the best XML book I have seen. I recommend it highly.