Pages: pp. 92-94
Software Estimation: Demystifying the Black Artby Steve McConnell, Microsoft Press, 2006, ISBN 0-7356-0535-1, 308 pp., US$39.99.
I highly recommend Software Estimation: Demystifying the Black Art to anyone who needs to estimate a software project or would like to know more for future projects. Steve McConnell—author of Code Complete Second Edition (Microsoft Press, 2004) and Rapid Development (Microsoft Press, 1996)—again provides readers with useful information on a topic that's not always easy for software managers and programmers to master. Software Estimation gives readers a hands-on approach to performing software estimation correctly, telling them why to do it and where errors originate. Although some organizations give gut-instinct or off-the-cuff estimates, Software Estimation explains why these approaches can lead projects to an unfortunate end. The book isn't a one-size-fits-all approach, and it doesn't argue that software estimation will be easy. However, McConnell says that each of the several existing techniques has appropriate applications for different conditions—such as the project's size, development stage, possible accuracy, and status as iterative or sequential. Practicing programmers or managers can benefit from his book, and it would be a suitable addition to a software project management curriculum. McConnell aimed to provide solid foundations for managers and programmers to estimate software, and he has achieved this.
The book provides an introduction to software estimation, discussing the problems with poor estimates and their potential effects. McConnell also discusses how best to read the book, considering a reader's needs. For example, he recommends that estimators with some time on their hands read the book straight through but offers readers who need to learn more before providing estimations a different reading order. McConnell genuinely appreciates the tasks software professionals encounter, and this book is another example of him giving back to the software community.
Although software project management is a book by itself, Software Estimation only addresses software estimation and the effort required by managers and programmers to develop an effective software estimation environment. The book focuses on how to prioritize this effort for effective software estimation. Such variables as team productivity, software complexity, relevance of past projects, time constraints, lines of code, and other factors can all play a role in determining when the software project will be done. Organizations can create better estimates when they have a body of information including data for some of these variables. McConnell tells readers best practices to establish this base of information.
Software Estimation begins by defining an estimate. McConnell then gives readers tips on how to follow some best practices (for example, the first tip is "distinguish between estimates, targets, and commitments"). Next, McConnell describes the cone of uncertainty and the value of knowing an estimate's location in the cone. The book provides estimation techniques (such as individual expert judgment, decomposition and recomposition, estimation by analogy, and expert judgment in groups) that use hard data and that quantify the process to provide better error tracking. After discussing techniques and variables that can impact them, McConnell discusses some estimation challenges, such as team size, schedules, costs, uncertainty, and politics. This reminded me of the adage, "You can have it good, fast, or cheap—pick two."
Software Estimation is easy to read, provides graphics to better communicate ideas and comparisons, and maintains a consistent look and feel. Chapters are organized to give readers tools to assist with pinning down various estimation efforts and schedules.
Many software books focus on estimation, but this one is commendably concise. Also, the information isn't necessarily new, but the book offers the highest usability for working professionals that I've seen. After reading Software Estimation, I look forward to greater success in software estimation and to having some confidence in estimates, knowing that my estimates are the best I can provide, while continuing to move through the cone of uncertainty.
I highly recommend this book to anyone who wants to get immediately acquainted with software estimation's foundations. I also recommend it to those who are curious about estimation and are considering instituting a better metrics program. Software Estimation's accessibility to a broad readership will help bring together individuals in an organization that prizes estimates.
Virtual Machines: Versatile Platforms for Systems and Processesby James E. Smith and Ravi Nair, Morgan Kaufmann, 2005, ISBN 1-55860-910-5, 656 pp., US$64.95.
Surveying state-of-the-art virtual machines is challenging because it requires a deep understanding of complex hardware and software computing solutions to numerous research issues (spanning low-level hardware virtualization issues as well as operating systems, programming languages, and programming models). And if you're convinced that virtualization is used just in Java and .NET solutions, Virtual Machines: Versatile Platforms for Systems and Processes will (fortunately) destroy that belief.
James E. Smith and Ravi Nair did an excellent job of surveying state-of-the-art virtual machines and presenting all the different solutions to make the book interesting to most computer science and engineering practitioners. The book's technical content and comprehensiveness make it suitable for not only researchers and systems engineers but also educators and students.
Over the past 10 years, the best book I've read on virtualization (and its importance for computer engineering research) was Andrew S. Tanenbaum's seminal Structured Computer Organization (5th ed., Prentice Hall, 2006), which I read as an undergraduate, grad student, and research fellow. Although Smith and Nair's book is for more advanced readers than Tanenbaum's book, Virtual Machines would be a suitable textbook for undergraduate and graduate students studying advanced computer architecture and operating systems. It copiously describes virtualization techniques in all layers of a modern computer system. However, other books should accompany it, especially for undergraduate courses.
The book thoroughly describes the Java Virtual Machine and Microsoft's Common Language Infrastructure, two clear examples of high-level-language virtual machines, in two sections on design and implementation, respectively. However, high-level-language virtual machines are just the beginning; the book discusses several other types of virtual machines. For example, it describes in detail so-called process virtual machines—that is, systems that provide a virtual environment at the program, or process, level. Such a description of a low-level virtualization technique might interest not only those who are working at the application-binary-interface-virtualization level but also researchers and practitioners who are studying or designing higher-level virtual machines or operating systems.
Virtual Machines also includes a good description of system virtual machines—that is, virtual machines that let you run multiple isolated guest operating systems on top of the same host operating system. The description details most of the issues related to designing and implementing these complex virtual machines, spanning processor, memory, and I/O device virtualization as well as several techniques to optimize the system virtual machine's different layers. The book also describes two case studies of system virtual machines—the VMWare Virtual Platform and Intel VTx technology.
As a researcher working on future platforms for system support, I also appreciated the last part of the book, which describes general techniques for virtualizing multiprocessor systems (chapter 9) and some interesting emerging applications (chapter 10). More specifically, I liked the last chapter about emerging applications because it gave me a critical, comprehensive bird's-eye view on state-of-the-art solutions in the field. Although I already knew most of the surveyed solutions, I learned many interesting aspects of those solutions thanks to Smith and Nair's way of presenting and analyzing them.
If you're looking for the latest Java programming text, you shouldn't buy this book. But if you want a well-organized, comprehensive companion for your design work and studies, Virtual Machines is a worthwhile purchase. Its umbrella approach to categorizing existing virtual machines and the authors' different levels of detail will guarantee this volume a long-term "parking space" on your desk. I just suggest you put it next to Structured Computer Organization.
Perspectives on Free and Open Source Softwareby Joseph Feller, Brian Fitzgerald, Scott A. Hissam, and Karim R. Lakhani, eds., MIT Press, 2005, ISBN 0-262-06246-1, 496 pp., US$40.00.
Perspectives on Free and Open Source Software is an important effort to piece together the puzzle that is the open source phenomenon. We can use its portrayal of the phenomenon as a foundation for future research endeavors for applying open source ideas in organizations. The book brings up missing elements of the puzzle by presenting the perspectives of several authors with varying backgrounds. This approach lets editors Joseph Feller, Brian Fitzgerald, Scott Hissam, and Karim Lakhani reveal themes that we should (re)study and methodological points to address. It also provides insights on how certain organizations have applied open source practices.
The book seems to target scholars of various levels and public or private managers. The content is descriptive and integrative, providing in-depth case studies (chapters 11 and 12) to abstract models (chapter 16's social utility model). Because it collects interdisciplinary views on open source, it provides a rich source of information for people involved in researching or in applying those multiple views and ideas. For example, students might wonder, "How can we extend and criticize the status quo of the knowledge in this area?" Or a manager might focus on, "What can I learn and apply from the open source processes and models in my private or public organizational problems?" Through reading this book, readers can expect to find several perspectives to answer these questions. Moreover, the book seems suitable for professors teaching a graduate-level open source course. Of course, because this field is rapidly developing and new studies are constantly being added to the stack of knowledge, it's best to use Perspectives on Free and Open Source Software along with more recent information sources.
In examining free and open source software, the editors brought together five distinct, complementary themes:
These topics overlap somewhat because each author developed his or her chapter independently. Nonetheless, we end up with an interesting, although not exhaustive, dimension of the state of knowledge on free and open source software up to the book's publication in 2005.
The book's insightfulness means you'll likely come up with ideas for future open source studies while reading. The editors' presentation of these studies gives the book more value than the sum of the individual chapters. For example, you might wonder how proper a comparison between open source and commercial software quality and processes (chapter 10) remains after studies reveal that corporations are funding open source developers and that these developers are responsible for a representative source code share (chapter 2). Or, you might question the trustworthiness of self-reported motivational data from volunteers (chapter 2) who are explicitly recognized as ideologically inclined by a certain value system (chapter 16). Furthermore, it's within the scope of the field of ethics to question the intentions of using certain data (such as the contributors' motivation). All these questions came to me as I read Perspectives on Free and Open Source Software.