Computer Science 61 and E61
Systems Programming and Machine Organization
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 still, and will always be, 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.
After this course, you should be able to:
- Write robust and efficient software.
- Use operating system interfaces effectively.
- Read and explain complex C programs.
- Read and explain simple assembly programs.
- Write programs that combine C and assembly language.
- Solve problems using computer arithmetic.
- Solve coding exercises requiring synchronization of concurrent activities.
- Analyze program performance and apply basic optimizations.
- Write simple network servers.
Programming assignments are a critical part of the course. There will be six assignments handed out at one to two week intervals. All of the assignments may be completed individually, but most assignments may be completed in pairs; they’ll be labeled.
Assignments will be due at midnight (11:59:59pm Eastern) on the due date.
Each student has 144 free late hours which can be applied to any of the assignments. (That’s a total of 6 late days.) This means that all assignments can be late by a cumulative total of 144 hours without penalty. If you wish to take late hours, you must add a prominent "DO NOT GRADE" notice to the top of your README. This notice must be visible on the grading server from the assignment deadline until your submission is ready for grading.
Significant penalties will kick in after the 144 late hours are exhausted, such as a letter grade off on over-late assignments per 4 hours of additional lateness, down to a minimum of F.
On assignments completed in pairs, lateness counts against both students’ late hours.
No assignments will be accepted after solutions are discussed in class or section. This will generally happen about 5 days after the assignment is due; deviations will be preannounced.
Skipped assignments receive a zero, not an F. Zero is far worse than F (in the letter grading system F is often represented as 50%). You don’t want zeros on any assignment: a great way to get a bad class grade is to skip an assignment. It’s better to complete and turn in assignments even if you’ve already used your late hours.
Attendance at lecture is required. Attendance at section is strongly encouraged.
There will be a midterm and a final. Both midterm and final will be open-book and open-note. Computers will be allowed, with restricted Internet access. The Internet access policy will resemble this:
The exam is open book, open note, open computer. You may access the book and your own notes. You may also use a computer or equivalent to access your own class materials and public class materials. However, you may not access other materials except as explicitly allowed below, and you may not write programs to answer questions. Specifically:
- You may access a browser and a PDF reader.
- You may access your own notes and problem set code electronically.
- You may access an Internet site on which your own notes and problem set code are stored.
- You may access system manual pages (
- You may access the cs61.seas.harvard.edu/wiki/2017 site, including lecture and section notes.
- You may not access Google or Wikipedia or anything else except as directly linked from the cs61.seas.harvard.edu/wiki/2017 site.
- You may not access Piazza.
- You may not access course videos.
- You may not run a C compiler, assembler, on-line disassembler, calculator, or anything similar. Simple reading applications only.
- You absolutely may not contact other humans via IM or anything like it.
- You may not access solutions from any previous exam, by paper or computer.
Any violations of this policy, or the spirit of this policy, are breaches of academic honesty and will be treated accordingly. Please appreciate our flexibility and behave honestly and honorably.
A tentative grading breakdown for College students follows.
- 45% assignments
- 20% midterm
- 25% final
- 10% participation
It can be most satisfying to complete problem sets and other homework on your own, but in some cases (explicitly annotated) we will encourage you to work in pairs. Whether or not you work in pairs, we encourage you to communicate with your classmates about strategies for solutions and help on specific bugs. Collaboration is governed by two principles:
- Do your own work. Every line of code you submit must be your own, as must every sentence you write. You should be able to explain and reproduce your work yourself. It is OK to discuss an assignment with classmates, but not to share code and assignment solutions with classmates.
- Cite help. If a classmate or other collaborator helps you, acknowledge them in your assignment. Give their name and briefly describe how they helped. This principle also applies to online resources like Wikipedia.
This means that, for example, we expect Piazza to be an active zone for discussing assignments, but for Piazza to contain little if any assignment code.
Use of solutions from prior years, from other classes, or from the Internet is strictly forbidden. Don’t do it, and don’t post assignment questions on the Internet. Ask the course staff via private Piazza message if you have questions about this policy.
In-class exercises, which are not graded, are to be completed in groups; groups of 2-3 are best. But wide collaboration is strongly encouraged.