Syllabus
Course Objective
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.
A short pdf
version of the syllabus can be downloaded
here.
Learning Objective
After successful completion of this course, you will be able to:
- Use Python, including its advanced features to write scientific programs
- Have a basic idea how the Python interpreter works
- Understand what features of Python 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 programs with good software engineering practices. These practices include: working on remote machines, version control, continuous integration, documentation and testing.
- Utilize data management techniques to store data, starting from a good understanding of data structures to databases.
- 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 able to contribute on both the science and software engineering sides of things.
Prerequisites
You should have some basic familiarity with programming (functions, variables, constants, differences between integer and floating point, etc.) at the level of CS50. Some comfort with a tool to edit text files is beneficial. Any text editor or IDE will suit this purpose.
The student should have passed a basic calculus class. The project will require the use of the chain rule. The lectures will review the necessary fundamentals required to succeed with the class project.
Besides this, you should have interest or investment in scientific computing.
You can download Homework 0 for self-assessment here (not graded). You do not need to be able to solve all problems in order to take this class.
Jupyter Notebooks
Jupyter notebooks are great for code prototyping and learning how to use new features and APIs. However, they are not suitable for large software development projects! One reason for this is because code development in Jupyter notebooks is a nonlinear development process and there is presently no good solution for version control of Jupyter notebooks. A second reason is the question of efficient source editing. A helpful tool to convert (back and forth) Jupyter notebooks to pure python code is Jupytext.
Homework assignments and lecture exercises turned in as Jupyter notebooks will not be graded.
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 helpful material.
Course Format
The delivery of course content will occur via two weekly lectures as well as weekly pair-programming sections. Attending these sessions is mandatory. Lectures will consist of considerable interaction and discussion and will be greatly enhanced by student participation.
The course contains the following main components:
- Lectures: Deliver the main content of the class. Attendance is mandatory.
- Quizzes: Graded in-class quizzes intended to assess the learning progress.
- Pair-programming: Pair-programming (PP) sections offer practice on topics addressed in class and help assess the skills to program in a collaborative environment. Attendance is mandatory.
- Homeworks: Homework assignments deepen the lecture material and include coding exercises. Exercises may be of theoretical or practical nature.
- Projects: The class is accompanied by a project (teams of 4-5 students) to practice the methods learned in class on a real Python application. The project topic is given by the teaching staff.
The main programming language taught throughout the course is Python. In
addition, a voluntary C/C++
primer 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.
Grading
The following weight table is used for individual components of the class. The class does not have standard midterm or final exams.
Total Weight Homework (7 Homeworks) 35% Project 35% Quizzes (4 Quizzes) 15% Pair-programming (12 sections) 10% Communal Contributions 5%
Homework
There are 7 homework assignments where each contributes equally to the final grade. The homework is focused on the topics discussed in class and involves programming and theoretical work. The teaching staff is determined to return solutions and graded assignments with feedback shortly after the due date. It is your responsibility to check the consistency between your graded work and the assignment solution. You have the option to address possible inconsistencies in office hours or request a regrading for the assignment (see the homework grading inconsistencies section below). Homework will be released on the CS107/AC207 class repository. Push notifications for that repository will be distributed through the class mailing list. Homework will be graded on a 100 point scale:
- 100 = Solid / no mistakes (or really minor ones)
- 80 = Good / some mistakes
- 60 = Fair / some major conceptual errors
- 40 = Poor / did not finish
- 20 = Very Poor / little to no attempt.
- 0 = Did not participate / did not hand in
Homework Submission
Homework must be submitted via commits in your private git
repository hosted
in the CS107 organization at https://code.harvard.edu/CS107. Grading and
feedback for homework is done through the Gradescope
platform
which is connected to the class' Canvas
site. Your homework solutions must
therefore be zipped and uploaded in the Gradescope section of the class canvas.
See the homework workflow tutorial
for more details.
The homework due date is indicated on the problem sheet and displayed in the schedule as well as shown on Canvas and Gradescope. Homework submissions will be graded on:
- Correctness: your code must run and must produce the correct result. We are not debugging issues when grading submissions.
- Presentation: presentation means structure and readability. We expect you
to write high-quality, readable and tested code. A quality code is well
commented in places where it is not straight forward to deduce the logic from
code itself (from the reviewers perspective). We expect you to think about
aspects such as modularity, reusability, code duplication and error handling
when you design and write code. Presentation of results also means that
unnecessary or superfluous files like editor backup files or other unrelated
data should not be included in the submission commits (use
.gitignore
for this purpose).
See the following tutorials to help you get started with homework submissions:
- How to setup your private class repository (onetime setup)
- Homework workflow
Homework Late Days
Homework submissions are accepted before the deadline of the assignment is due. You have three late days at your disposal that can be consumed for late submissions and two consecutive late days can be used at most for any of the homework assignments.
Please note that any commits on your homework branch pushed after the deadline
has passed are not considered for grading by default. If you wish that we
consider a late commit for grading,
please contact the teaching staff at
cs107-staff@g.harvard.edu
with appropriate explanation. This will count towards your late day budget.
It is your responsibility to plan your work ahead and commit on time. If you have consumed all your late days and you have another late submission, it is in your benefit to still commit the work. We assume the Harvard Honor Code for all late submissions in case solutions are already posted.
If you have a verifiable medical condition or other special circumstances that
interfere with your coursework please let us know via
cs107-staff@g.harvard.edu
as soon as possible.
Homework Grading Errors
If you believe there is an error in your assignment grading, you can submit a regrade request through the Gradescope platform.
Note:
- The entire assignment will be regraded. This may cause your total grade go up or down.
- An assignment can only be regraded once.
- Regrade requests are due within 2 days after the release of the grades.
Project
Please see the project section for more details.
Quizzes
There are 4 quizzes out of class which are graded and intended to assess the
learning progress. Each quiz addresses topics from the lecture material.
Quizzes are open book/www
and include multiple choice questions with at most
back of the envelope calculations. Quizzes contain 12 questions and take 25
minutes. They are accessible on canvas within a 12 hour time window from 9am to
9pm at the day of the quiz.
Note: if a quiz takes 25 minutes and you start the quiz on 8:50pm, you will have only 10 minutes to work on the quiz.
- Quiz 1: September 22nd, 7:00pm - 7:45pm, Lecture 1 to 5
- Quiz 2: October 13th, 9:00am - 9:00pm, Lecture 6 to 9 (no automatic differentiation)
- Quiz 3: November 10th, 9:00am - 9:00pm, Lecture 10 to 16
- Quiz 4: December 1st, 9:00am - 9:00pm, Lecture 17 to 24
Please see the class schedule as well.
Pair-Programming Sections
Pair-Programming will form an essential part of the course. Pair-programming will take place in mandatory pair-programming sections led by members of the teaching staff. You are required to sign-up for your preferred pair-programming section at the beginning of the semester. You are expected to attend your chosen section during the semester. Should you not be able to attend one of your sections, please coordinate with your section TF to attend another section this week in order to obtain the attendance credit.
In CS107/AC207 we are focusing on command line tools for the development of software projects in computational science. It is important that you get familiar with a small selection of such tools and integrate them in your development process. The pair-programming sections aim at combining some of these tools together to provide you with hands-on experience while developing software. The key is the "pair" in pair-programming. The exchange of knowledge between team mates in these pair-programming sections is essential for learning said tools or learning something new from your peers.
Please see the following file in the class
git
repository for the details:
Pair-programming Submissions
Pair-programming exercise solutions must be submitted in your private git
repository hosted in the CS107 organization at https://code.harvard.edu/CS107.
Only commits before or at the due date are considered for grading. The
deadline for submission is usually one week after the last section for the
exercise. Given this extra time for completion, late days do not apply to
pair-programming exercises.
The submission due date is indicated on the problem sheet and displayed in the schedule. As you are working in groups of 3-4 students for the lab exercises, the solution files you come up with in the group are submitted by each group member individually in her/his own private Git repository. Pair-programming submissions will be graded on:
- Attendance: your attendance will be recorded by the TF who leads the section. Joining the section at the beginning and then leaving 10-15 minutes later will not reward attendance credit. If you need to leave because of another appointment then it is expected that you communicate before hand and coordinate with your TF. Please see the attendance policy section below as well. Your pair-programming session is determined at the beginning of the class by choosing lab sections in my.harvard. You can select your preferences depending on your schedule. Once determined, you can lookup your session details in the https://code.harvard.edu/CS107/main/blob/master/lab_groups.xls sheet.
- Completion: pair-programming submissions should reveal effort that the student attempted to solve the tasks. If you experience difficulties in a particular problem and you are not able to complete the task, please indicate the issues you had in your code using comments and we will take that reasoning into account. Handing in an empty skeleton (same as hand-out) does not meet the expected standard and will not award credit for the submission.
See the following tutorial to help you get started with pair-programming submissions:
Communal Contributions
The frequency with which you visit and/or post to the class forum can contribute to your final grade. These contributions must have
intellectual value and can be in the form of questions and/or answers related to
class material. Be mindful about sharing sensitive material such as solution
code for homeworks. If in doubt, try to rephrase your question/answer or ask
the teaching staff via
cs107-staff@g.harvard.edu
whether the content is permissible to share. Factors that contribute are
frequency of visits, posing questions, giving answers, commenting and liking
posts as well as creating posts.
Office Hours
The teaching staff holds weekly office hours. Office hour times and locations are listed on the class main page. Office hours provide you with an opportunity to review and discuss course materials as well as provide you with further guidance for your homework.
Please see the following file in the class
git
repository for the details:
Attendance Policy
Lectures and pair-programming sections are core parts of the class and therefore mandatory to attend.
Pair-programming sections (labs) will be held on weekdays that we determine at
the beginning of the class according to a best fit of the students' individual
schedules for the term. You are required to attend the labs at the assigned lab
day. Rescheduling of a lab to a different day due to an unforeseeable event
must be coordinated with the responsible TF by sending an email to
cs107-staff@g.harvard.edu
.
To be excused from a lecture or a lab, we ask you to follow the Harvard Honor Code and send an email to
cs107-staff@g.harvard.edu
at least one day before the lecture or lab. Lecture recordings are available only when students are excused for a lecture.
Zoom
Classes and labs will be streamed via zoom for you to attend real time while in isolation. Note that attendance on zoom is not a substitute for in-person participation. The main attention will be on the physical audience present (unless the entire class must be shifted to virtual meetings depending on Harvard COVID updates). Please follow the steps in the "Attendance Policy" section above to attend the zoom streams. If you are isolating you must not send notifications for every lecture or lab, one notification to let us know is sufficient. Thank you.
Please see the important information for the canvas page that contains the lecture zoom link.
The zoom links for the lab sessions and office hours are given in the
lab_groups.xls
andoffice_hours.xls
files in the main classgit
repository:
Collaboration Policy
You are welcome to discuss the course material and homework with others in order to better understand it, but the work you turn in must be your own (with exception of the project where collaborative work is permitted). Any work that is not your own, without properly citing the original author(s), is considered plagiarism. Failure to follow the academic integrity and dishonesty guidelines outlined in the Harvard Student Handbook will have an adverse effect on your final grade. This includes the removal of copyright notices in code. You may not submit the same or similar work to this course that you have submitted or will submit to another without permission. The teaching staff may use tools to compute correlations between submitted work.
Accessibility
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 contact the teaching staff or directly the Accessible Education Office to receive an AEO letter that will authorize us to help you with corresponding accommodations.
Diversity Statement
All participants in this class are expected to foster empathy and respect towards each other. This includes instructors, teaching staff or students. The motivation to take this course shall be to experience the joy of learning in an environment that allows for a diversity of thoughts, perspectives and experiences and honors your identity including race, gender, class, sexuality, religion, ability, etc. Any constructive feedback for improving the class environment is welcome and I encourage you to reach out to the instructor or teaching staff with any concerns you may have. If you prefer to speak with someone outside of the course, you may find helpful resources at the Harvard Office of Diversity and Inclusion.