Course Syllabus

CSC 161 is the second course in Grinnell’s three-course introductory computer science sequence. This course introduces the imperative problem solving approach to computation using the C programming language. This syllabus lays out the structure for the course and your responsibilities; please review it carefully and ask your instructor if you have any questions.

Course Format

This course is taught in a workshop style. Your work related to most class sessions will proceed in four stages:

Stage 1: Read Before Class
Most days of class will have an assigned reading from the textbook or supplemental online resources. Students are expected to complete assigned readings before each class session. Each student should prepare a list of questions or topics for class discussion, should questions arise on the reading.
Stage 2: Class Discussion
Most classes will begin with a short discussion of the topic for the day. This discussion will focus on challenging material and highlight the most important points from the readings. However, all material in the assigned reading may appear on quizzes and tests, even if we do not discuss them in class.
Stage 3: Lab Work
The majority of class time will be spent working on daily lab exercises with assigned partners. You are expected to stay on task during these lab times and to work in a manner that supports your partner’s learning.
Stage 4: Homework
You will need to submit weekly lab reports to show the effort you put into the course material, which may require you to complete labs with your partner outside of class time. There will also be individual assignments that will give you additional practice with course concepts.

Some days will use a different format, notably days with quizzes or exams. Pay close attention to the course schedule to make sure you are prepared for each day of class.

Learning Outcomes

By the end of the semester, students who complete CSC 161 will be able to:

  1. Work collaboratively with others to solve problems in a low-level imperative language.
  2. Work productively in a UNIX-style environment by navigating and manipulating the filesystem, running programs, and searching documentation through a command-line interface.
  3. Write programs using imperative control flow and side effects.
  4. Write programs that interact with the world through user input and output as well as files.
  5. Explain the binary representation of integers and floating point numbers.
  6. Write programs that manipulate binary data using shifting and bitwise operations.
  7. Write memory-safe programs using strings, arrays, pointers, and structures.
  8. Use common development practices to work comfortably in C, including Makefiles and separate compilation.
  9. Identify and correct errors in C programs manually and with tool support.
  10. Implement sequential data structures and their fundamental operations using dynamically allocated arrays and linked lists.
  11. Use common strategies to design and implement memory-safe C programs, including memory ownership and const.
  12. Reason about the data representation and behavior of existing programs.
  13. Analyze stateful programs using preconditions, postconditions, invariants, and runtime assertions.

Course Components

This course includes several graded components, each discussed in more detail in the following sections:

Attendance
Attendance is required, but some absences may be excused.
Participation
Engage constructively in in-class activities.
Labs
Complete daily labs with assigned partners and submit weekly lab reports. Lab reports must be submitted on time to receive credit.
Homework
Complete individual homework assignments that build on concepts from class. Homework can be submitted up to 24 hours late with the use of a token.
Quizzes
Take (almost) weekly quizzes that cover recent material.
Exams
Take three exams during the semester to demonstrate your learning.

Workload

The time required for these activities will likely vary substantially from student to student and from one part of the course to another. Given that variation, it is difficult to estimate the time individual students will need to devote to this course. The college expects that a four-credit course should take approximately 12 hours per week, including time in class. That means you should expect to spend 7.5 hours outside of class on readings, labs, assignments, and reviewing for quizzes and exams each week. Some weeks will be lighter than others, but if you find you are consistently spending far more than 12 hours per week on this course please meet with the instructor to discuss the workload and what we can do to address it. The solution may involve adjustments to class pacing but is also likely to include strategies you could take to complete your work in less time

Attendance

Attendance is required for this course because the work we do in class contributes to your learning. However, if you need to miss class you may do so without penalty provided you give timely advance notice. Please let your instructor know by email that you will be absent the week before any foreseeable absences (athletic events, religious observances on the College’s high holy days, etc.). You do not need to share details about your absence for it to be excused; advance notice is sufficient.

If you are sick, please do not come to class. Absences for illnesses will be excused as long as you send notice by email at least 30 minutes before class starts. You do not need to share any information about your illness or document your illness for it to be excused.

An excessive number of unexcused absences will impact your grade. The tokens section below includes details about tokens and absences.

