CSC 161 is the second course in Grinnell's 3-course, introductory computer science sequence
The course explores elements of computing that have reasonably close ties to the architecture of computers, compilers, and operating systems. The course takes an imperative view of problem-solving, supported by programming in the C programming language. Some topics include:
imperative problem solving: top-down design, common algorithms, assertions, invariants
C programming: syntax and semantics, control structures, functions, parameters, macro processing, compiling, linking, program organization
concepts with data: data abstraction, integer and floating-point representation, string representation, arrays, structures, linked list data structures, stacks, and queues
machine-level issues: data representation, pointers, memory management
GNU/Linux operating system: commands, bash scripts, software development tools
This course follows a lab-based format. Thus, work related to [almost] all class sessions proceed in four stages:
Read Before Class: Reading assignments will incorporate both assigned readings from the textbook and online readings linked from each module. Textbook readings are assigned on most days, and those assignments can be found noted on the schedule. Online readings are linked from the module(s) for most days. Students are expected to complete assigned readings prior to each class session. Each student should prepare a list of questions or topics for class discussion, should questions arise on the reading.
Short Lecture and Q & A Session: There is generally a 15 to 20 minute mini-lecture on the topic for the day. I try to clarify challenging material and highlight the most important points from the readings. However, all material in the assigned reading, including textbook examples, may appear on quizzes and tests. The PowerPoint slides for the day are linked before class so that you have them for note-taking during class (printouts or load onto a tablet for annotation).
Ask Questions and Work on Lab during Class: Each class will begin with questions from students, based on the reading. Following this initial discussion, the course may involve some opening comments or a short quiz on the reading. After these preliminaries, students will work collaboratively, in pairs, on a lab exercise based on the reading.
Finish Lab for Homework: Although the in-class labs will help students get started on the lab exercises, students might not be able to complete the lab during the class period. Any lab work not completed during class should plan be finished as part of homework. I will assign lab partners, with pairings changed approximately every class period.
In addition to an in-class, lab-based format throughout the semester, additional homework is assigned to provide additional practice and to suggest a range of applications.
By the end of the semester, students will be able to:
Course work contributing to your final grade will involve a combination of several activities. Submission instructions vary somewhat according to the type of the assignment.
Attendance and Participation: Your attendance and participation in class is an integral part of your learning, therefore I encourage you to attend class as often as possible and attendance affects your course grade. On each day of class, you will either be marked as satisfactory (S) or not-satisfactory (NS). You may obtain an S each day by meeting the following requirements:
Receiving multiple NS's will enact a penalty on your final grade in the course. Please see the section on grading for more information.
You may be excused for a class under certain situations. Excusable reasons to miss class include college sponsored sports absences, religious holidays, family emergencies, and illness. Please email or meet with me at least a week in advance in the event of a planned absence. In the event of an unplanned absence (such as illness or an emergency), please contact me as soon as you feel able. Please do not attend class if you suspect you may have a respiratory infection such as COVID-19. If you are excused from class, then you will receive an S for the day.
Homework Assignments extend the range of problems considered in the course and help sharpen problem-solving skills. Homework assignments should be turned in by 10:30pm central time on Gradescope on the day they are due. Refer to the schedule for deadlines. These are done individually.
Labs: Labs are started in class with a partner or in a group of three most class days. The purpose of lab sessions is to highlight concepts and constructs introduced in class, allow instructor assistance in a "hands-on" setting, and supplement normal office hours. Some labs require a formal write-up, explaining what work you have done, showing any programming you have done, indicating tests or experiments run, and giving your conclusions. Labs that will have required submissions will be designated on the schedule.
It is possible that you may not finish lab work during class time, which is normal. It is strongly encouraged that you finish labs outside of class (and attain help in comprehension as needed) even if the lab will not be turned in for credit.
Collaboration on labs is encouraged. All lab activities should be done in groups of two or three, unless you have an anticipated, extended absence that makes it difficult to work with a group. When turn-in is required, only one write-up is expected per group.
Quizzes: At the beginning of some class sessions (after initial questions/answer period), a short (10 - 15 minute) quiz may cover basic topics from the reading(s) for the day, or relevant material from the past couple of labs. Dates of quizzes are indicated in the schedule. Questions for each quiz will be drawn from the textbook, online readings, and lab work.
Exams: There will be two "mid-term" exams during the course, and one final exam during finals week. The two mid-terms se are completed on paper and in class. The final exam will also be paper-based, and the time will follow the Registrar's guidance as follows:
As noted above, this course includes a variety of activities, including class preparation (reading), labs and projects (started in class and finished for homework), and homework problems, as well as quizzes, tests, and a final exam. From past experience, the time required for these activities will likely vary substantially from student to student and from one part of the course to another. For example, a student may need to devote considerable time and effort when starting a new or different topic, but the workload may drop noticeably when that material is mastered.
Such variation in student experiences complicates any estimation of the time individual students may need to devote to homework for this course. However, from past experience, students working steadily on the course likely should expect to allocate 10-15 hours per week to this class. Some students may require additional time for some weeks; some students may complete work in less time for some weeks. Conversations with computer science faculty and others suggest this time allocation is consistent with expectations for many courses at Grinnell College.
Nicole Eikmeier (pronouns used: she/her)
Beyond the course instructor, this class has a number of other resouces to help you succeed. Each class has a student mentor. Our mentor will attend class each day and assist with labs. Mentors will also hold weekly mentor sessions to solidify course material and help you prepare for upcoming assessments. Our mentors for each section this semester are:
The Grinnell Computer Science department also employs students as evening tutors. Please refer to the Academic Honesty section of the syllabus to understand how evening tutors may help with labs and homework. Evening tutors are available this semester at the following times in Noyce 3813: Sunday 3-5pm, Sunday-Thursday 7-10pm.
If you find that you still need more help in this course, the department also employs students as individual tutors, and these are available on a limited basis. The procedure for obtaining an individual tutor is to first talk with me. Please note that I will inquire about your current study habits for the class including your use of office hours, mentor sessions, and evening tutors.
K. N. King, C Programming: A Modern Approach, Second Edition, W. W. Norton, 2008, ISBN 978-0393979503.
King often covers details that are not in the online readings, especially regarding the evolution of the language. Students in prior semesters have noted that King's examples are very good illustrations of the concepts being discussed, but the writing style for the prose can be difficult.
Readings and examples for this course are under development. As noted in the day-by-day schedule, complete readings, examples, projects, and labs are available for most class sessions throughout the semester.
Additional References and Resources
If you want a more compact reference book, you may want to check out The C Programming Language, Second Edition, Prentice Hall, 1988, ISBN 0-13-110362-8 (paperback), 0-13-110370-9 (hardback).
Some students have asked for additional practice in the language, and I recommend that you try HackerRank's C practice exercises. With automated feedback, you can work on syntax online and read other programmers' problem solving approaches. (Be careful ... not every proposed solution is correct!!)
Henry Walker, An Introduction to C Through Annotated Examples, available at: https://walker.cs.grinnell.edu/~walker/c/examples/intro.pdf
The GNU make Manual, Free Software Foundation, 2006.
Henry Walker has a nice page on
Course webpage (eikmeier.sites.grinnell.edu/csc-161-fall-2023)
Turn in coursework in Gradescope (gradescope). The entry code will be given to you via email. If you do not have it at the time something is due, please let me know as soon as possible.
Databases, journal articles, and more at Grinnell Library (https://www.grinnell.edu/academics/libraries)
Health and Wellness: SHAW (https://www.grinnell.edu/about/offices-services/student-health)
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 working in paired programming situations. However, to be successful, collaboration requires partners to actively participate.
Failure to meet one's responsibilities to a group not only impacts the individual, but also impedes the education of the partner. 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 a change in partners.
Students are expected to know and abide by Grinnell College’s Academic Honesty policy. In addition, in this course, it is my expectation that students may collaborate (with each other, with mentors, with tutors, with the course instructor) on labs and homework, however your collaboration must be attributed. Collaboration is not allowed on quizzes and exams.
When you work in a group on a lab, the names of all students in the group should appear 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, it is my expectation that your solutions are written individually. For example, you may work at a whiteboard with classmates or evening tutors to develop ideas, and then type up code individually. Evening tutors can also help you debug. No-one other than you should be typing any portion of your solution. In any case, help should be attributed in the academic honesty certification.
I know that there is great temptation to look for answers and ideas online when things get difficult, however you may not use any online materials besides those found on our course webpage (this includes ChatGPT, GitHub Copilot, websites that gather homework solutions, among many other resources). I will provide you with numerous resources to get help which include office hours, group class work, mentor sessions, and evening tutors. It is my hope that these resources ease some of the pressure that you might feel to look online. If you have questions about how a particular assignment relates to the college or course academic honesty policy, or how to attribute your collaboration, I will gladly consult with you in advance of the assignment’s due date.
I highly encourage you to attend all class sessions. Attendance affects your learning in this course, and thus affects your grade. If you know in advance that you will miss class due to a college-sponsored sport or a religious holiday, please let me know in the first two weeks of the semester. If you have another emergency come up, please let me (or the college) know when safe for you.
This class moves along at a pretty brisk pace after the first few days, and it is essential that you stay on top of class preparation, in-class labs, and handing in homework and projects. Your classmates and weekly lab partners depend on your contributions to learn new material and complete the required work for this course. Don’t let them down! You are expected to arrive on time and participate actively in every class. I will aim to have your reading assignments and lab work visible a week before class so that you can read ahead.
Deadlines are shown on the Class Schedule , and work is due by 10:30 pm on the date indicated. However, I will attempt to be as flexible as possible in accepting late work. I am aware that there are a number of things outside of your control that may affect your ability to complete work on time. Any lab or homework may be turned in up to 48 hours late without penalty, without prior approval, however I appreciate if you let me know if you plan to turn in work late. Assignments turned in more than 48 hours late, without prior approval (before the original due date) of the instructor will not be accepted. Please refer to the Anticipated Work Load statement, to emphasize that you should attempt to follow the posted deadlines. Please keep in mind that if you turn in work late, I may not be able to grade it as quickly as you or I hope.
I reserve the right to grant class-wide extensions to stated deadlines under certain circumstances. For example, if the Linux network (MathLan) is down for a significant amount of time, or if there are difficulties with Gradescope.
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 two 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.
Cell phones, text-messaging devices, and other social-networking connections may not be used in this class. If you bring such equipment to the classroom, it must be turned off (or at least, silenced) before the class starts and stay off throughout the class period. Use of such equipment is distracting to those nearby.
Also, do not use your laptops or iPads to watch videos unrelated to the class material - I will ask you to put them away. You MAY use them to access course materials while working on labs.
Materials you have obtained from this course including homework, quizzes, and exams should not be distributed outside of the members of our class. Live synchronous sessions should not be recorded by students.
Using text or code generated by ChatGPT, GitHub Copilot, or any other Artificial Intelligence and submitting it as your own work is in violation of our academic honesty policy.
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).
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 background, family education level, ability – and other visible and nonvisible 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 instructor's grading philosophy dictates that the final grade should ultimately be based upon each student's demonstration of their understanding of the material, not on the performance of the class as a whole. The following scheme is used as a base for how the various assignments and tests will be counted in the final grade.
| Lab Write-ups: 20% | Homework: 20% | Quizzes: 10% | Midterms & Final: 45% (15% each) | Best Individual: 5% (best of average homework, average quiz, or average exam) |
Regarding Attendance & Participation, recall from the course components that you will be marked as S or NS for each of the 41 class days. Attendance and Participation affect your grade, but only by penalty. If you receive an NS for more than 3 days, you may not receive a grade higher than a B+ in our class. Similarly, if you receive an NS for more than 6 days, you may not receive higher than a C+ in our class. Finally, if you receive an NS for more than 10 days, you may not receive a grade higher than a D.
Letter grades will be assigned by this schema:
| Percentage | Letter Grade |
|---|---|
| 94 - 100 | A |
| 90 - 93 | A- |
| 87 - 89 | B+ |
| 84 - 86 | B |
| 80 - 83 | B- |
| 77 - 79 | C+ |
| 70 - 77 | C |
| 60 - 69 | D |
| 0 - 59 | F |
You may notice gaps in this table. If your grade falls in a gap (such as 83.5%) at the end of the semester, it will be at the instructors discretion whether to round up or down.
To encourage you to support your peers and be an active member of the Grinnell community, I will award extra credit for attending certain events. You can earn extra credit for up to six activities (three academic and three peer support). Elligible extra credit opportunities will be announced at the start of class each day.
For each extra credit activity you complete, you will gain an opportunity to re-do one problem of your choice from a Homework or Exam. More details about this process can be found our page about Extra Credit.
All work for the course is due by 5:00 pm on the last day of finals (12/15/2023). In exceptional circumstances, incomplete grades can be granted. Talk with me if you think you might need an incomplete to complete all the requirements of the course. Please be aware that granting incompletes this semester will be particularly challenging for me.
Planning and development of materials for this course represent an extensive effort:
Although the developers have read, re-read, and refined the materials extensively, one can be confident that typographical errors remain.
If you find an error, if something does not read well, if deadlines on one page do not seem to match those stated on another page, etc. — don't panic (or use colorful language). Rather, please talk to the instructor (nicely please). I usually have my laptop computer handy and can change it while you work on the day's lab. Thanks!
Do your best to maintain a healthy lifestyle this term by eating well, exercising, avoiding drugs and alcohol, getting enough sleep and taking some time to relax. This will help you achieve your goals and cope with stress.
All of us benefit from support during times of struggle. You are not alone. There are many helpful resources available through campus and an important part of the college experience is learning how to ask for help. Asking for support sooner rather than later is often helpful.
If you or anyone you know experiences any academic stress, difficult life events, or feelings like anxiety or depression, I strongly encourage you to seek support. Student Health and Wellness (SHAW) is here to help: call 641-269-3230 and visit their website. Consider reaching out to a friend, faculty, or family member you trust for help getting connected to the support that can help.
If you or someone you know is feeling suicidal or in danger of self-harm, call someone immediately, day or night: