Software Engineering For Scientists

BIODS 253: Software Engineering for Scientists

Winter 2020-2021

Instructors: Instructors: Vijay Pandurangan and Teri Klein

Units: 2.

Grading options: letter mark, credit/nocredit (pass/fail). Do you want to audit this course? Fill out this form


Standardized Software Engineering techniques, such as cloud computing, virtualization, automated testing, and source control, are becoming increasingly critical for science and research. Software Engineering for Scientists is designed to help researchers, scientists, and non-domain-experts gain hands-on knowledge of the tools and practices that will make your day-to-day work more efficient and less error-prone. Students will learn to adopt the most important and germane of the techniques used in the real world (from startups to large companies) and will provide a good understanding of the tools, approaches, and tradeoffs inherent in writing any kind of program.


Course Syllabus







  • Why is this class timely?
  • What will you learn from this class?
  • What's the difference between Computer Science and Software Engineering?


Overview and Summary of Computer Science

  • What’s inside your computer
  • Hardware Architecture
  • Algorithms, fast vs. slow
  • How to pick amongst different solutions to problems
  • Networking


Using the shell

  • What is a shell?
  • Basic commands, and how to use them?
  • *NIX general design principle (everything is a text file)
  • Pipes, redirects, grep, sed, diff, comm
  • Simple loops, find, GNU parallel
  • ssh, keys


Source Control

  • What is source control and how should I use it?
  • svn/mercurial/GIT
  • Theoretical overview of git blockchain
  • github, users, commits
  • branches, pull requests



  • Why should I test code, and how should I do it?
  • Where do I store data?
  • How often/how should I run tests?


Code Reviews

  • What is a code review, and why should I do it?
  • What should one look for?


Libraries, and Repeatability with Conda, virtual environments

Add bullet points


Cloud computing

  • How to use Sherlock (Stanford's HPC cluster)
  • How to use AWS/GCP, docker, monitoring, and deployment systems



  • What kinds of security considerations should you think through when building systems


Course Format

Class is scheduled for Tuesdays from 10:30am-11:50am. In addition, a recorded lecture (15-30 minutes long) will be made available and will be required to be watched before each class meeting. The lecture will cover one or more topics from both a theoretical and practical perspective. Students will be able to try to work on these techniques. Lectures will be interactive; we will spend time answering questions the students might have, and talking about how these learnings could be useful to their research.


Office Hours

Thursday 10:30AM to noon PT.



We intend for this class to be directly applicable to the work/research of the students. To that end, we hope that each student can use the skills learned here on a project they are working on for another class or research.  We will work with each student to ensure that the scope of the project is sufficient to demonstrate mastery of the skills taught here. If a student doesn’t have an appropriate project, we will assign one.



If students wish to audit the course, please email with a cc to

Course Summary:

Date Details Due