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
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.
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
- Homework: 40%
- Participation: 10%
- Project: 50%
- Class exercises, both interacting with your group and presenting results to the class
- Piazza posts, both asking and answering questions
- Engaging in class discussions
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.
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 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:
- 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.