Pointers for Learning Topics

Java

The developers of Java at Sun Microsystems have extensive tutorials on the language and its supporting libraries and frameworks. You should learn the basics of the language and the basics of Swing.

XML

XML is a data exchange technology related to HTML. It is a standard for the web and its development is coordinated by www.w3c.org. You can find an overview of XML there, as well as complete specifications, discussions, etc.

You probably want to start with a simple introduction: www.brics.dk/~amoeller/XML/

There are many tools available for parsing XML.

Basic C++ and Standard Template Library

You should all have strong programming skills in C++, know how to use the tools on Unix and Windows for the language, and know about the standard C++ libraries.

In case, you do not, you can start with this tutorial, and this STL tutorial.

A good book on C++ for people who already know how to program is Andrew Koenig and Barbara E. Moo, Accelerated C++: Practical Programming by Example, Addison-Wesley, 2000.

To learn about the Standard Template Library in depth, you should read Nicoalai M. Josuttis, The C++ Standard Library: A Tutorial and Reference, Addison-Wesley, 1999.

Once you feel very comfortable writing programs using all the features of C++, and in using the STL, you should improve your style and knowledge, by reading the excellent books by Scott Meyers:

Advanced C++ and Generic Programming

Once you are very proficient in C++ and the STL, you should learn about the principles behind the design of the STL, namely generic programming, which is the use of templates.

First, the book, Herb Sutter, Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions, Addison-Wesley, 2000, introduces generic programming through a series of examples.

To see how to extend the STL and write your own library code, read Matthew H. Austern, Generic Programming and the STL: Using and Extending the C++ Template Library, Addison-Wesley, 1999.

The book, Andrei Alexandrescu, Modern C++ Design: Generic Programming and Design Patterns Applied, Addison-Wesley, 2001, takes generic programming much further. He illustrates the use of "policy" classes (sometimes called "mixins") to design very flexible, reusable code. The examples on memory management and locking are well worth reading. The memory management example illustrates how to use Allocators and to override new and delete.

For scientific applications of generic programming, the book that really showed that you could scrap Fortran and use C++ for numerical work is John J. Barton and Lee R. Nackman, Scientific and Engineering C++, Addison-Wesley, Reading MA, 1994, ISBN 0-201-53393-6. Their example source code can be downloaded from ftp software.watson.ibm.com (129.34.139.5) /pub/SciEng .

To see where all this fits into software engineering, especially in product lines, domain modeling, and generative techniques, read Krzysztof Czarnecki and Ulrich W. Eisenecker, Generative Programming: Methods, Tools, and Applications, Addison-Wesley, 2000.

Unified Modeling Language (UML)

Craig Larman, Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process, 2nd edition, Prentice-Hall, 2001.

G. Booch, J. Rumbaugh and I. Jacobson, The Unified Modeling Language User Guide:, Addison-Wesley, 1999.

Object-Oriented Design - Beginners

Craig Larman, Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process, 2nd edition, Prentice-Hall, 2001.

Design Patterns

The classic Gang-of-Four book that introduced patterns to the software community is still the best reading on the subject: Erich Gamma, Richard Helm, Ralph Johnson, and John and Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1994.

Patterns pages.

Object-Oriented Design

Craig Larman, Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process, 2nd edition, Prentice-Hall, 2001.

More to come...

Software Architecture

Craig Larman, Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process, 2nd edition, Prentice-Hall, 2001.

Christine Hofmeister, Robert Nord, and Dilip Soni, Applied Software Architecture, Addison-Wesley, 2000 is based on the experience within Siemens.

F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, M. Stal, Pattern-Oriented Software Architecture, Wiley, 1996.

Len Bass, Paul Clements and Rick Kazman, Software Architecture in Practice, Addison-Wesley, 1998.

You should also look at the Architectural Tradeoff Analysis Method (ATAM) at the SEI. A good starting point is R. Kazman, M. Klien, P. Clements, ATAM: Method for Architecture Evaluation, Technical Report CMU/SEI-2000-TR-004, 2000.

Frameworks and Product Lines

There is a series of three books that has an up-to-date and fairly complete coverage of frameworks published by Wiley. The basic one is M.E. Fayad, D.C. Schmidt, and R.E. Johnson, editors, Building Application Frameworks: Object-Oriented Foundations of Framework Design. Wiley, 1999.

The FAST methodology used at Lucent is described in D.M. Weiss and C.T.R. Lai, Software Product-Line Engineering, Addison-Wesley, 1999. It defines small domain-specific languages, and uses generative techniques to build applications.

Generative Techniques

J. Craig Cleaveland, Program Generators with XML and Java, Prentice-Hall, 2001.

Krzysztof Czarnecki and Ulrich W. Eisenecker, Generative Programming: Methods, Tools, and Applications, Addison-Wesley, 2000.

K.C. Kang, S. Kim, J. Lee, K. Kim, E. Shin, and M. Huh, FORM: A feature-oriented reuse method with domain-specific reference architectures, Annals of Software Engineering, volume 5, pp.143-168, 1998.

Bioinformatics for Biologists

As a biologist wishing to use the tools and databases that exist, and to understand what they do, and how to interpret the results, then a good starting point for sequences and protein information is the book, Teresa K. Attwood and David J. Parry-Smith, Introduction to Bioinformatics, Prentice-Hall, 1999.

For those who wish to go a bit further into the computing side, such as using Unix and writing some scripts themselves, then I recommend the book, Cynthia Gibas and Per Jambeck, Developing Bioinformatics Computer Skills, O'Reilly and Associates, Inc, 2001.

Bioinformatics for the Tool Builders

Building bioinformatics tools requires a solid understanding of programming, design, and extensibility on the computer side, and an appreciation of the domain of genomics, proteomics, ... as they develop. You have to be constantly learning because the broad area of genomics is advancing so quickly.

You can start with the book, Cynthia Gibas and Per Jambeck, Developing Bioinformatics Computer Skills, O'Reilly and Associates, Inc, 2001.


Last modified on January 21, 2002 by gregb@cs.concordia.ca