- Objectives
- Problem sets
- Extra credit
- Late policy
- Inclusion
- Attendance
- Accommodations
- Joining late
- Section
- Tests
- Grading
- Pass/fail
- Getting help
- Collaboration policy
- AI tools
- Embedded EthiCS
CS 61 is a first course in computer systems programming, meaning the creation of high-performance programs that use computer hardware effectively. Although many programs today are written in high-level programming languages—and many programs simply glue together existing components—the best programmers are craftspeople who understand their tools. For software builders, this requires a working knowledge of computer internal organization. It means understanding how machines interpret instructions, how compilers turn programming languages into instructions, and how operating systems combine programs and libraries to create running code. And it requires understanding the factors that affect code performance.
CS 61 introduces you the tools you need to build robust, efficient software and the mental tools you need to understand software systems written by others. We hope you’ll discover that systems software development is fun and worth the effort. We intend the course to be broadly accessible, though it will be easier for those who have some experience with systems programming in C++ or other C-like languages.
Objectives
After this course, you should be able to:
- Write robust and efficient software.
- Use operating system interfaces effectively.
- Read and explain C and C++ programs.
- Read and explain simple assembly programs.
- Read programs that combine C/C++ and assembly language.
- Solve problems using computer arithmetic.
- Implement synchronization of simple concurrent activities.
- Analyze program performance and apply basic optimizations.
Problem sets
Programming assignments (psets) are a critical part of the course. There will be six assignments handed out at one to two week intervals. We encourage collaboration among students (subject to the collaboration policy below), but all assignments will be graded based on individual turnins.
Assignments will be due at midnight (11:59:59pm Eastern) on the due date, and must be submitted via the CS 61 grading server. A course announcement will be made when grading server accounts have been created.
Submitted psets must demonstrate sustained individual effort, and we will check your commit history to check that you worked on the pset over time. For each pset, your history must include at least three different versions (commits) that pass more tests each time.
Extra credit
Each problem set describes additional features that you can implement for extra credit. You can submit extra credit after a problem set’s due date, up to a final deadline during reading period. Extra credit will be counted only if the underlying problem set functionality still works as expected.
Extra credit is one way (but not the only way) that you can demonstrate mastery of the subject.
Late work and your health
Every student will begin the semester with 120 free late hours (equivalent to 5 days) which can be applied to psets 1–3, and 120 free late hours that can be applied to psets 4–6. This means that psets 1–3 can be late by a cumulative total of 120 hours without penalty, and psets 4–6 can be late by a cumulative total of 120 hours without penalty. Unused late hours from psets 1–3 are not carried over to psets 4-6.
To notify the course staff that you are using late hours on an assignment, click the “DO NOT GRADE” button on the grading server for that assignment. When your submission is ready for grading, click the “Grade this commit” button.
Penalties kick in for lateness beyond the corresponding late hour bank. We don’t share the specific penalty formula, but here are some of its properties.
-
Additional lateness will reduce the maximum grade you can achieve on the corresponding psets. Unreasonable lateness could set the maximum grade of a pset to 60%.
-
Skipped assignments receive a zero, which is far worse than any amount of lateness. It’s better to complete and turn in assignments late, regardless of late hours, especially if the alternative is skipping an assignment or turning in a half-done assignment.
-
Don’t lie to yourself about your ability to complete work late, or the consequences of falling behind. If you ignore deadlines altogether, you will likely fail.
To put it another way, late assignments might affect your grade at the margin, but will not affect your ability to pass the class.
Late hours are intended for emergencies as well as for other circumstances, such as illness, computer malfunctions, extracurriculars, and personal days. If you use your late hours for personal reasons, you risk running out should an emergency occur; this tradeoff might be a good one in your situation. We do not give additional late hours for self-reported emergencies or exigent circumstances. The late hour policy for the course is already quite generous. Course staff may not respond to emails about late hours or requests for more late hours, especially from students who haven’t even used their existing late hours yet.
But if you find yourself struggling, please contact the instructors via
cs61-staff@g.harvard.edu
. We work hard to help all students complete the
course without overwhelming stress.
Inclusion
CS 61 wants every student to feel welcome, comfortable, and valued, if sometimes intellectually challenged. We can only accomplish this goal with your help. If something is said in class (by anyone) or you come across instructional material that made you uncomfortable, please talk to the instructors about it (even if anonymously).
Students are expected to behave collegially in class and in our discussion forums. Harvard College and Extension students must follow school policies regarding disruptive behavior.
Attendance
Attendance at lecture and section is required for college students. Important things are discussed in lecture and section. Attendance at section is recorded for all college students.
For simultaneously enrolled college students only:
Attendance at section is critically important for simultaneously-enrolled college students. If you are simultaneously enrolled in CS 61 and another course, your section attendance will count toward the class participation portion of your grade. (This is required by the college’s simultaneous enrollment policies.) Simultaneously enrolled students must attend section in-person (i.e. attending section on Zoom or watching a recording does not count). All sections use the same attendance form, so attending any in-person section in each section cycle will fulfill this requirement. This means that if in a given week you miss the section that you usually attend in-person, you should try to attend a different in-person section. We understand that this isn't always possible, so up to two missed section cycles will be dropped from the calcuation of your participation score at the end of the semester. You should plan to use these 2 dropped absences to account for any foreseeable reasons for not being able to attend an in-person section, including one-time schedule conflicts, travel, illness, etc.
Course lectures are recorded by the Extension School, and these lecture videos are available for viewing for all students, including college students, via Canvas > Extension Class Recordings.
Accommodations
This course has a default plan for College students with the Deadline and Attendance Adjustment (DAA) accommodation.
- You will have 48 more late hours available to use on psets 1–3 (for a total of 168 hours), and 48 more late hours available to use on psets 4–6 (for another total of 168 hours). Unused late hours from psets 1–3 are not carried over to psets 4–6.
- If you cannot attend lecture or section due to a disability-related event,
you may attend live on Zoom or watch the recording afterward. Although
remote participation in section is usually not permitted for students who
are simultaneously enrolled in CS 61 and another course, we will make an
exception if you email
cs61-staff@g.harvard.edu
.
If you are concerned that this DAA plan might not support your needs, please arrange a meeting with course heads and your DAO advisor.
Joining the course late
Students who enroll in this course after the first day of class are
responsible for making up all missed work (i.e., watching recordings of missed
lectures (see Canvas > “Extension Class Recordings” tab), reviewing any missed
section material, and submitting problem sets). Catching up may take a
significant time investment, depending on your level of preparation and how
many classes you’ve missed. We want you to get caught up as quickly as
possible so that missed content doesn’t accumulate and make it even harder to
catch up. To that end, the latest date at which you may join the class is two
days before pset 1 is due. You will still be required to submit pset 1 on time
(or use some of your late hours to submit it after the due date). Joining the
course after this date will only be considered in exceptional circumstances,
and will require instructor approval (email cs61-staff@g.harvard.edu
).
Section
Section begins in the second week of class. New material will be introduced on Mondays, and sections will run through the following Sunday. Attendance is required for all college students, and tests may assume that students have mastered the section material (see previous section). Section material will be posted under the Sections tab of the course site. There is usually no preparation required for section, but we will make a course announcement if there is any. There is nothing that you need to turn in after section. Attendance and participation are the only requirements of section.
Times and locations for in-person sections are posted on my.harvard, and will also be circulated in the first week of class. College students who are simultaneously enrolled in CS 61 and another course are required to enroll in one of the timed sections on my.harvard. All other college students have the option of enrolling in a timed section, or remaining in the “placeholder” section. Regardless of whether or not you enroll in a timed section on my.harvard, you may attend any section on the schedule each week. All sections use the same attendance form, so you do not need to notify the course staff if you attend a different section than the one that you signed up for.
A Zoom section will be offered for Extension students, which college students may also attend (though the Zoom section does not count towards the participation score for simultaneously enrolled students.) Details for the Zoom section will be posted under Canvas > Zoom (which redirects to a site called Gather). Zoom sections will be recorded and posted via Canvas > Zoom > Published Recordings.
Tests
There will be two mid-semester tests and a final. Both the tests and final will be open-book and open-note, and computers will be allowed with limited Internet access, but the tests will be administered in person. This is the policy:
The exam is open book, open note, limited open computer. You may access the textbook and your own notes. You may also use computers or electronic devices to access your own class materials and public class materials. Specifically:
- You may access your own notes and problem set code electronically.
- You may access Internet sites on which your own notes and problem set code are stored.
- You may access a browser and a PDF reader.
- You may access the course site.
- You may access pages directly linked from the course site, including our lecture notes, exercises, and section notes, and reference material, such as cppreference.com.
- You may access our lecture, problem set, and section code.
- You may run a C++ compiler, including an assembler and linker.
- You may access manual pages and common utilities, including calculators and a Python interpreter.
However:
- You may not access class discussion forums or other question forums such as Stack Overflow.
- You may not access an on-line disassembler or compiler explorer.
- You may not access solutions from any previous exam, by paper or computer, except for those on the course site.
- You may not broadly search the Internet for answers to questions or access other courses’ materials. Stick to our course site.
- You may not interact with AI models (e.g., ask ChatGPT a question).
- You absolutely may not contact other humans with questions about the exam—whether in person, via IM, or by posting questions to forums—with the exception of course staff.
Any violations of this policy are breaches of academic honesty and will be treated accordingly. Please appreciate our flexibility and behave honestly and honorably.
Additionally, students are taking the exam at different times. Do not post publicly about the exam until given permission to do so by course staff. This includes general comments about exam difficulty.
Tests in CS 61 have typically been considered difficult.
Grading
CS 61’s final grades are assigned according to the college’s grading system, in which A and A- grades indicate “a full mastery of the subject” and A indicates “extraordinary distinction.”
We grade using a formula roughly like:
- 50% assignments
- 35% tests and final
- 15% participation (lecture, section, office hours, discussion forums)
We compute the formula and assign grades twice, once ignoring extra credit and once including it. Your final grade is the maximum of these two grades. Thus, you can get an A in the class without doing extra credit (by doing excellently on assignments, tests, and participation), or you can potentially bump up your grade by doing extra credit. It is harder to get a top grade without doing extra credit, however.
CS 61 assignments are designed so that most students should be able to pass the tests we provide. For this reason, obtaining 92% of the available points on an assignment does on its own demonstrate mastery of the subject and will not guarantee you a straight A. We encourage students to do two things:
-
Don’t overstress about grades. In the long run, it is extremely unlikely that getting an A versus a B will have a material impact on your happiness. Many students find it healthier to try to learn as much as possible without stressing yourself out.
-
Do some extra credit work to demonstrate mastery (and to have fun).
We are unlikely to respond to questions about course grades before they are assigned. For instance, we do not know what your course grade is going to be.
Pass/fail
College students may take CS 61 pass/fail, but no requests to change grading basis to P/F will be accepted after the 5th Monday.
Getting help
Office hours are a great place to get help in this course. The office hour schedule will be posted in the first week of class.
For college students: Individual and small-group tutoring is available through our Patel Fellow and the Academic Resource Center (ARC).
For Extension students: ARC referral form.
Collaboration and academic integrity
Tests and exams
No collaboration whatsoever is allowed on tests and exams. You may not contact any other entity, human or AI, when taking a test.
Problem sets
Collaboration is welcomed on problem sets. Discussion and the exchange of ideas are essential to academic work, and to engineering. We encourage you to consult with your classmates as you work on problem sets. You may discuss general strategies for solutions or specific bugs and code structure issues. You may also search the Internet for general information.
However, the work you turn in must be your own—the result of your own efforts. You should understand your code well enough that you could replicate your solution from scratch, without collaboration, and you should be able to answer staff questions about your code.
In addition, you must cite any books, articles, online resources, and so forth that helped you with your work, using appropriate citation practices; and you must list the names of students with whom you have collaborated on problem sets and briefly describe how you collaborated. (You do not need to list course staff.)
Limitations and caveats:
- Do not ask questions on Stack Overflow, paper.camp, or any similar site. The only discussion board you should use for questions is the class board. Of course, if you search for some C++ problem, Stack Overflow answers may come up—just don’t ask questions yourself.
- Do not ask anyone else, human or AI, to create solutions for you.
- Do not search for or use solutions from past (or future) years.
- Do not post solutions in a public place. Do not make your course repository public.
AI tools: See below.
Rationale: Collaboration is an important part of coding and of CS 61. Talking through your code with other students can help you think. However, in group assignments, students often shirk work or skip assignments entirely. That’s why each student must turn in separate code for each problem set. You may create code together, and may share small amounts of code, but each student must understand all code they turn in. A good way to ensure this is to type in solutions individually, rather than cutting and pasting. Another good way is for students to discuss ideas and code and help each other debug, but write their code themselves.
AI tools
AI tools, such as ChatGPT and GitHub Copilot, can be extraordinarily helpful tools for software engineers, but in this course you need to learn the material—we don’t care how effectively you can use ChatGPT. When doing problem sets, you may ask questions of generative AI tools, such as ChatGPT or GitHub Copilot. But you still must understand the code you turn in: you must be able to explain your code without the help of an AI assistant. If you can’t think without an AI assistant you’re cheating yourself as well as violating the course integrity policy. We may quiz you orally to check your understanding. Furthermore, we care about correctness, and generative AI tools can provide information that is subtly or dramatically wrong. Use with caution!
If you do use generative AI to help you during a problem set, your turnin must mention this and describe the interaction (e.g., include a transcript of the sessions).
Again, no collaboration, including with generative AI, is allowed on tests and exams.
Embedded EthiCS
CS 61 participates in the Embedded EthiCS effort collaboratively launched by faculty from CS and Philosophy. In addition to the technical knowledge and skills one gains through a CS education, today’s computer scientists need to reason ethically about the design decisions they make. The course instructors and a graduate or postdoctoral fellow in Philosophy will present a unit in this course that exemplifies how you can identify ethical and social issues, think rigorously about those issues, design systems that thoughtfully address those issues, and communicate clearly the design decisions and tradeoffs made.