Most course material for my time at UO is posted online in the public domain.  The basic course descriptions and links to the material on github are below.

CH410/510 Scientific programming 

Programming skills are increasingly integral to all aspects of physical and biological research. Programming competency enables science because the researcher is not limited to “canned” analyses and approaches. Rather, a scientific programmer can flexibly learn, apply and tweak existing software as needed to answer scientific questions. This includes conceiving of and analyzing big-data experiments, mining databases of chemical and biological data, performing image analyses, fitting non-standard models to data, and prototyping experiments in silico to facilitate experimental design.
Given the explosion of open source scientific software packages and libraries, a small amount of programming knowledge can set up highly sophisticated analyses. A researcher needs to be able to find already-available tools, set them up locally, and then write a small amount of code to apply these general tools to their specific question.
The course aims to teach these general skills. Students will not learn specific software packages or statistical/computational theory. Rather, the goal is for them to gain basic proficiency in the powerful and extensible Python programming language and have the confidence and skills to identify existing software libraries to leverage to further their research.
Conceptual goals
By the end of the course, students should understand:
  • Basic python: data types, key words, control, functions and extensions
  • Python extensions for scientists: scipy, numpy, and iPython
  • Strategies for dissecting problems and formulating solutions in code
  • Where to go to pick up skills in the future as the need arises

Skill Goals

By the end of the course, students will be able to:
  • Write code to read, parse, and write text files
  • Generate arbitrarily complex custom plots
  • Simulate experimental outcomes to aid in experimental design
  • Regress a mathematical model to experimental data
  • Identify existing libraries for a problem and learn how to use them


Teach the students general programming skills through the lens of actual scientific problems. Rather than teaching programming elements up front, we’ll use a real research tasks that require specific programming elements.

A few example

  • Illustrate reading files and math functions by calculating residue-residue distance from a macromolecular structures downloaded from the protein data bank.
  • Illustrate dictionary types and the importance of code efficiency by parsing high-throughput sequence output
  • Illustrate extension libraries and how to learn how to use them by having them figure out how to process fluorescence microscopy images

Coding will be taught using a collaborative “driver-passenger” model. Students work through exercises in class in pairs, trading between being “drivers” (actually typing) and “passengers” (watching and providing feedback). This fosters conversation (and thus material recall), collaborative problem solving, and helps separate the mechanics of coding from the concepts.

Programming and instruction will be done using the powerful and intuitive jupyter programming framework.

Specific topics covered

  • Graphing using matplotlib
  • Variables and python as a calculator
  • Dealing with files
  • Loops
  • Conditionals
  • Lists, tuples and dictionaries
  • Functions
  • Modules and imports
  • Interactive plots
  • Nonlinear regression using scipy

Term Project

To help them cement their skills and gain independence, students will develop a useful program that addresses a problem in their current research. The code must use a python library that the student identifies that we did not explicitly discuss in class.

BI281H Biochemistry & cellular physiology

Course Goals

  • Survey the key molecular and cellular features shared by all organisms on earth, revealing how life can be understood in physical and chemical terms.
  • Begin to develop intuition and analytical tools to think about life quantitatively and molecularly.
  • Introduce several key, universal systems that are shared across organisms:
    • Serine protease
    • Hemoglobin
    • Glycolysis/gluconeogenesis
    • Citric Acid Cycle
    • Electron transport chain
    • ATP synthase

CH662 Advanced biochemistry

Course goal

  • Prepare students to do research in molecular biology by helping them think molecularly and by introducing tools to study binding interactions.
  • This will be achieved by:
    • Introducing students to controlling conceptual frameworks in biochemistry, with an emphasis on quantitative reasoning.
    • Introducing methods used to study biomolecular properties and function, with an emphasis on binding interactions.