Syllabus

This page lays out all of the work you are responsible for in this course, how it will contribute to your overall grade, and the policies around collaboration, outside resources, and other concerns you may have. We will begin with a brief overview of some high-level points, but please review the entire syllabus to make sure you understand your responsibilities for this course.

Overview

The work you do for this course will fall into five categories:

Readings
Complete the assigned readings before class on the day they are listed. You will need to be comfortable with materials from readings to participate during in-class discussions.
Discussion
Participate in the discussions we have during most classes. You will need to be prepared and present in class to participate.
Individual Assignments
Practice C programming and concepts from class so you are prepared for more advanced material that appears in labs. A few later assignments will be reflections on longer readings rather than programming tasks.
Group Labs
Apply the concepts from class by completing near-weekly programming labs. We will start labs in class with randomly-assigned groups. Most labs will require you to find time outside of class to finish them with your group.
Project
Toward the end of the semester, you will combine the concepts and skills you’ve practiced to design and implement a system. You will have the option to work individually or in groups. Requirements will be available later this semester, but your project will need to combine multiple concepts from class.

The rest of this syllabus lays out detailed policies around grading, collaboration, academic honesty, and more, but here are a few of the high-level points:

  1. Attend class, or notify me a least 10 minutes before missing class. You are expected to attend class, and your participation grade will reflect the number of unexcused absences you had during the semester. If you need to miss a class, just make sure to email me at least 10 minutes before the start of class and your absence will be excused. You do not need to share any reason for your absence.

  2. Group work must be completed with your group. Do not divide up tasks from group labs, and do not work without your entire group present. If anything interferes with your ability to meet these requirements, talk to me before submitting your work.

  3. Use effective pair programing techniques during group work. Your group can decide how to allocate time spent driving and navigating, but every member of your group must be allowed to contribute meaningfully. I expect that you know how to work productively with peers, but if that turns out not to be the case then I may institute a more prescriptive group work policy.

  4. The use of large language models or other AI tools is prohibited for all work in this class. You may not use AI coding assistants, chatbots, summarization services, or any other AI/LLM tool for readings, assignments, labs, class discussions, or the course project. It is your responsibilty to make sure you are not using inapporpriate AI assitance, but you can always ask me (the course instructor) if you are unsure whether a program or resource is allowed under this policy.

  5. Cite the contributions of others. You must include a citation any time you use a resource for work you submit for this class. That includes any book, website, or post you used to complete your work, including materials presented in class or assigned for course readings. Failure to cite a resource you used for your work is an academic honesty violation and will be reported to the committee on academic standing.

Course Policies

The summaries above should help answer many of the common questions about course policies, but you are responsible the full policies outlined below. Make sure you understand them, and talk to me if you’re ever unsure about a policy-related question that comes up during the semester.

Readings

Our primary textbook is Operating Systems: Three Easy Pieces, by Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau. This textbook is available for free online. The textbook page includes information on how to order a printed copy of the book, but this is not required. There will be some supplementary readings, including a few important research papers in systems. All of these readings are linked on the course schedule, and should be available for free. Some readings may require you to log in with your Grinnell account when you are off campus.

You are welcome to use other written resources (provided they do not violate the course AI/LLM policy) as long as you cite them appropriately.

Attendance

Attendance in class is required, but your absence will be excused as long as you notify me by email at least 10 minutes before the start of class. You do not need to tell me why you are missing class, just that you will be out, late, or leaving early. If you are sick, please do not attend class.

When you miss class you are responsible for making up any missed topics and in-class work. Notes from class discussions will be posted on the course website, so please complete the assigned reading and review the posted notes after each missed day. If you still have questions after reviewing those materials I would be happy to help during office hours.

If you miss class on a day with an in-class exercise you should complete that exercise on your own. These exercises are not graded, but completing them should help prepare you for an upcoming class topic, assignment, or lab.

If you miss a lab day, I may assign you to a group to complete the lab; I generally do not group students who miss labs with groups that started during class time, so you will end up working individually or with other students who missed the lab. Work is due at the originally-scheduled time unless we have made alternate arrangements for deadlines.

Participation

Your participation in this course will account for 15% of your final grade. To participate fully in this class, you must:

  • attend class
  • ask and answer questions in a way that furthers the discussion of class topics
  • work collaboriatively with group members during exercises, labs, and the class project

Please remember that collaborative work on labs is part of your grade in this course. One of the skills I expect you to develop in this course is to work well with others on challenging technical problems. Preparing for the technical aspects of this course work is critically important, but engaging respectfully with your fellow students is equally important.

