CS 105

Course Syllabus

Information about this course, CS 105: Computing Systems, for Spring 2026.

Professor

  • Melissa O'Neill (oneill@cs.hmc.edu)

Prerequisites

  • CS 70

Overview

This course provides a programmer's view of how computer systems execute programs, store information, and communicate. It enables students to become more effective programmers, especially in dealing with issues of performance, portability and robustness. It also serves as a foundation for courses on compilers, networks, operating systems, and computer architecture, where a deeper understanding of systems-level issues is required. Topics covered include: machine-level code and its generation by optimizing compilers, performance evaluation and optimization, computer arithmetic, memory organization and management, processes and concurrent computation, and networking technology and protocols.

CS 105 has two in-person classes and one in-person lab each week.

In-person lab sessions will be primarily devoted to working on lab assignments with members of the teaching team nearby to answer questions about the homework or to discuss lesson material. The teaching team will also offer help and support both asynchronously through Piazza and synchronously via drop-in tutoring and office hours.

You are not expected to complete lab assignments in the lab period; you will need to continue to work with your partner outside of class.

Pair Programming

CS 105 uses the pair-programming methodology for all weekly lab assignments. All homework will be done as a pair, with a single joint solution turned in by that pair. Over the course of the semester, you will be part of two different pairs (you may not choose the same partner twice).

In the pair-programming model, you must spend your time working together on a single piece of code. At any given moment, there will be one person typing (the “driver”) and the other making suggestions (the “navigator”); these roles should switch at least every 30 minutes, and possibly much more often.

In general, you must work with your partner in person, ideally face-to-face (as in the pair programming lab) or, if necessary, side by side, when working on the assignments. If you are sick—and especially if you test positive for COVID-19—you may instead collaborate remotely (e.g. via Zoom); see our COVID-19 Policy.

Each line of text and code submitted by a pair must be a true collaborative effort. You will be violating the honor code if, for example, you divide the work such that you work separately, with one person doing part of the work and the other person doing the rest. Obviously, it is also an honor code violation if one person does all the work on their own; more subtly, it is also forbidden to submit any work that was technically created while working together, but that only one partner understands.

For a more complete description of best pair-programming practices, and advice on choosing partners, see our Pair-Programming Policy.

Collaboration Outside Your Pair

We love for you to discuss the class and reading topics with your classmates! This can range anywhere from informal chats to formal study groups.

You can even discuss high-level features of assignments and the ideas involved, including general approaches to the problems, bugs in the specification, how long you’ve spent working on a problem, and so forth. You may also get or give help with the basic tools and technologies related to completing the assignments: how to use different operating systems (Unix, Mac, or Windows issues), basic C++ language issues, git/GitHub, running the compiler, and the like.

One limit on appropriate outside-of-pair collaboration on homework assignments is the “in your head” rule. When students help each other, they should leave with conceptual understandings in their heads, not physical or electronic artifacts. (If you really understand a concept, you can explain it on demand without the need for paper notes, whiteboard code, or other crutches.) Thus, you are not allowed to meet as a group and leave with notes about the assignments on paper, nor can you help someone fix a bug and then leave without first reverting the code to its unfixed state.

Another general rule is “understanding, not rote learning.” The goal is to help everyone learn, not just to get over an immediate hurdle. If you are helping someone, remember that giving away answers can be detrimental to their understanding; asking leading questions to help guide them to the answer is usually a better approach. Working together as peers and jointly moving together from confusion to understanding is, of course, even better.

Web searches are treated similarly to collaboration outside of a pair: you can use the web to help you use tools and technology, or for getting alternate or additional background on class topics, but the web may not be used as a source of code or other specific assignment or exam answers (unless specifically allowed).

Communications and Getting Help

If you have questions about the course (about assignments, course policies, C++, etc.) that you cannot answer yourself, please use Piazza for asynchronous communication (not email); there are more eyes on Piazza, so you are more likely to get a quick response.

There are several different ways to get help, ask questions, and otherwise reach out, each with its own purpose. We will use Piazza for asynchronous communication, and professor/grutor office hours for synchronous communication. Please see the Getting Help page and the Office and Grutor Hours post pinned on Piazza for details.

Graders / Tutors (aka “Grutors”)

There are many grutors for this course whose mission in life (at least some of the time) is to help convey the wonder of CS 105! They will be responding to Piazza posts as well as holding regular help sessions. They will also be grading your homework assignments.

Computer and Website Accounts

