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.


Due to remote learning during the ongoing pandemic, delivery of course content will occur via synchronous and asynchronous methods. Synchronous content will be delivered via pair-programming exercises while asynchronous content will be delivered via remote lectures. Specific details on the pair-programming sections and lecture sessions can be found on the Coursework Page.

Although all lectures will be recorded, you are encouraged to attend live if possible. Lectures will consist of considerable interaction and discussion and will be greatly enhanced by student participation.

You have the option of attending C++ modules as an alternative to the Python content. These C++ modules will replace specific lectures during the semester. The Coursework Page contains exact details on which lectures will be replaced. You may elect to complete assignments in C++ or Python during the semester. You will receive five bonus points for completing an assignment in C++. If you choose to complete your final project in C++, then the enhanced difficulty will be factored into your final project grade.


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 homework 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 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. 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 portion of the population. This is despite some of the pioneers in computer science being from groups that are historically and presently underrepresented. Whenever possible, I will try to highlight the contributions that people have been from a variety of backgrounds. To start, here is a list of some really nice references.:

I welcome any additions to this list you may have!

In an ongoing effort to foster a more inclusive environment in computer science, recent initiatives have attempted to overcome some barriers to entry for underrepresented groups:

Like the list above, this list is not enhaustive, but I welcome any additions and suggestions you may have.

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: