Bioinformatics is at a crossroads. We work in a field that is changing every day, increasingly moving from specific solutions created by single researchers working alone or in small groups to larger, often geographically dispersed programs enabled by collaborative computing and open software. This book represents an important development, giving the reader an opportunity to discover how the use of open and reusable Java code can solve large bioinformatics problems in a software engineered and robust way. I work with one of the authors of this book every day, on the National Cancer Institute's cancer Biomedical Informatics Grid (caBIG™) project, and I can attest that they are well suited to share with their readers both their experience in the development and use of bioinformatics software, as well as their interest in solid software engineering and interoperability.
In its short history, bioinformatics has become an increasingly important part of how scientists involved in biological research go about their work. This has lead to an explosion of interest in the subject, and a similar explosion in tools and data resources for researchers to learn and use in their work. Historically, tools for bioinformatics have been idiosyncratic and are custom-developed by the end-users (or those close to them) in an iterative fashion until the specific immediate problem is solved. This has led to a balkanization of informatics systems, sometimes yielding multiple, incompatible systems at a single institution for a single application. This trend is beginning to change, with groups throughout the research community developing standards and shared data models, in areas ranging from gene expression arrays to pathways and proteomics. With a range of emerging software capabilities and a growing interest in interoperable tools and standards, bioinformatics practitioners have an ever-expanding toolbox from which to draw on to develop the basic software infrastructure behind their work. Similarly, with the increasing interest within the biomedical informatics community in the use of well-defined software engineering methodologies, and disciplines like design patterns and modeldriven architecture, the software developed there will increasingly last longer, be easier to maintain, foster interoperability and reuse, and ultimately be more robust and cost effective.