This course requires you to use four main tools. (Sorry! We've tried to consolidate as much as we can!) These are

  • Course Website: This website is the hub for all course content, including course policies, learning material, and homework descriptions. (You are here).
  • Piazza: Most communication about the course, including announcements, requests for help from the instructors, grutors, or fellow students (see the help page for more on Piazza).
  • Gradescope: This is where you will ultimately submit your work and view feedback on your submissions.

Coursework & Grading

Course Grade

Your final grade in CS 105 will be calculated as follows:

Labs 35%
Class Participation 5%
Quizzes 15%
Midterm Exam 20%
Final Exam 25%

Because each category (lab assignments, class participation, quizzes and exams) focuses on different learning goals, it's important for you to demonstrate achievement in all three categories. For example, if you fail most of your quizzes or exams, you can't make up for that just by doing great on the assignments and participation. Specifically, if you score less than 50% in any category, we reserve the right to assign a lower letter grade (including D or F). Similarly, to get a straight A in the class, you must have a grade no lower than an A- in all course components.

Lab Assignments

There will be seven lab assignments during the term. Assignments will be available by Friday each week (but often released a day earlier) and be due on the following Friday night.

Quizzes & Exams

There will be several quizzes, a midterm exam, and a final exam.

Each of these must be completed in exam-like conditions. Like other exams, you may not copy, distribute, or otherwise reproduce the questions.

You may not have access to any reference materials, the internet, or other people while you answer these questions.

Class Participation

Your score in this category will reflect the extent to which you attend and meaningfully participate in class sessions. We hope that attending class meetings will be valuable to you as an individual, but know that your presence will also be valuable to those around you who will benefit from your questions, your insights, and your collegial spirit.

Late Work

Labs and quizzes are due on the day indicated at 11:59 p.m. Pacific Time.

This semester you will work with two different partners on lab assignments. For each partnership, you and your partner together have two late passes that provide one 24-hour extension on one homework assignment; that is, a “late day.” Unused extensions do not carry over to new partnerships, but each new partnership will have the same two late-pass opportunity.

You do not need to tell us that you’re using a “late pass”: the submission system will notice that fact based on your submission time and will “bill” your virtual late-pass account. Homework that is more than 24 hours late or submitted after the deadline when no CS 105 late passes remain results in undefined behavior.

If you know about an upcoming commitment (such as an exam in another course, or a family event you must attend) that could affect your ability to get an assignment done by its deadline, you may ask for an assignment early. We may not always be able to make that happen, but we will try our best. Please notify us at least 24 hours before you need it.

Similarly, if, after starting an assignment, you think it is impossible to accomplish the necessary work in the available time, consult us as soon as possible before the due date. We might be able to offer you some help that would allow you to finish more quickly, or it might be that everyone in the class is having the same problem. The same advice applies if we have scheduled something at a particularly bad time for you (e.g., at the same time as a major deadline for another class) or if there seems to be a bug in an assignment.

Extenuating Circumstances: Unforeseeable Situations Only

Penalty-free extensions for extenuating circumstances are dealt with on a case-by-case basis. In general, you are only excused for situations you could not have foreseen (e.g., your or your partner’s illness), and only if you explain the situation at your earliest opportunity (either directly or via someone else, such as the Dean of Students), before the due date. Planned travel and work for other classes are foreseeable; these events are precisely when you should use the free late passes or ask to obtain the assignment early.

Reminder: The Honor Code

All students—even those from other colleges—are expected to understand and comply with Harvey Mudd College’s expectations of academic integrity as outlined in our Honor Code and in the CS department’s interpretation of that policy.

Specifically,

  • You must not exchange literal copies of material, whether that material consists of code, program output, or English-language text (e.g., documentation). You also may not copy material from published or online sources, with or without cosmetic changes (such as altering variable names), without explicit permission. If you do have permission to use externally written material, you must attribute it properly and clearly indicate which material is yours and which material is not yours. Publishing your own homework or exams from CS 105 on the web (e.g., in a public GitHub repository during or after this semester) violates this policy.
  • You should not do anything that a reasonable student peer would describe as “subverting the clear intent of the assignment,” unless you have asked for and received permission to do so. Finding open-sourced code that you can use to solve an assigned problem, for example, would typically be subverting the intent of the assignment because your shortcut means that you do not get the practice that the assignment is aiming for.
  • If you use any sources to assist you, you must document them. (A clarification about assignment requirements or a debugging tip, however, need not be credited.)
  • It is just as bad to copy from your past self as from someone else. In a situation where we are expecting you to do new work, you may not reuse or refer back to substantially similar work you have previously done.
  • Similarly, you may not use any kind of AI assistant (such as GitHub Co-Pilot) to write code for this class (or even suggest code you can write). These systems embody a wealth of experience and coding skill—using such a system is like adding a CS senior as a third member of your pair-programming team and just as inappropriate. Allowing another entity, human or AI, to write your code for you and then not disclosing that the code is not your own exclusive work is an Honor Code violation—it violates both the attribution rule and the intent-of-the-assignment rule.
  • If you aren’t sure whether something you’ve done or plan to do is allowed, you should explicitly document what you did and—if at all possible—consult with the course staff, ideally before you take the questionable action. Similarly, document any extensive or particularly important help you obtain, even if that help seems perfectly legitimate. If you’ve been helped so much that we can’t consider the work truly your own, you might not be able to get full credit for it, but proper attribution will avoid an Honor Code violation.
  • Academic integrity also involves being careful enough to avoid unintentionally breaking the rules. Thus, you must read instructions in assignments and exams carefully so that you are aware of any limitations they place on you, such as time restrictions or restrictions on information sources you may consult. Similarly, if you see something that plausibly seems like it ought to be off-limits to you, such as a GitHub directory belonging to another student or files from a previous semester, you should immediately contact us to let us know that something doesn’t seem right, rather than looking further at something that perhaps should have been off-limits.
  • These principles apply to all methods and media of discussion or exchange (voice, writing, email, etc.).

Violations of these policies will be reported to the appropriate administrator at your home institution and handled by the rules and procedures used there.

Being a Good Citizen

Beyond academic integrity and the honor code, there are small things we can all do to make our collective experience of the class better. Here are a couple of suggestions:

  • If you find what seems to be a mistake on an assignment, proficiency check, or course webpage, please let us know as soon as possible. We'll look into the issue and try to get it addressed expeditiously. A private post to instructors on Piazza is a great way to do this, as is catching an instructor in person.
    • Note that if you find a problem with a question on a proficiency check, you will need to complete the check using your best interpretation of the question and reach out afterwards.
  • Be kind to each other. We all have good and bad days, so when you have the capacity to be a little generous and make someone else's day better (or avoid making it worse), you'll be making the world just that little bit better.

AI Usage Policy

In all respects, using AI (such as ChatGPT or GitHub Copilot) is equivalent to turning to a friend who has already taken the class and asking them for help—the same rules apply. It would not be okay to have a friend do your homework for you, or sit next to you telling you at each moment what to write next.

The AI usage rules below are thus just a restatement of the general principles above, with a focus on how they apply to AI tools.

Your Responsibilities

Unlike other sources of help who may naturally exercise their own good judgment in deciding what information to provide, you may need to take explicit steps to prevent AI tools and assistants from inadvertently providing you with answers or solutions that you should be developing on your own. For example, Visual Studio Code makes it very easy to turn on GitHub Copilot and receive suggestions for code completions, causing AI to write code that was supposed to be your own work. It is your responsibility to ensure that you can tell whether AI code completions are enabled or not and ensure that they are disabled while working on code for this class.

Likewise, if you ask an AI assistant such as ChatGPT a question about assignment materials or code, there is a good chance that the assistant will be too direct in giving you solutions, giving you an unfair advantage over your classmates, undermining your own learning process, and potentially violating the Honor Code. One way to avoid such issues is to avoid using AI assistants for direct help with assignments or code (conceptual discussions about lesson materials would be okay). Talking to a grutor or your professor, or posting your about your issue on Piazza, will avoid these kinds of challenges.

Permitted Uses

  1. Understanding Concepts: You may use LLMs to help further explore concepts from lessons or to get alternative explanations of course material.
  2. Debugging Assistance: You may use LLMs to help explain compiler error messages or runtime errors. In such a case, it may be helpful to provide instructions similar to

Please do not just give me the answer, instead focus on teaching me the debugging process/methodology so that I learn the skills I need to solve this kind of problem for myself, so that the next time I see a problem like this, I can work through it on my own. I need to be the author of all code changes, so please don't give me any code snippets to copy into my assignment—I'm not allowed to do that. Feel free to ask me leading questions and be my guide in figuring this out (we can have a conversation back and forth as I build my skills, so no need to try to cover everything in one go). Remember, you need to avoid giving me specific code changes for my file. Often less is more!

Also, apply the “in your head” rule and leave the conversation with new understanding in your head—specifically, edits you make to your code should be your work based on the understanding you have gained, not the work of an LLM with you acting as a mere human facilitator for the LLM.

(The Getting Help page has information on what to include when describing an issue you're having, which applies equally well to using an AI assistant as it does to asking an instructor or posting on Piazza.)

Prohibited Uses

  1. Direct Code Generation: Using LLMs to generate code for assignments or projects is strictly prohibited.
    • This prohibition includes using coding assistants like GitHub Copilot to “autocomplete” code.
  2. Take-Home Exams and Quizzes: LLMs must not be used for any take-home exams or quizzes.
  3. Uncited Use: Any significant ideas or insights gained from LLMs must be cited in your work.

Requirements

  1. Critical Evaluation: Always critically evaluate any information or suggestions provided by LLMs. They can make mistakes or provide outdated information.
  2. Citation: When using LLMs for research or idea generation, cite them as you would any other source. Example: “Idea explored after discussion with [LLM name], [date].”
  3. Transparency: If you're unsure about whether your use of an LLM is acceptable, consult with the instructor or grutors.

Accommodations

HMC is committed to providing an inclusive learning environment and support for all students. In CS 105, as in other classes as Mudd, we will always work with students and campus accessibility offices to make sure that students have the accommodations they need. Students with a disability (including mental health, chronic, or temporary medical conditions) who may need accommodations in order to fully participate in this class are encouraged to contact their home college's accessible-education officer:

Textbooks

There are two textbooks for this course; one is optional:

  • Computer Systems, A Programmer's Perspective, 3rd Edition, by Randal E. Bryant and David O'Hallaron, Prentice Hall, 2015
  • Optional: The C Programming Language, 2nd Edition, by Brian Kernighan and Dennis Ritchie, Prentice Hall, 1988

There will be regular reading assignments from Bryant and Halloran. You will also be expected to do several (assigned) practice problems for each reading.

(When logged in, completion status appears here.)