Harvard CS205 - Syllabus

Syllabus - Spring 2019

Time and Location

Lectures: Tuesday 1:30PM-2:45PM; Thursday 1:30PM-2:45PM
Location: Science Center Hall A
Labs: Wednesday 4:30PM-5:45PM
Location: Pierce Hall 301


Lead Instructor:
Ignacio M. Llorente

Teaching Fellows:
Zudi Lin
Nicholas Stern
Kar Tong Tan

About the Course

Learning Outcomes

After completing this course you should be able to:


Students are expected to have basic programming experience, familiarity with Python and C, basic knowledge of Linux including using the command line, and basic understanding of algorithms (CS207 or CS50).

Intended Audience

The course is aimed at students with a background in a scientific discipline who will not typically have a traditional Computer Science background, though basic programming knowledge is assumed as a prerequisite. We hope to attract students from the life sciences, physical sciences, economics, social sciences, medicine, and the humanities interested in developing applications for large-scale computational or data processing.

This course is also for computer science, engineering, and undergraduate students that need to make decisions about the architecture of a system, choose tools for solving a given problem and figure out how best to apply them, or better understand the strengths and weaknesses of existing systems and tools.

Required Textbook


Recommended Textbooks

Course Format

The course is designed to study and discuss the principles (lectures and reading assignments), to develop practical skills (hands-on sessions, programming assignments and infrastructure guides), to expose students to real-world life experiences (case studies and guest lectures), and to apply the concepts to solve a real-life problem (project).

Lecture Sessions

Lecture attendance is mandatory and essential. Lectures are organized under themes and include explanation of theoretical concepts to build a conceptual framework, simple examples and case studies to illustrate the theory, and reading assignments for open discussion to develop problem-solving strategies and critical thinking. We will have in-class quizzes to assess your understanding of the material and to help us identify gaps.

Hands-on Sessions

Hands-on session attendance is mandatory. Hands-on sessions provide an opportunity to learn and practice the main programming models, which will be used in the programming assignments (homework) and the final project. Students should previously prepare the execution framework needed to do the exercises according to the guidelines provided by the instructors. The course includes hands-on exercises on AWS cloud and Harvard’s Odyssey supercomputer.

Lab Sessions

Attendance to labs is optional but strongly encouraged. Lab sessions are used to provide help with the homework (programming assignments) and the final project, and to allow students to become familiar with the computing and data processing infrastructure on AWS by following the infrastructure guides.

Guest Lectures

Guest lecture attendance is mandatory. Guest lectures are given by experts with proven expertise in the course topics to expose students to real-world life experiences about the application of the models and platforms learnt in the course.

Reading Assignments

Reading assignments for some of the chapters will be posted on Piazza. You need to do the required readings before the lectures and post comments or questions pertaining to each reading assignment. Comments or questions for the readings must be posted at least one day before lectures, typically on Mondays and Wednesdays. Post your comments or questions under the appropriate Piazza note using the “Follow-up discussion” feature, and use the hashtag #reading.

Examples of good comments:

Typically you should set aside 1-2 hours to complete each reading assignment. Even though we do not expect you to fully understand everything before coming to class, you will often have to read some passages several times to build your understanding. The goal of the reading assignments is to prepare for class, to familiarize yourself with new terminology and definitions, and to determine which part of the subject needs more attention.


Quizzes will be taken at the end of the lecture sessions and the material will be based on what was discussed in the class.There will be no retakes or makeup quizzes for any reason.

Programming Assignments

Lectures are complemented by homeworks (programming assignments) to bridge the theory with the practice. There are homeworks associated with the three main parts of the course that mostly consist of programming assignments to exercise a technology or programming model.

Homework is due electronically. We will deduct the appropriate number of late days for assignments handed in after the due date. You can use up to two late days for any single homework assignment, with a maximum of three total late days for the semester. After using up your late days we will deduct 1 point (over 10) for each day (including weekends) when an assignment is late.

Submission will be done through Canvas.

Infrastructure Guides

Infrastructure guides help with the deployment of parallel computing and big data processing frameworks on the AWS cloud for developing, testing and evaluating the programming assignments and the final project.


A major component of the course is a final programming project. Your final project is to solve a compute or data intensive scientific problem using the platforms, tools and systems introduced in the course. You will collect the data, implement the tool, and analyze the performance of an end to end application. The final project has five milestones: the team formation, an in-class presentation of your project proposal, an in-class presentation of your progress with the design of the project, the final project deliverables submission, and final presentation to teaching staff. You are required to form teams and to partition the work among the team members.

Further details about the project will be updated under the Projects page.


We will not have standard midterm or final exams. Instead, we will have in-class quizzes, two in-class presentations on project proposal and progress, and a final project presentation during the scheduled final exam period.


We'll be using Piazza for online class discussions. We will also use Piazza for all course announcements.

Piazza is your main venue to ask questions, discuss problems, and help each other out. Piazza is a question and answer system designed to streamline class discussion outside of the classroom. It should always be your first recourse for seeking answers to your questions about the course, lecture or reading material, or the assignments. Participation on Piazza will factor into your participation grade for the course.

Office Hours

The Instructors and the Teaching Fellows hold weekly office hours. Office hour times and locations are listed on the Class Homepage. Office hours provide you with an opportunity to review and discuss course materials as well as provide further guidance for your homework in a more intimate environment, with only your teaching fellow and maybe a handful of classmates present.


Relative Weighting

You will be graded on homework assignments, participation, and a final project. There will be no exams. The final grade will be composed as follows:
* Homework (40%): Individual submission of programming assignments (HWA 10%, HWB 15% and HWC 15%)
* Final Project (40%): A project of your own design to be worked on in small teams
* Quizzes (10%): Assessments of your understanding of the material
* Participation (10%): Online forum posts, reading assignments, in-class participation, and lecture attendance

Grading Scale

Homework will be graded based on 1) how correct your code is (the code should compile and run, we are not troubleshooting code), 2) how you have interpreted the results in a report.

Homework, final project, and participation will be graded on a 10 point scale in 0.1 increments.

Teaching Fellows will evaluate your work holistically beyond mechanical correctness and focus on the overall quality of the work.

Regrading Policy

It is very important to us that all assignments are properly graded. If you believe there is an error in your assignment grading, please submit an explanation via email to us within 7 days of receiving the grade. No regrade requests will be accepted orally, and no regrade requests will be accepted more than 7 days after you receive the grade for the assignment. Also, note that requesting a regrade applies to the entire assignment.

Homework Late Days

You can use up to two late days for any single homework assignment, with a maximum of three total late days for the semester. A late day extends the homework due date by 24 hours without penalty. After using up your late days we will deduct 1 point (over 10) for each day (including weekends) when an assignment is late. Late days are intended to give you flexibility: you can use them for any reason, no questions asked. You don't get any bonus points for not using your late days. You can only use late days for your homework, all other deadlines (e.g., for the final project) are hard.


Any student receiving accommodations through the Accessible Education Office should present their AEO letter as soon as possible. Failure to do so may prevent us from making appropriate arrangements.


Lecture Attendance

Lecture, hands-on session and guest lecture attendance is mandatory and quality of participation will factor into the participation grade. You must send an email to the staff at least a day before a lecture to be excused. Attendance to labs is optional but strongly encouraged.


Helping each other out and discussing the reading assignments and lectures is a key aspect of this course. All students are expected to contribute online on Piazza and during lectures, and participation on Piazza and lecture attendance will contribute to the final grade.

Academic Honesty

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 (with some exceptions, e.g., the final project, where work is explicitly shared). You are encouraged to discuss programming assignments with classmates, but should be open about such cooperation, and should attribute anyone you collaborated with with in your homework.

There is a balance to be struck between submitting your own work (to demonstrate you're learning the material) and discussion/collaboration with others (to enhance learning through mutual assistance). In general, avoid sharing actual code (particularly code you hand in), but feel free to discuss, diagram, use pseudocode, and even share small amounts of code ("snippets"). If you are in doubt as to the appropriateness of some level of collaboration with other students, contact the course instructor.

The class staff will be using codeanalysis tools to compare students work; plagiarism will not be tolerated, and students may be asked to work more independently if their work is too similar. You may not submit the same or similar work to this course that you have submitted or will submit to another, without permission. 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), or in a README.txt file accompanying your submission. Do not remove any original copyright notices and headers. All forms of academic dishonesty will be forwarded to the Harvard College or Extension School Administrative Boards.


The lecture material is adapted from the books and online research resources relevant to the course topics. Please contact us if you find materials where the credit is missing or that you would rather have removed.