BMI-219 – Scientific Software Development

Details About This Course

Limited Availability:

BMI-219 is coordinated with other UCSF spring quarter mini course offerings and enrollment is limited to 12 students. This course is offered as part of the Integrative Program in Quantitative Biology (iPQB) PhD degree program curriculum, and therefore 1st year iPQB graduate students have first priority for enrollment, followed by 1st year students in other UCSF graduate programs. If additional space is available, other graduate students and postdoctoral fellows will be considered. Please contact the course coordinator if you're in this later category and are interested in taking the course.

Course Prerequisites:

The only prerequisite for BMI-219 is a working knowledge of some (any) programming language, preferrably Python. 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 - Fifth Edition (June 2013) 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 probably find it pretty easy to get up to speed with Python. You might start by looking at this web page 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 Wiki Page:

This course is all about using tools to make software development easier. One such tool is Trac, an enhanced wiki and issue tracking system for software development projects. We've set up a BMI-219 Trac Page (password protected) for keep track of team projects and other course-related information. Once the project teams have been formed and computer accounts created, you'll want to use Trac for documenting progress on projects, accessing the most recent version of your team's source code, and keeping track of any remaining work or outstanding issues with your team's project.

Course Materials:

The lecture slides linked to in the Course Outline were originally developed from material found on the Software Carpentry web site. Notes from similar lectures on that web site were modified in order to best match the needs of this intensive three week hands-on course targeted for UCSF PhD students. The Software Carpentry course has continued to evolve and is now different from this course in several significant ways. Code samples used in our 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. How Do Scientists Really Use Computers?, G. Wilson, American Scientist 97:8-10, September 2009.
  3. 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.)