Learning Objectives

After successful completion of this course, you will be able to:

Course Topics

The primary goal of this course is to teach you how to develop effective software for scientific applications. In order to achieve this goal, there are several non-negotiable topics that must be included in the course. We will be concerned with two primary thrusts: System and Software Engineering and Language. Moreover, we aim to provide you with a suite of modern software development techniques and workflows. The following list includes topics that will be covered in this course. See the Course Schedule for details on how the topics fit together.

Lecture Attendance

Lecture attendance is mandatory and essential. A large portion of lecture time will be spent writing programs and working in groups. In order to encourage participation, students will be required to present solutions to in-class exercises.

Attendance at guest lectures is mandatory and will be checked by passing around sign-in sheets.

You must bring your laptop to lecture. See me if you do not have a laptop.


There is no required course textbook. However, the course content will draw from various sources. We will cite the source when appropriate. Please consult the Resources Page for recommended textbooks and additional resources.

Assessment Procedure

Refer to the Coursework Page for specific details on the grading scheme for the homeworks and groupwork policies.

The Project Page has a breakdown of the project components and deliverables.

Course Grade Breakdown


Code We expect you to write high-quality and readable, tested Python code. You should strive for doing things the right way and think about aspects such as reusability, error handling, etc. We also expect you to document your code.


We will not have standard midterm or final exams. Instead, we will have a final project presentation during the scheduled final exam period. Details on the project can be found on the Project Page.


Programming knowledge in Python at the level of CS50 and CS 109 (or above). Besides this, you should have interest or investment in scientific computing.

Academic Integrity

You are welcome to discuss the course's material and homework with others in order to better understand it, but the work you turn in must be your own unless collaboration is explicitly allowed. You may not submit the same or similar work to this course that you have submitted or will submit to another. You must acknowledge any source code that was not written by you by mentioning the original author(s) directly in your source code (comment or header). You can also acknowledge sources in a README.txt file if you used whole classes or libraries. Do not remove any original copyright notices and headers. For more information please consult the Harvard academic integrity guidelines: Academic Integrity and Academic Dishonesty. All forms of academic dishonesty will be forwarded to the Harvard College Administrative Board.

Special Accommodations

If you have a documented disability (physical or cognitive) that may impair your ability to complete assignments or otherwise participate in the course and satisfy course criteria, please meet with us at your earliest convenience to identify, discuss, and document any feasible instructional modifications or accommodations. You should also contact the Accessible Education Office to request an official letter outlining authorized accommodations. The Extension School is committed to providing an accessible academic community. The Disability Services Office offers a variety of accommodations and services to students with documented disabilities. Please visit Accessibility and Student Services for more information.

Diversity and Inclusion Statement

Software development, like many fields of science, has historically only been represented by a small sliver of the population. This is despite some of the early software pioneers being women (see Ada Lovelace and Grace Hopper for two examples). Recent initiatives have attempted to overcome some barriers to entry: Made w/ Code. I would like to attempt to discuss diversity in software engineering from time to time where appropriate and possible.

Please contact me (in person or electronically) or submit anonymous feedback if you have any suggestions to improve the quality of the course materials. The best way to provide anonymous feedback is to use Piazza, which allows you to provide comments anonymously.

Furthermore, I would like to create a learning environment for my students that supports a diversity of thoughts, perspectives and experiences, and honors your identities (including race, gender, class, sexuality, religion, ability, etc.) To help accomplish this: