BMI-280/BMI-219 – Scientific Software Development

Details About This Course

Course Prerequisites:

There are no formal prerequisites for BMI-280/BMI-219, however it is assumed that you have a working knowledge of the Python programming language. This course is not about learning how to program, but rather how to improve existing programming skills through the application of proven software development methodology and the use of ancillary software development tools. All examples and class assignments are in Python. If you don't know Python you should either learn it on your own or consider taking PC-204 - Introduction to Object-Oriented Computer Programming in the Fall Quarter. If you're not sure that your programming skills are at a sufficient level for this course, please talk to the faculty course coordinator, Tom Ferrin.

If you want to learn Python on your own, here's a great, FREE, on-line book:

Title: Think Python - An Introduction to Software Design
Author: Allen B. Downey
Publisher: Green Tea Press
Or either of the following are also good reference texts:
Title: Python in a Nutshell - Second Edition (July 2006)
Author: Alex Martelli
Publisher: O'Reilly & Associates, Inc.
ISBN: 0-596-10046-9

Title: Learning Python - Third Edition (October 2007) Author: Mark Lutz Publisher: O'Reilly & Associates, Inc. ISBN: 0-596-51398-4

If you are competent in a programming language other than Python, you'll find it pretty easy to get up to speed with Python. You might start by looking at these four lectures found on the Software Carpentry web site:

Computer Accounts:

Individual Linux accounts on host plato.cgl.ucsf.edu will be set up for use by students in this course, especially for use with the team projects. Be sure to sign up for an account at the first lecture or by coming to see Tom Ferrin in GH-N472. Plato runs Red Hat Enterprise Linux and therefore provides a excellent platform for developing software. If you want to learn more about Linux, a good place to start is here. Once your account has been set up, you can access plato using a Secure Shell. To learn more about the Secure Shell, see this tutorial. Then you can log into plato using the command:
ssh plato.cgl.ucsf.edu -l YourAccountName
where "YourAccountName" is replaced by the account name assigned to you for the course.

You'll also most likely want to use your own laptop or desktop computer for working through course exercises. If your computer runs Linux or is an Apple Mac running OS X, then pretty much all the tools you need are already installed on your computer. If you're a a Windows user, then you can download and install the Cygwin package to gain the functionality you'll need for doing the exercises.

Course Materials:

The lecture slides linked to in the Course Outline were developed from copyrighted material found on the Software Carpentry web site. Notes from similar lectures on that web site were combined, shortened, or omitted in order to fit into this one-unit ten-week course. Additional details on any particular lecture may be available in the full version of the lecture slides available on the Software Carpentry site, so check there first if you have questions. Code samples used in the lectures were developed by the instructors.

Background Reading:

  1. Scientific Software Development Is Not an Oxymoron, S.M. Baxter, S.W. Day, J.S. Fetrow, and S.J. Reisinger, PLoS Computational Biology 2(9):975-978, September 2006.
  2. Where's the Real Bottleneck in Scientific Computing? G.V. Wilson, American Scientist 94(1):5, October 2006. (PDF file available here for UCSF students.)
  3. Software Carpentry, http://www.swc.scipy.org/.