A student who consistently engages with course topics, works well with their groups, and has no unexcusted absences should expect to receive a 100% on participation. Students with unexcused absences, or who participate in counterproductive ways will earn a lower participation score.

Citations

Any time you use a resource to help with work you submit for this course you must cite it. Cite your discussions with mentors or other students in the course, assigned readings, class discussions or notes, or any website or book you refer to when completing your work.

When you are citing a resource in the code you write, include the citation in a comment close to the part of the work that was informed by that resource. You are not required to use a specific formal citation style (e.g. MLA, APA) but please do begin all citation comments with the prefix Citation: so they are easy to locate.

Here is an example of a good citation for a discussion with a mentor or another student in the class:

// Loop over elements of the array in reverse to show in descending order.
// Citation: discussion with Jordan Smith (smithjor@grinnell.edu)
for (int i=length-1; i>=0; i--) {
  ...

Here is an example of a good citation of an outside resource (Stack Overflow) in code:

// Move characters left one space in the message using memmove because source and destination may overlap.
// Citation: https://stackoverflow.com/questions/4415910/memcpy-vs-memmove
memmove(&message[0], &message[1], message_length - 1);

Notice that both citation examples include an additional comment that explains what the code is doing. This explanation is required, and must accurately describe the guidance you received from the cited resource. Citing a resource but misrepresenting what it says can rise to the level of an academic honesty issue, so make sure your citation accurately describes what you learned from the cited source.

In many cases, you might have several things you want to say in comments to explain what your code does, not just the information you drew from the cited resource. In this case, keep the citation and explanation together, and separate the rest of your comment from the citation as in this example:

// Create an array to return from this function.

// Returned array must be allocated with malloc.
// Citation: https://stackoverflow.com/questions/11656532/returning-an-array-using-c
int* result = malloc(sizeof(int) * length);
...

The first comment describes what the code is doing and has nothing to do with the citation, while the second and third comment lines make up the inline citation.

Please use this formatting whenever possible, but if you feel that it does not clearly identify how you have used an outside resource, please cite as clearly as possible using your best judgement. If you are unsure how to cite some resource you can always ask the instructor for guidance.

Assignments

Individual assignments will make up 10% of your total grade. These assignments fall into two categories: programming assignments and reading journals. All assignments will be weighted equally, though not all are equally challenging. These assignments are meant to help you prepare for labs and class discussions. Every assignment is listed with a due date and time on the course schedule. You are responsible for submitting each assignment to gradescope by the time it is due. Late assignments will not be accepted.

Programming Assignments

These assignments are intended to help you practice programming skills you will use in labs, and to assess your individual understanding of the course material. I expect everything you submit to be your own work, but you may discuss general concepts and approaches for assignments with other students in the class. You should limit these discussions to conceptual details and general programming challenges, and you must cite the students you discussed the assignment with in your code using comments close to the relevant code. You are welcome to talk about errors, useful functions, and C language quirks with other students, but you may not share your assignment code or rely on another student’s code for an assignment.

Reading Journals

You will need to complete reading journals for several papers we will read in the last few weeks of the semester. Your responses will help me plan the in-class discussion of the papers we read, so do not be surprised if I ask you to repeat a point or question you raised in your journal. Asking questions about papers will earn more points that reciting facts; there is no penalty for failing to understand part of a paper, but a journal that only recites facts about a paper will earn a poor grade. The quality of your writing will have an impact on your grade for reading journals; I expect you to respond clearly in complete sentences and paragraphs with correct spelling and grammar.

You are welcome to discuss these readings with other students, but the journal you submit should reflect your own thoughts about the reading. If those thoughts are directly influenced by anything other than the assigned reading (e.g. other writing, discussions), you must cite those sources in your reading journal.

Labs

Labs will account for 50% of your grade in this class. Most labs will be weighted equally, but one lab (malloc) will take place over two weeks and will be weighted the same as 1.5 regular labs. Unlike assignments, I will accept labs up to one week late; labs turned in after the deadline will have a 20% deduction.

We will start every lab in class on a scheduled lab day, but you will likely need to spend additional time working on labs with your assigned partners. There will be scheduled lab working days for some labs, in addition to the first lab day. While you may find it convenient to use a personal computer for some work in this class, you are required to use the classroom computers for lab work during class time. This will ensure that all members of your lab group have equal access to the work during class.

Labs are the primary assessment mechanism I use for this course; they give you an opportunity to demonstrate that you have learned key concepts from the class. You must earn a passing grade (at least 70%) on every lab to pass this class. I will check the 70% cutoff before any late penalty is applied. That means you can submit a lab several weeks after a deadline to satisfy the 70% requirement even though a lab turned in that late will not change your overall grade.

I will calculate your grade in such a way that resubmitting a lab never hurts your overall grade in the course. For example, if you submit a lab on time but your work earns only 65%, you will need to resubmit to pass the class. However, if your resubmitted lab earns less than 65% (due to the late penalty or a submission past the late work cutoff) this lab will still contribute a score of 65% to your overall course grade. That means that it is always in your best interest to turn in lab work on time, even if your work may not earn a high enough grade to cross the 70% threshold.

Unless you are given explicit permission to do otherwise, you must work with your assigned group for each lab. While I expect that you understand how to work collaboratively, I have found it is sometimes necessary to clearly state some expectations for group work: I expect every member of your lab group to contribute to the work you submit, and that work must be a product of your collaborative effort. That means you cannot divide the lab into parts and work separately, you cannot allow other members of your lab group to complete the lab for you, and you cannot complete the lab on your own without your group’s involvement.

You are encouraged to use outside resources when completing labs, provided you cite them. Online tutorials and guides, posts on StackOverflow, and discussions with other students are all acceptable resources. However, you may not use an outside source for the majority of your implementation. If your assignment is to implement a shell, you cannot simply submit someone else’s shell implementation, even if you provide a citation. If you find an outside source you would like to use but you are unsure whether that would be acceptable, please ask me before using it.

While I expect the work you submit to be the result of work with your group, you may discuss labs with other groups. You are welcome to discuss conceptual details and programming-related challenges with others as long as you cite them (see the example in the prior section), but please do not discuss the code you plan to submit with anyone other than your group. As a general guideline, discussions between groups that take place away from a computer screen are generally acceptable, even if you do end up writing down some small code snippets on a whiteboard or notepad.

Project

Your work on the class project will account for 25% of your final grade. You may complete your project individually, or in a group of your choosing with up to three members. We will begin work on the project in week 11, starting with a proposal for a system that you will implement. The system you build will be up to you, but it must draw on several topics from the course. After completing a project proposal, you will implement your system and present the results of your work at the end of the course. All three components will contribute to your project grade; the proposal is 10% of the project, the presentation is 30%, and the final implementation is 60%.

All project components must be turned in on time unless we arrange alternate deadlines. The project implementation is due at the final cutoff time for work this semester and cannot be extended unless you are approved for an incomplete in the course.

Note that you do not need to complete your entire proposed project to earn a high grade on the project implementation or presentation. I want you to be ambitious with your projects, and I understand that some groups may not be able to produce a working system in the final three weeks of the semester. That is okay. We will discuss the ways that your work will be assessed when we start the project so you understand what you would need to earn a grade you are happy with even for a project that doesn’t go exactly as planned.

Extra Credit

You can earn extra credit in this class by participating in department events during the semester. I will share upcoming department events at the start of class; most events that are eligible for extra credit will be academic in nature, although I may include some additional community events on occasion. For every four eligible events you attend you will earn 1% credit toward your overall grade in this class, up to a limit of 3%. To earn this credit, you must send me an email stating that you attended and participated in the event within 48 hours of your attendance.

Grading

The graded components for this course will contribute to your total grade in the following proportions:

Participation
15%
Assignments
10%
Labs
50%
Project
25%

There will be no curves or competitive grading in this course; every student has an opportunity to earn an A. Your final grade will be determined with the following scale:

A
93–100%
A-
90–93%
B+
87–90%
B
83–87%
B-
80–83%
C+
77–80%
C
70–77%
D
60–70%
F
0–60%

Note that these grade ranges only apply for students who earn at least 70% on every lab in the class. Students with any labs that receive less than 70% (prior to late penalties) will receive a D or F in the course unless they resubmit lab work that earns at least 70% before the end of the semester. See the section on Labs for details on this policy.

You may ask me for your current grade in the class at any point; I will happily give you my best estimate based on the current scale and graded work so far, but these estimates are not guarantees of a specific final grade.

Getting Help

Instructor Office Hours

Please come by during my office hours to discuss course content, get extra assistance, or just talk about how the course is going. My office hours are bookable, but you are also welcome to drop in if I have open times. You can reserve a time for us to meet using the link on the home page.

If you cannot make it to regular office hours, email me to schedule an alternate time to meet. Please send at least three possible meeting times if possible so we can quickly find a time that works for both of us.

Mentor Office Hours

Mentors for CSC 213 hold regular evening sessions during the semester where they can answer your questions and assist with debugging. The schedule for these sessions will be posted on the home page.

Evening tutors may be able to answer questions for CSC 213 material, but not all evening tutors have taken this course so your first stop should be instructor or mentor office hours.

Direct Communications

I am happy to answer questions by email, but please allow 24 hours for a response (except on weekends, when I may not be able to answer at all). If you have an urgent issue that must be resolved quickly, email is the best way to reach me. If an issues comes up and it cannot wait until the next class period, please include the text “URGENT” at the beginning of your subject line.

Accommodations

My goal with this course is to ensure every student has the opportunity to learn and succeed in the class. The subsections below outline the institutional and course policies to support students with disabilies, who need additional support in their learning, or who must miss class for religious observations or preganancy-related conditions.

Students with Disabilities

Grinnell College makes reasonable accommodations for students with documented disabilities. Students with disabilities partner with the Office of Disability Resources to make academic accommodation letters available to faculty via the accommodation portal. To help ensure that your access needs are met, I encourage individual students to approach me so we can have a discussion about your distinctive learning needs and accommodations within the context of this course. If you have not already worked with the Office of Disability Resources and believe you may require academic accommodations for this course, Disability Resources staff can be reached via email at access@grinnell.edu, by phone 641-269-3089, or by stopping by their offices on the first floor of Steiner Hall.

Religious Observances

I encourage students who plan to observe holy days that coincide with class meetings or assignment due dates to consult with me in the first three weeks of classes so that we may reach a mutual understanding of how you can meet the terms of your religious observance and also the requirements for this course.

Academic Support

If you have other needs not addressed above, please let me know soon so that we can work together for the best possible learning environment. In some cases, I will recommend consulting with the Academic Advising staff: http://www.grinnell.edu/about/offices-services/academic-advising. They are an excellent resource for developing strategies for academic success and can connect you with other campus resources. If I notice that you are encountering difficulty, and I have reached out to you and not received a response, or if you have missed multiple class sessions or are not meeting our class objectives repeatedly, I will submit an academic alert via Academic Advising’s SAL portal. This notifies you of my concern, along with the Academic Advising team and your advisor(s), so that they can reach out to you with additional offers of support.

Grinnell College is committed to compliance with Title IX and to supporting the academic success of pregnant and parenting students and students with pregnancy related conditions. If you are a pregnant student, have pregnancy related conditions, or are a parenting student (child under one-year needs documented medical care) who wishes to request reasonable related supportive measures from the College under Title IX, please email the Title IX Coordinator at titleix@grinnell.edu. The Title IX Coordinator will work with Disability Resources and your professors to provide reasonable supportive measures in support of your education while pregnant or as a parent under Title IX.

Academic Honesty

I encourage collaboration when it promotes learning. However, it is important for you to understand the course materials and demonstrate your own learning on assignments. As an instructor, I will meet my obligation to bring any work suspected to be in violation of the College’s Academic Honesty Policy to the attention of the Committee on Academic Standing, after which point there is no recourse with me.

You are free to discuss course readings and labs with other students, but copying is not acceptable. You are allowed to discuss labs and assignments with peers in the class, but these discussions should not lead to sharing of code beyond short snippets that aid in a discussion of general programming challenges or high-level approaches to assigned work. Work that you submit should be your own, and must acknowledge the contributions of others. When you submit individual work, I expect that work to be the result of your individual effort; likewise, group work should be a product of the collaboritive efforts of your entire group.

Misrepresenting who has contributed to work you submit is a violation of the academic honesty policy, and I will inform the committee on academic standing of any such violation. These cases could result in a zero on the assignment, or in the entire course. If you find that your lab group is not contributing, or if your partner(s) completed a lab without you, please tell me immediately so we can resolve the issue before you submit any work.

AI Use

The use of artificial intelligence or large language models is prohibited for all work in this course. You may not use these tools to summarize readings, generate discussion points, write reading journals, write code, or as any other type of resource. This policy is designed to incentivize the activities that best support your learning: reading, thinking, discussing, and writing code on your own and with other students learning along with you. If you are struggling with anything for this course you will get much more out of a conversation with the instructor, a mentor, or another student than you would from an AI tool generating a solution for you.

You should be aware that AI tools often produce similar code for different users, so if you chose to violate course policy and use an AI tool to complete a programming assignment, you could easily end up submitting work that is nearly identical to another student’s work. If I see these kinds of similarities in students’ work I am obligated to report them as an academic honesty violation, even if I do not know whether the similarity is the result of inappropriate collaboration or inappropriate AI use.