After successful completion of this course, you will be able to:
Use Python, including its advanced features to write scientific programs
Understand what features of Python (or for that matter any programming language) make up its language execution model and how these features impact the code you write: e.g. how modularity, abstraction, and encapsulation can be used to solve problems
Write these programs with good software engineering practices
Utilize data management techniques to store data, starting from a good understanding of data structures.
Combine these techniques together to write large pieces of software (you will do a group project for this), working in a team of scientists, programmers, etc.
Evaluate and test software to see which one your group ought to use.
Be a capable unicorn: able to contribute on both the science and software engineering sides of things.
Hit the road running as a scientist.
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.
- Version control
- Python (basics)
- How Python works
- Software documentation
- Software testing
- Object-oriented programming
- Data structures
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.
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
- Homework: 25%
- Participation: 25%
- Project: 50%
- Pair programming exercises are 20% of the of the participation grade
- Piazza posts, both asking and answering questions
- Engaging in class discussions
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.
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
Academic Integrity and Academic Dishonesty. All
forms of academic dishonesty will be forwarded to the Harvard College Administrative Board.
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:
- If you have a name and/or set of pronouns that differ from those that appear in your official Harvard records, please let me know!
- If you feel like your performance in the class is being impacted by your experiences outside of class, please don’t hesitate to come and talk with me. I want to be a resource for you. Remember that you can also submit anonymous feedback (which will lead to me making a general announcement to the class if necessary to address your concerns). If you prefer to speak with someone outside of the course, you may find helpful resources at the Harvard Office of Diversity and Inclusion.
- I (like many people) am still in the process of learning about diverse perspectives and identities. If something was said in class (by anyone) that made you feel uncomfortable, please talk to me about it. (Again, anonymous feedback is always an option.)
- As a participant in course discussions, you should also strive to honor the diversity of your classmates.