Course Description

CS 61 is a first course in computer systems programming, meaning the creation of high-performance programs that use computer hardware effectively. 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 frameworks 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:

Problem sets

This course is about programming, and we want students to come out as strong systems programmers. Programming is a way of thinking and a language of its own (independent from, but related to, any specific programming language). Programming as a discipline is central to computer science, and distinct from the discipline involved in prompting an AI, although it’s increasingly clear to us that AI prompting will be a critical part of programming. AIs can do our problem sets, because this is an introductory course. But if you don’t learn how to do the problem sets, you won’t learn programming or its beautiful way of looking at the world.

So 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 require an individual turnin.

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 make more progress each time.

We aren’t prohibiting AI use for problem sets. But as a result, we can’t judge whether your problem sets accurately reflect your own learning. For that reason, we are planning to evaluate problem set turnins only at a high level; student evaluation will take place primarily through exams. But if you don’t do the problem sets, you’ll probably do poorly on exams.

Extra credit

This section is under construction.

Late work and your health

Every student will begin the semester with 72 free late hours (equivalent to 2.5 days) which can be applied to psets 1–3, and 72 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 72 hours without penalty, and psets 4–6 can be late by a cumulative total of 72 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.

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 using the Qwickly app.

If you are going to miss a Monday/Wednesday lecture or Thursday section due to illness, personal emergency, or a religious day, please email cs61-staff@g.harvard.edu before that class. If you are ill, please obtain a note from HUHS and include it in your email. We may request a note from your resident dean.

You are allowed two unexcused absences from lectures or sections without tests. You are not allowed any unexcused absences for Thursday sections when there is a test.

Accommodations

This course has a default plan for College students with the Deadline and Attendance Adjustment (DAA) accommodation.

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 material. 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.

Attendance is required for all college students, and tests may assume that students have mastered the section material. Section material will be posted under the Sections tab of the course site.

Times and locations for in-person sections are posted on my.harvard, and will also be circulated in the first week of class.

You should register for a section, but you may attend either one each week. Both sections will record attendance, so you do not need to notify the course staff if you attend a different section than the one that you signed up for.

Tests

There will be tests every 2–3 weeks during section. The first test is tentatively scheduled for Thursday 9/17.

There will also be a final exam (time/date TBA).

The tests and final will be open-book and open-note. We will design the tests so they could be completed by hand. If you take the test proctored by CS 61 staff, computers will be allowed as well, with limited Internet access, and we’ll prefer that you enter your answers on our computer system. This is the policy for exams we proctor:

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 a 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). If your IDE has an integrated AI, disable or hide it.
  • 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.

It would be difficult for the FAS Testing Center to enforce these rules. Once the Testing Center opens, therefore, we will expect students with extra time accommodations to take tests there using paper and pencil and arbitrary printed-out notes.

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 will be enforcing the 20% cap on A grades (with no cap on A- grades) approved by the FAS faculty in spring. (Past offerings have not been far off, with roughly 24% As.)

We grade using a formula roughly like:

In recent years, we computed the formula and assigned grades twice, once ignoring extra credit and once including it; student final grades were the maximum of these two grades. We would like to do the same this semester, but extra credit is still under discussion in course staff.

We encourage students to do two things:

  1. 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.

  2. 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 until we compute the final formula after all grades are in.

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

the Academic Resource Center (ARC).

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:

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.