When you miss a day of class you are still responsible for the material covered in class. You should review readings, labs, and notes from class and consult with peers who were in class on the day you missed to catch up. Mentors, evening tutors, and the instructor will not give make-up lectures for missed days, although we are all happy to answer questions when students have made an effort to catch up on missed material.

If you miss a significant number of class days (including via excused absences) it may be difficult for you to meet the expectations for this course. There will not be a direct grade penalty for a large number of excused absences, but you should expect to hear from the instructor and student advising (via SAL) if you miss class frequently. The goal here is not to scold you, but to make sure you’re aware of the situation and have the information you need to stay on track or withdraw from the course if completing it successfully is no longer feasible.

Participation

In addition to attending class, you are also expected to participate productively in class activities. Participation accounts for 10% of your overall grade in the class. To participate in class you should:

  • Prepare for class by completing assigned readings
  • Arrive on time and stay for the entire class period
  • Actively engage in whole-class discussions and activities
  • Work respectfully and supportively with classmates

Students who meet all of these expectations should expect to earn a participation grade of 90%. Higher participation grades are reserved for students who consistently go above and beyond in their work by shaping class discussion in productive ways, through exceptional support for their peers in class, and other positive contributions to the other students’ learning.

I will share an assessment of your class participation near the middle of the semester so you have time to address any areas where you may be falling short. If there are recurring issues with preparation or collaborative work we may need to talk earlier in the semester to make sure you are on the right track for the course.

Labs

Most days of class will include an in-class lab activity. You will complete labs with assigned partners. These groups will change each week so you will not be working with the same students for the entire semester. You might not finish every lab exercise during class time, but you are responsible for the material in each lab.

The only work you will turn in for labs is a weekly lab report, which you must complete with your assigned group. Lab reports will generally ask for responses to specific questions from the week’s labs, and should not take much time to complete beyond the time you spent on the lab itself. These reports serve primarily as a check to make sure you are putting in a reasonable effort to complete lab work and as an opportunity for early feedback. If you are unable to work with your lab group due to illness or an emergency you may be able to submit lab reports separately, provided you talk with your instructor first.

Lab reports will account for 15% of your grade in the class. Each part of a lab report (usually corresponding to one day of class) will receive full credit, half credit, or no credit. Work that is correct or nearly correct with evidence of significant effort will earn full credit. Incomplete submissions or work that is incorrect with little evidence of further effort will earn half credit. Missing work or work that shows very little effort will earn a zero.

Homework

Homework assignments go beyond the work we complete during in-class labs and provide an opportunity for individual practice and assessment. You may talk with peers about conceptual questions or course topics related to homework assignments, but the work you submit (usually code) should be entirely your own work, not collaborative work with peers. There is one exception: you may use code from a lab as part of a homework assignment as long as you cite the lab and your lab partner.

Homework assignments will account for 20% of your grade in the class. The grading will differ from assignment to assignment, but homework will generally be evaluated with more attention to detail than lab reports.

Quizzes

Most weeks of class will include a ten-minute quiz on Fridays that covers topics from the week, including topics from the reading assigned on that day of class. Quizzes are listed on the course schedule.

If you have an excused absence on a quiz day you can make up the missed quiz, provided you begin the process of scheduling a make-up quiz before your absence. Make-up quizzes must be completed before the graded quiz is returned, generally by the middle of the following week. Opportunities to take make-up quizzes will sometimes be limited and are not necessarily guaranteed, so please ask for make-up quiz times as soon as you know you will be absent.

Quizzes will make up 10% of your overall grade in the class. Your lowest-scoring quiz will be dropped when tabulating your overall quiz grade, so if you miss one quiz because of an unexcused absence or are unable to schedule a make-up quiz your grade will not be affected.

Exams

The class will include three in-class exams. Each exam will account for 15% of your overall grade in the class (so 45% total). The second and third exams will be targeted at recent material, but because so much of what we learn in this class is cumulative in nature, you should expect material covered on prior exams to be necessary for later exams. Exams are listed on the course schedule.

Make-up exams are available only in extremely limited cases. If you must miss an exam for an athletic event you can arrange to take the exam during one of the other sections of the course, provided you contact the relevant instructors at least a week ahead of time. If you need to miss an exam because of an emergency or serious illness, contact the instructor as soon as possible. Make-up exam availability is not guaranteed, but may still be possible.

Course Policies

Collaborative Work

Work on labs in this course is done collaboratively (in pairs, occasionally in a group of three). Many studies suggest substantial benefits to learning with this type of group work, and it is an industry practice in some software development methodologies. In recent surveys, up to 70% of developers have worked in paired programming situations. However, to be successful, collaboration requires partners to actively participate.

  • Each partner should come to class and actively participate throughout the class session.

  • The navigator should guide the work of the driver by suggesting approaches to problems, raising concerns, and checking work as it is typed in.

  • The driver should follow the navigator’s guidance, answer the navigator’s questions, and stop to explain or discuss any time the navigator asks.

  • All group members should take time to discuss solutions before beginning an implementation, and to answer each others’ questions as they come up.

  • Partners should make arrangements to meet as needed in the lab outside of class to finish labs.

  • Each partner has an obligation to show up and actively participate during planned meetings outside of class time. If you cannot attend a planned meeting you must contact your partner as soon as possible.

  • Make sure that you share your code, even if you are at an intermediate stage, at the end of a lab session. That way, your partner can pick up and work if something comes up so that you cannot meet.

  • When you turn in a lab report to Gradescope, make sure you add your partner to the group.

When you fail to meet your responsibilities to your group that impacts everyone in the group. Thus, except in exceptional circumstances (e.g., illness, family emergencies, serious injury), failure to follow through with one’s responsibilities as a partner may have a significant impact on one’s course grade and/or one’s standing in the course. Possible ramifications of repeated absences include receiving only partial credit for a project or lab submission or a reduction in overall course grade.

If you find that you cannot make your schedule work with that of your assigned partner, contact the instructor as soon as possible to discuss possible solutions.

Academic Honesty

Students are expected to know and abide by Grinnell College’s Academic Honesty policy. Except where explicitly prohibited, you may collaborate with peers in class, tutors, mentors, and the instructor on work for this course provided that collaboration is attributed. Limited collaboration is allowed on homework assignments, provided the work you submit is your own. Collaboration is prohibited on quizzes and exams.

Any group work you turn in should include the names of all group members at the top of the first page. Turning in work with multiple people listed as authors implies that all members of the group agree with what is presented. If a group member does not agree with some part of the work, the group should continue to discuss and revise the material until agreement is achieved. In summary, a group activity is a joint effort, and all group members have equal responsibility for the finished product.

There are specific rules about collaboration on homework. You are allowed to collaborate on homework assignments especially as you explore the problems and begin to develop ideas on how to answer. However, you must write your solutions on your own. You may work at a whiteboard with classmates or evening tutors to develop ideas for a homework assignment, but when it is time to write down the code for your solution you must work individually. Evening tutors and class mentors can help you with debugging. Any assistance on homework assignments must be attributed.

You may be tempted to look for answers and ideas online when things get difficult; feeling stuck is a normal part of learning, and there are resources to help you. However, you may not use any online materials besides those found on our course website and textbook. Prohibited resources include ChatGPT, GitHub Copilot, other AI assistance tools, websites that gather homework solutions, or any other outside resources without explicit permission from the instructor. The resources you can use include the textbook, class readings, the course website, labs, your peers (when collaboration is permitted), course staff, and Linux manual pages.

If you have questions about the academic honesty policy or how to appropriately attribute collaborative work please ask. Asking about course policies is never an academic honesty violation, but violating academic honesty policies is a serious issue whether you do so knowingly or unknowingly.

Technology Usage Policy

You may not use your cell phone during class. You should turn off or at least silence your phone during class time. Using these devices distracts you and those around you.

You may use laptops or tablets for notetaking in class, but only during whole-class discussion periods. All laptops and tablets must be put away during lab time unless you have a documented accommodation that requires you to use a device other than the MathLAN computer you will share with your lab group.

You may not record video or audio from class unless you have a documented accommodation that requires it. If this applies to you, please notify the instructor before class period if you intend to record during class time.

AI assistance tools like ChatGPT and GitHub Copilot are not permitted in this class. These tools can do a very good job of imitating the work of beginning computer science students. Sometimes they even produce useful code that could help a professional developer work faster. However, because you are learning the basics, these tools are more likely to interfere with your learning than to support it. We may discuss productive ways to use AI assistance tools in class, but please do not use them unless you are given explicit permission to do so. Submitted work that includes text or code produced by an AI tool will receive an automatic zero. Submitting AI tool output without citation is a violation of the academic honesty policy and will be handled through the College’s formal academic honesty process.

Accommodations

I encourage students with documented disabilities, including invisible disabilities such as chronic illness, learning disabilities, and psychiatric disabilities, to discuss appropriate accommodations with me. You will also need to have a conversation about and provide documentation of your disability to the Coordinator for Disability Resources, located on the ground level of Steiner Hall (641-269-3124).

Inclusion Statement

It is my intention that students from all backgrounds and perspectives will be well served by this course and that the diversity that students bring to this class will be viewed as an asset. I welcome individuals of all ages, backgrounds, beliefs, ethnicities, genders, gender identities, gender expressions, national origins, religious affiliations, sexual orientations, socioeconomic backgrounds, family education levels, abilities, and other visible and invisible differences. All members of this class are expected to contribute to a respectful, welcoming, and inclusive environment for every other member of the class. Your suggestions are encouraged and appreciated.

This text is adapted from the LGBTQ+ Advocacy in STEM syllabus inclusion statement.

Grading

Graded Components

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

Participation
10%
Quizzes
10%
Lab Reports
15%
Homework
20%
Exams
45%

Letter Grades

There will be no curves or competitive grading in this course; every student has an opportunity to earn an A. Your letter 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%

Tokens

Course tokens are meant to give you flexibility to deal with issues that come up during the semester. Every student begins the semester with three tokens. There may be limited opportunities to earn a small number of additional tokens during the semester.

Unexcused Absences: Each unexcused absence will cost half a token.

Late Homework: You can use a token to submit a homework assignment up to 24 hours late. If you intend to submit homework late you must send a request to the instructor before the original deadline. You will not be able to submit homework late using a token if you don’t give sufficient notice. You can only use one token per homework assignment; homework must be turned in on time or up to 24 hours late with a token to receive credit.

If you have used more tokens than you have by the end of the semester, those tokens will count against your final grade. The conversion rate from overspent tokens to grade penalties is:

1–3 tokens:
One-third letter grade deduction (a B+ becomes a B)
4–6 tokens:
Two-thirds letter grade deduction (a B+ becomes a B-)
7–9 tokens:
A full letter grade deduction (a B+ becomes a C+)
The pattern continues on from there.

Please note: it is possible to fail the course due to overspent tokens despite submitting work that would otherwise earn an A. Manage your tokens carefully.

Resources

Textbook

The required textbook for this course is K. N. King, C Programming: A Modern Approach, Second Edition, W. W. Norton, 2008, ISBN 978-0393979503. This book is our primary source for readings and includes helpful reference materials in the latter portions of the book.

Course Staff

There are many people working to support you in this course. They include:

Your Instructor
Ask questions during class, and arrange times to meet during office hours. You can also contact your instructor by email if you have questions that do not require an office hours appointment. The instructors for other sections of the course may be able to help you in some cases, but your section’s instructor should be your primary point of contact for the course.
Class Mentors
Your section’s class mentor is there to help you during class. You can also attend mentor sessions, which will often be led by mentors from the other sections of the course.
Evening Tutors
The Department has evening tutors who can help with material from this course. Many students arrange times to work during evening tutor sessions so they can ask questions when they get stuck.

The department can provide individual tutors on a limited basis. If you are struggling in the class and you think an individual tutor would be helpful, please meet with your instructor. You should be prepared to discuss your current study habits for the class and any resources you have used so far.

Course Website, Email, and Teams

You are responsible for keeping up with any information about the course that is distributed via this website, email lists, or the Teams instance we will use. The website is the definitive source for the course schedule and policies. We will use Teams for announcements and limited discussion of course topics. Announcements and reminders may also be distributed by email.

Additional Resources