Course Classroom:
Course Time: 2a (MW 10:00am – 11:10pm, F 9:50pm – 10:50pm), these times will be used for learning blocks, consisting of practice exercises, demos, guidance on getting started on labs, and Q&A. We will not necessarily use all 60/70 minutes each day, and any remaining time will effectively become office hours (i.e., I will hang around the video call to answer questions or chat). Attendance is recommended, but not required. You may choose to make attendance a formal part of your grade, see the course policies below.
Office Hours: I will hold weekly evening lab hours on Discord Tuesdays 8-9:30pm (Central time) You'll see me in one of the voice channels on the left, so just click it to join and say hello. A link to the CS department Discord is posted on Moodle. I also have 1-on-1 appointment slots on Thursdays from 1:30-4:00pm, use this link to sign up for a slot. I am also very happy to arrange meetings at other times, so just shoot me an email.
Course Staff: Oliver Calder (he/him) will hold weekly office hours on Discord (all Central time):
You can also ask the CS department lab assistants for help. They will be available on Discord this term. Find instructions for getting on Discord here and the lab assistant schedule here.
Course Texts: Bryant and O'Hallaron, Computer Systems: A Programmer's Perspective (CSPP), 3rd edition (required) errata
It is important that you have the 3rd edition of the Bryant and O'Hallaron book, as it contains significant updates from prior editions.
There will be assigned readings and practice problems from the CSPP book.
Kernighan and Ritchie, The C Programming Language, 2nd Edition (optional)
I recommend a good reference on the C programming language. There are many online resources of various quality. The suggested K&R book is a classic for good reason.
Announcements will be made via Moodle, so watch for those emails.
Programming Environment: This course will include work in C and x86-64 assembly. No prior experience with these languages is expected. Some lab assignments will need to be completed on a Linux machine with gcc and potentially other standard tools installed. There are two main options for this: work on a CS department server or on your local computer. Working on your local computer has two major advantages: (1) it does not depend on a continuous internet connection and (2) you have more flexibility to use the editor and environment of your choice. Working locally has one major disadvantage: potential incompatibilities with course assignments that are can be difficult to resolve
If your computer is Mac or Windows, you will need to set up a separate Linux environment. On Windows 10, this is pretty easy, thanks to the Windows Subsystem for Linux. Follow this guide to set it up (you will want to use WSL 2). On Mac and earlier versions of Windows, you will need to run a Linux virtual machine (VM). You can find instructions for the official CS VM on the Carleton wiki. The CS VM is quite large (11GB download, ~30 GB expanded, courtesy of lots of useful pre-installed stuff). If that's a problem for you, consider using the much smaller Xubuntu VM from osboxes.org. Like the CS VM, you will want the free VirtualBox to run the VM. If you run into any problems, please post questions to the Moodle forum or Slack.
If you do decide to work remotely on a CS server, this course will use mantis.mathcs.carleton.edu.
You can access it via ssh
or via JupyterHub at https://mantis.mathcs.carleton.edu:9595/.
You will need to be on the Carleton VPN to connect to JupyterHub.
x2go is an alternative way to work on mantis that doesn't require being on the VPN.
make
and writing Makefilesgdb ./executable
valgrind ./executable
Are you curious what's really going on when a computer runs your code? In this course we will demystify the machine and the tools that we use to program it. Our broad survey of how computer systems execute programs, store information, and communicate will focus on the hardware/software interface, including data representation, instruction set architecture, the C programming language, memory management, and the operating system process model.By the end of this course, you should be able to:
Grading breakdown:
Percentage | Letter |
≥ 93 | A |
≥ 90 | ≥ A- |
≥ 87 | ≥ B+ |
≥ 83 | ≥ B |
≥ 80 | ≥ B- |
≥ 77 | ≥ C+ |
≥ 73 | ≥ C |
≥ 70 | ≥ C- |
≥ 67 | ≥ D+ |
≥ 60 | ≥ D |
< 60 | F |
In the first week of the course, you will commit to one of two grading breakdowns:
Changing grading option: If during the term your circumstances change and attending the learning blocks becomes difficult or impossible, you are permitted to switch from Option A to Option B. To make the switch, simply send me an email stating that you wish to do so. A one-way switch from A to B is the only such change allowed.
Course grade derivation: Course grades are computed by the sum of the points earned divided by the maximum total point. Course grade percentages are converted to letters as shown in the accompanying table. The minimum percentage required to achieve a given letter grade may be adjusted downward (only to students’ benefit), but never upward. If your percentage grade satisfies the constraint in the left column, then your letter grade will satisfy the constraint in the right column of the same row. Each student’s grade is determined independently without consideration of other students’ grades.
Late Policy: Deadlines will be given with each assignment. These deadlines are strict. There will be no credit for late work. For the entire term, you have four late days. You are advised to use them conservatively. On group projects you may only use late days if all members of the group have them available, and all members of the group will be charged for each late day used. They must be used in 24-hour (integer) chunks. One or more late days can be activated on an assignment by emailing me before the assignment is due. There is no penalty whatsoever associated with using a late day. This policy may not be the same as in your other classes. You are responsible for understanding it if you choose to submit late work.
A note on inclusivity:
please treat your classmates with kindness and respect, both inside the classroom and out.
Classrooms can be vulnerable environments; asking questions and expanding our understanding of new concepts requires us to reveal over and over
again that we don't fully know something. It's okay to not know everything immediately! It's not okay to make people feel bad about what they
don't know. This can happen even in subtle ways - see this page for a few ideas on how to help create a friendly learning environment.
Our individual differences enrich and enhance our understanding of one another and of the world around us.
This class welcomes the perspectives of all ethnicities, genders, religions, ages, sexual orientations, disabilities, socioeconomic backgrounds,
regions, and nationalities.
Academic Honesty and Collaboration:
Any work submitted with your name on it must be your work.
Any group assignment must be your (plural) work. All group members must both fully contribute to the solution that you submit.
(Not precisely about academic honesty, but still good guidance:
receive your partner’s ideas as enthusiastically as possible,
even if they may not initially seem like the obvious choice to you.)
It is each student’s responsibility to speak to me in any situation
where your group member is not being of sufficient help. You are required
to completely understand any solution that you submit, and, in case
of any doubt, you must be prepared to explain your solution to me.
If you have submitted a solution that you cannot explain to me, then
you have violated this policy (and so has your group!).
You may consult with other students to get help.
You may not copy (either electronically or through transcription) other people’s work.
It is of course appropriate for some ideas to be transmitted through “consulting-type” help,
but code generally shouldn’t be word-for-word identical; plagiarism will not be tolerated in this class.
You should never be in possession of a (paper or electronic) copy of a classmate’s code before the due date for the assignment.
(Sharing code after the deadline is fine, as is sharing code with your group.)
Another way to articulate this: when getting help, that consultation should be in English and not in code.
You may refer to online manuals documenting C or assembly functions or perform Google searches to find the syntax for a particular language feature;
you should include a comment at the relevant point in your program explaining the source you used (typically including the URL).
You may bounce ideas off of classmates; if those conversations lead to insights, then you should cite your classmate.
(This sharing and attribution of ideas is an example of a thriving course community!)
Use your judgment and common sense to decide whether consultation with a classmate was sufficiently substantive that citation of your
classmate is warranted.
You should mention significant consultation with lab assistants (by name if possible!).
Any amount of help that caused you to revise your program should be cited.
Again: use common sense.
It is never acceptable to submit a program that you have found elsewhere (via Google, a book, a friend currently/previously in this class, etc.).
Changing variable names, altering indentation, and adding comments do not change the fact that such a program was not written by you.
If you are ever unclear about how to represent what work you
have done, (a) ask and (b) describe clearly what you have
done.
Academic Accommodations:
Carleton College is
committed to providing equitable access to learning
opportunities for all students. The Disability Services office
(Henry House, 107 Union Street) is the campus office that
collaborates with students who have disabilities to provide
and/or arrange reasonable accommodations. If you have, or think
you may have, a disability (e.g., mental health, attentional,
learning, autism spectrum disorders, chronic health, traumatic
brain injury and concussions, vision, hearing, mobility, or
speech impairments), please contact disability@carleton.edu or
call Sam Thayer (’10), Accessibility Specialist (x4464) or Chris
Dallager, Director of Disability Services (x5250) to arrange a
confidential discussion regarding equitable access and
reasonable accommodations.