Syllabus



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

The Fall 2021 semester will be back to on-campus teaching. The delivery of course content will occur via two weekly lectures (Tuesdays and Thursdays) as well as one weekly pair-programming section. Specific details on the pair-programming sections and lecture sessions can be found on the Coursework Page.

Attending these sessions is mandatory. Lectures will consist of considerable interaction and discussion and will be greatly enhanced by student participation.

The main programming language taught throughout the course is Python. In addition, a voluntary C/C++ mini-class that consists of 10 lectures will be held during the semester. This primer is highly recommended if you like to strengthen your skills in a programming language that is closer to the hardware and widely used in research and industry. If you plan on taking CS205 in the spring semester, please consider taking this primer as basic knowledge of C/C++ will be required for that class.

Textbooks

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 group project policies.

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

Course Grade Breakdown

Participation

Code

We expect you to write high-quality and readable, tested code. A quality code is well commented in places where it is not straight forward to deduce the logic from code itself. We expect you to think about aspects such as modularity, reusability, code duplication and error handling when you design and write code. Your code is the blueprint of your work. If you build a house with weak blueprints there can (and will) be surprises, the same is true for software/code design.

Exams

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.

Prerequisites

Programming knowledge in Python at the level of CS50 and CS109 (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). If you use code not written by yourself, you must pay close attention not to violate any possible licensing issues. 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 exhaustive, 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: