A.2
Computer Science
Even though you're programming for biological
applications, you'll often find yourself venturing into the
realm of traditional computer science. Here are some published
resources to help you find your way.
A.2.1
Algorithms
Mastering Algorithms with Perl;
by
Jon Orwant, Jarkho Hietaniemi, and John Macdonald; O'Reilly
& Associates. The best book for noncomputer scientists who
program in Perl.
Introduction to Algorithms; by Thomas H. Cormen,
Charles E. Leiserson, and Ronald L. Rivest; MIT Press and
McGraw-Hill. This is a really good book on algorithms—in many
ways, the best. It's one of the standard university texts
(arguably the standard text) at both the
graduate and undergraduate levels. It works well as a textbook and as
a reference. Its target audience is computer-science students, so
there is a fair amount of math included, but even nonmathematical
programmers will find this book very helpful.
Fundamentals of Algorithmics, by Gilles Brassard
and Paul Bratley, Prentice Hall. An easy overview of algorithmic
techniques.
Algorithms on Strings, Trees, and Sequences: Computer
Science and Computational Biology; by Dan Gusfield;
Cambridge University Press. This book specializes in algorithms for
strings, including such topics as sequence alignment. It's very
detailed, but even so, not complete: this is a big field! The best
single source on string algorithms, with lots of information about
biological sequence similarity.
The following books are for advanced study.
The Design and Analysis of Computer Algorithms;
by Alfred V. Aho, John E. Hopcroft, and Jeffrey D. Ullman;
Addison-Wesley. This is the classic book on the science of
algorithms.
Introduction to Parallel Algorithms and Architectures:
Arrays, Trees, Hypercubes; by Frank Thomson Leighton;
Morgan Kaufmann. A comprehensive and rigorous text and reference.
Randomized Algorithms, by Rajeev Motwani and
Prabhakar Raghavan, Cambridge University Press. A clear, rigorous
book.
A.2.2
Software Engineering
Software Engineering, Second Edition;
by Ian Sommerville; Addison-Wesley.
A good, general book that covers lots of important topics and
generally avoids taking sides for or against competing styles.
A.2.3
Theory of Computer Science
Introduction to Automata Theory, Languages, and
Computation, Second Edition; by John E. Hopcroft, Rajeev
Motwani, and Jeffrey D. Ullman; Addison-Wesley. The classic text on
computer-science theory.
Computers and Intractability: A Guide to the Theory of
Np-Completeness, by Michael R. Garey and David S. Johnson,
W.H. Freeman & Co. The classic, and superb, book on the topic.
A.2.4
General Programming
The Unix Programmers Manual, Steven V.
Earhart, ed., Harcourt, Brace
and Jovanovich School. This manual
for Unix (whatever version of Unix) is a crash course in computer
science with an emphasis on programming. The design of the
interacting programs, and the concepts of pipes, redirection,
processes, and so on, has been one of the great success stories of
programming. This manual summarizes the system: Part I documents user
programs; Parts II and III document the programming interface. The
programmable shell, and the programs grep,
awk, and sed were some of
the primary inspirations for Perl.
The C Programming Language, by Brian W.
Kernighan and Dennis M. Ritchie, Prentice Hall PTR. C and C++ are
important languages in bioinformatics, and this classic book teaches
C. If you work through the book, attempting all the programming
exercises, you'll have some excellent programming training.
Structure and Interpretation of Computer
Programs; by Harold Abelson, Gerald Jay Sussman, and Juke
Sussman; MIT Press. A really interesting book that looks deeply at
programming in the context of learning a dialect of Lisp.
The Unix Programming Environment, by Brian W.
Kernighan and Robert Pike, Prentice Hall. This book is fun, and it
talks about good software design.