Welcome to CSC-151, Grinnell College’s introductory computer science course. In this course, we will work to develop your experience with algorithmic problem-solving. While we will be using Scheme as our programming language for this course, you will quickly see that the problem-solving skills we learn in this class apply to other languages and in settings that don’t involve programming at all.
This semester, CSC-151 will emphasize computer music and sound synthesis, using of computing technology to create, manipulate, and consume audio. CSC-151 requires no prior knowledge of computer science or computer programming. We’ll teach you everything we want you to know. It’s okay if you have some experience (although this may sometimes put you at a disadvantage; we do things differently), but it’s certainly not necessary.
(Last updated: 8/24/2023)
(Due to the rapidly changing world that we find ourselves in, the policies of this syllabus are perpetually subject to change. Significant changes to course policies will be announced in class in addition to being reflected in the syllabus online.)
How do we harness the power of modern-day computation to solve problems? Why is computation so pervasive in this information age? What is this field, computer science, that drives much of this innovation?
To address these questions, we will introduce you to the basics of computational problem-solving: describing and decomposing problems of a computational nature so that we can implement their solutions with a computer program. We will demonstrate that computational problem-solving is the essence of computer science and is an essential first step in understanding the discipline and its effects on society. By the end of this course, you should be able to:
In addition to these primary outcomes, we also expect you will take away more general skills and knowledge related to the discipline:
Computer Music
Computational thinking and computational techniques can be applied to a wide variety of domains. At Grinnell, we have a tradition of picking a domain or “theme” for each offering of CSC-151. The theme for this semester is computer music, the application of computational techniques toward creating, analyzing, and consuming audio. We’ll take two perspectives on music in this course:
Why take CSC-151?
Basic knowledge about solving problems computationally is useful in careers involving every major and concentration offered at Grinnell. This course outfits you with some versatile concepts applicable to other programming languages and environments you will encounter in the wild. Finally, you have the opportunity to be creative in many ways, from problem solutions to finding new approaches to data. Creativity is highly encouraged!
Important Notices
We are also using software developed at Grinnell and may still have some bugs lurking within. Thus, you should develop a habit of saving your work frequently!
A Grinnell 4-credit course, like this one, should involve approximately 180 hours of work. Across a 14-week term (plus finals week), that ends up being approximately 12 hours of work per week. While these are gross generalizations that vary for each individual, you should expect to break down these 12 hours as follows:
If you find yourself working much more than the expected amount in this course, please let us know. It could be that other approaches, or better support resources, can help.
There are several software packages we use in this course both for learning how to program as well as conducting learning online.
Please make sure you can access all of these resources, and please let me know if you have any problems with access.
There is no required textbook for this course, as the material is written by Grinnell faculty and posted on the course website. However, there are some useful textbooks and references you may want to bookmark or keep handy.
We believe that any college-level course should challenge you and put you outside of your comfort zone. Our mission as instructors is to help you manage that discomfort so that you can grow in knowledge and maturity. Therefore, we strive to create a fully inclusive setting so that we all can ultimately succeed in the classroom.
We support the class’s religious diversity and anyone who needs to balance academic work with religious observations. Please let us know by week two if you will need to be absent from class for any religious holidays this semester, and we can work out an appropriate schedule for making up absences or missed work.
Our class is a learning community. We should behave as such. Among other things, that means treating others with respect, not only in the language that we use (no slurs, please), but also in taking ideas, approaches, and perspectives seriously. We will discuss appropriate guidelines for the class throughout the semester, developing those guidelines as a community.
There are a limitless number of dimensions to diversity and inclusion, the totality of which are unaddressable with a finite set of policies. These may include other issues best addressed earlier in the semester (e.g., student-athlete scheduling) or as they arise (e.g., chronic health flare-ups). We will do our best to be flexible in these cases with the overall goal of facilitating your growth in this course. To do this, we need to receive advanced notice from you at least one week in advance so that we can make suitable arrangements. For situations that arise within a given week, we will ask you to utilize the token system (described in the evaluation section) to manage your workload. Grinnell College makes reasonable accommodations for students with documented disabilities. Students need to provide documentation to the Coordinator for Disability Resources (Jae Hirschman - 641-269-3124) and discuss their needs with them. Students should then notify us within the first few days of classes so that we can discuss ways to ensure their full participation in the course and coordinate their accommodations.
Our grading philosophy comes from the grading for growth movement described in such texts as Nilson’s Specifications Grading, Feldman’s Grading for Equity, and Blum’s Ungrading. We believe that:
To this end, the course is structured around several deliverables that, when taken together, indicate your mastery of the course’s learning outcomes outlined in the Overview section of the syllabus.
The main activities of our course are centered around five kinds of deliverables:
In each course reading, you will find a small number of practice problems that reinforce the concepts introduced in the reading. As the old saying goes, “programming is not a spectator sport,” and so these drills are designed to help you begin putting the day’s topics into practice.
The bulk of your practice and exploration of the course learning goals come through lab exercises. These lab exercises will allow you to gain familiarity and eventual fluency with the course concepts by exploring and working through problems. More often than not, lab exercises are completed in small groups so that you can take advantage of the benefits of collaborative learning.
Mini-projects are opportunities for you to demonstrate mastery of the course learning goals by applying these concepts and skills to problems larger in scope and complexity than the labs. As often as possible, these projects are drawn from real-world domains to also help you begin drawing connections between the course and other areas of computer science.
We grade mini-projects in more depth than the other deliverables, specifically along two dimensions:
Rather than using a point-based system that obscures these two dimensions, we codify these requirements with an EMRN rubric (an adaption of the “EMRF” rubric designed by Stutzman and Race). Demos are graded on a four-point scale:
Each mini-project has a specific rubric in its write-up that outlines what we will be looking for regarding correctness and design.
Note that excellent ratings represent work that reflects mastery of the material and mindfulness toward producing quality work. To obtain excellent ratings, you should dedicate ample time to review and revise your work—just like writing a paper—before the deadline.
Mini-project Revisions and Feedback
To promote learning and encourage you to produce quality work, we use a revision system for mini-projects:
You are, then, free to turn in a revision of a mini-project based on your prior submission’s feedback. Revisions for a mini-project are typically due one week after your receive feedback on your initial submission. If you would like to revise this work beyond the initial revision period, you must use a token to do so (see below).
When submitting a revision, you must include a short changelog at the beginning of your submission summarizing the changes you have made. Such a changelog will help us process your revisions quickly. If you do not include a changelog, your submission will be rejected without being reviewed by the course graders.
Incomplete Assignments
An N indicates that your submission was not complete enough for us to ascertain that you understood the material or we are unable to give you substantial feedback. With the rapid pace of the course, an N also indicates that you are behind and need to put in extra effort to catch up.
If you earn an N on a mini-project, you must meet with us either during office hours or through a 1-on-1 meeting. In this meeting, we will:
We deem some of the learning outcomes of the course as core outcomes, demonstrable skills that you should be confident in performing by the end of the semester. To directly assess your mastery of these skills, we will conduct a series of core exams during the semester. Core exams are inspired by mastery-based testing practices found in mathematics.
Core exams consist of one problem for each core learning outcome of the course covered so far at the time of the exam. This includes all learning outcomes covered in previous core exams, allowing you re-attempt problems if you missed them on previous exams!
Core problems are graded on a binary satisfactory (S)/non-satisfactory (N) scale where a satisfactory answer is completely correct. Note that, unlike the mini-project exercises, core exams more closely resemble the reading problems in terms of their scope and complexity. Once you receive an S on a problem tied to a particular core outcome, you do not need to attempt additional problems connected to that outcome in subsequent exams, i.e., you have demonstrated mastery of that outcome, so you are done with it!
The final core exam period of the course, held during finals week, is a revision core exam. No new learning outcomes are introduced so that you have a final opportunity to demonstrate mastery of any core outcomes that you have missed throughout the semester.
In addition to the core exams, there will also be weekly quizzes that will present a single problem on a topic relevant for that week. These problems will cover the same core learning outcomes as the core exams, and mastery demonstrated on the quizzes will count towards mastery of the related core learning objective.
Finally, the course group project is an opportunity to dive deep with a group of your peers and further explore the themes of this course with a project of your own design. The details of the group project will be released in the second half of the semester, and you should plan to spend substantial time outside of class working with your group to complete your project.
Your grade for the group project will not rest on your final output. Instead, each member of your group will write an individual reflection outlining your contributions to your project and answering specific questions about the design of your final product. We will then assess this reflection on whether it demonstrates that you have met the learning objectives for the project.
Your grade for the group project will be grouped together with your grades on the mini-projects into a single ‘project’ category, i.e., the group project will count as a final mini-project for the course.
Metacognitive reflections are intended to help you build your broader metacognitive skills and will generally ask you to reflect on what you expect from each project (assignment) or SoLA (exam) (e.g., “What will be the hardest part of this project?”, “Which topic will you struggle most with on the SoLA?”, “How can you best succeed on this SoLA?”) and what you discovered from each project or SoLA (e.g., “What aspect of the project took you the most time and why?”, “How can you do better on the next SoLA?”).
Major letter grades for the course are determined by tiers, a collection of required grades from your mini-projects and learning objectives. You will receive the grade corresponding to the tier for which you meet all of the requirements. For example, if you qualify for the A tier in one category and the C tier in another category, then you qualify for the C tier overall as you only meet the requirements for a C among all the categories.
Note that I reserve the right to update the requirements for grades as circumstances dictate during the semester, e.g., if a deliverable is cut. However, I will always update the requirements so that they are no stricter than they were previously.
(Last updated: 11 December 2023) NOTE: these guidelines are fully updated for Fall 2023!
| Overall | Mini-projects (8) | Core exams (24) |
|---|---|---|
| A | No Ns or Rs At least 6 Es Remainder Ms |
At least 21xS |
| B | No Ns or Rs At least 4 Es Remainder Ms |
At least 19xS |
| C | No Ns At most 2 Rs At least 2 Es Remainder Ms |
At least 17xS |
| D | At most 2 Ns At most 2 Rs At least 1 E Remainder Ms |
At least 12xS |
| F | Failure to achieve D level | Fewer than 12xS |
Plus/minus grades
If your two primary grades are at the same level, you will earn that letter as the base grade. I hope that you can all demonstate learning at the A level.
If your two primary grades are at different levels (e.g., projects at the B level and learning assessments at the A level), you will generally earn a grade between the two, with the particular level dependent on where in the range of each you fall. Note that if you receive a C on one primary grade and an A on the other, your base grade will be a B-.
If your two primary grades are split, the lower level will determine whether you get a + of the lower grade or a - of the higher grade. If you just meet the minimum requirements of the lower level, you will receive a + of that lower grade. If you exceed those minimum requirements (but still do not meet the requirements of the next level up), you will receive a - of the higher grade.
For example, if you qualify for an A for projects, but only have 19xS for learning assessments, you will receive a B+ because 19xS is the minimum requirement for the B tier. However, if you had instead received 20xS for learning assessments, your grade would be an A- because you exceeded the minimum requirement.
Your grade may also be affected by reading problems, labs, metacognitive reflections, and tokens.
Note that Grinnell does not permit grades of C-, D+, or D-. A grade below C and at least D will be recorded as a D, while a grade below a D will be recorded as an F.
Reading problems, labs, and metacognitive reflections
You are allowed to miss up to six total reading problems, lab assignments, and metacognitive reflections in the semester without penalty. If you miss more than reading problems, labs, or reflections, your overall letter grade will be lowered by one-third of a letter grade for each two additional problems, labs, or reflections you miss. Excesses of one also result in a loss. For example,
I hope that you will do your best to miss as few reading problems, labs, and reflections as possible.
Our grading system offers flexibility, but at the cost of giving the illusion that if you fall behind in your work, there is always an opportunity to catch up. While this is true in theory, in practice, it is difficult to do so in many situations because of personal issues, competing courses, extracurricular obligations, etc. This flexibility also makes it difficult—for both you and myself—to determine when you have fallen behind in the course and need external help whether that it is from the course staff, tutors, or academic advising.
We encourage you to also preemptively come to any member of the course staff—instructors, mentors, etc.—for help and guidance if you feel like you are falling behind. However, to be more clear about when you might be falling behind in the course, we am tracking the following _course breakpoints in your progress. When one of the following situations occurs:
I will follow up with you as well as academic advising (via an academic alert) to check in, provide guidance, and develop a plan for getting back on track, e.g., assigning an individual tutor.
Please note that I am understanding of your individual situations, and that it alright if you need to take a day off for health reasons. But I ask that you contact me if you are going to miss class for whatever reason, even if it is a last second notification. Otherwise I’ll worry about you! (And notify academic advising so they can check up on you.)
Tokens reflect that life inevitably rears its ugly head in some fashion and ruins your best-laid plans. You begin the course with 3 tokens, and you may use 1 token to:
In most cases, we will charge tokens automatically by noting the time of your submission on Gradescope. You can check your current token status on Gradescope.
At the end of the semester, if you have used more tokens than you possess, those extra “negative tokens” will count against your final grade.
And so forth for every 5 overspent tokens.
You can earn additional tokens on top of your initial three topics by attending CS-related community events such as CS extras or CS tables. To do so:
See the Tokens Page for more details.
To help expedite your learning, you can rely on the course staff and your classmates as outlets in this course.
Use Teams as a first point for asking questions (that are appropriate for the whole class to see) by posting in the “Questions and Answers” channel. Also, feel free to answer questions as you are able and contribute to our learning community!
When contacting the course staff directly, please use either email or Microsoft Teams DMs. Each course staff member has a preference for one medium over the other, so please ask them before sending a message. Regardless of the medium, note that we will not generally not respond immediately—we will check our messages at fixed times throughout the day.
The course mentors also hold optional mentor sessions outside of regular class time. In these sessions, the mentors guide you through practice problems designed to help you master the material and answer any questions you have about the material. We highly recommend you attend each of these sessions, even if you feel like you understand the material. You never know what you don’t know, and the purpose of these sessions is to bring these blind spots to light!
The CS department provides evening tutors from 7–10 p.m. most nights of the week (Sunday through Thursday). We encourage you to make use of the evening tutors.
The CS department also provides individual tutors as needed. If you find yourself struggling with the material, please let me know and we will work with our peer education coordinator to get one assigned to you.
Utilizing discussion with peers and other external resources to facilitate your learning is a critical skill for success in computer science. However, at the same time, you must be aware that getting stuck and pushing through challenging problems is essential for making your learning robust. To this end, we allow the following forms of collaboration:
Keep in mind that adaptation of pre-existing code whether it comes from a peer, myself, or the Internet, requires a citation in cases where it is allowed. Also, whenever you are expected to show your code’s output, you are expected to reproduce the output faithfully. In other words, you should not forge the results of your programs!
In all cases, the work that you produce should be your own. The golden rule is that you should be capable of reproducing your deliverable on the spot with minimal effort if it was accidentally deleted.
If you feel that the stress and pressure of the course are compelling you to violate the academic honesty policies of the course and the college as explained in the student handbook, please talk to an instructor as soon as possible. The course’s grading policies as designed to help you manage your time in light of the different stressors in your life. We will do my best to work with you to figure out how to help you better manage your time relative to your learning goals and desired achievement level for the course.
In an introductory programming course, we believe you must write code yourself to internalize the material. The act of construction reinforces concepts, checks your knowledge, and gives you opportunities for learning by failure that ultimately accelerate your learning. Similarly to prose, there are auto-completion tools for programming that will write various parts of the code for you. While useful in production scenarios, these tools deny you the opportunity to learn by construction. Consequently, we disallow any auto-completion tools not already provided by the course software. This includes auto-completion provided by extensions or plugins to the course’s recommended IDE beyond those required by the course.
While you retain copyright of the work you produce in this course, we must still uphold the academic integrity of this course. To this end, you may not share copies of any of your assignments with others (unless otherwise allowed by the course policies) or upload your assignments to third-party websites unless substantial changes are made to the assignment (e.g., extensions and improvements to your code) so that it is clear that the end product is significantly different from what was asked in the original assignment. I do recognize that there are times when you want to do this, e.g., uploading projects to Github for your resume or to show to friends and family, and so I encourage you to talk to me in advance so that we can ensure that you upload a meaningful project that does not run afoul of this policy.