Functional Problem Solving


Priscilla Jiménez

Meeting Times
  • M/W/F 1:00–2:20 p.m. CT - Classroom [Science 3813]
Office Hours
Class Mentors
  • Michael O'Connor (Mikey)
Mentor Sessions
  • Sunday 5-6 pm
  • Wednesday 8-9 pm
  • Typically in CS Commons
CS Tutors
  • Su-Th, 7:00–10:00 p.m. CT
  • Su 3:00–5:00 p.m. CT
  • Tutors in Noyce 3813

About this course

Welcome to CSC-151-02, 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.

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:

  • Describe the fundamentals of computer science: algorithms, data structures, and abstraction.
  • Read and write computer programs in the small in the Scheme programming language.
  • Solve problems using design strategies from functional programming: functional decomposition, computational pipelines, and recursive decomposition.
  • Carry out the basics of the software engineering process: design, documentation, development, testing, and debugging.

In addition to these primary outcomes, we also expect you will take away more general skills and knowledge related to the discipline:

  • Describe the benefits of collaboration in problem-solving and employ best practices when working in groups.

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:

  • A high-level perspective: what is the structure of a musical composition and how can we realize that composition in a computer program?
  • A low-level perspective: how is audio generated represented and processed by a computer program? What sorts of analyses can we perform over this representation?

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

  • Experience shows that CSC-151 exercises different parts of your brain than other courses (even other math and science courses). Expect some challenges, but have confidence that you can work through them and that you’ll come out of the course with much more knowledge.
  • Like learning a foreign language, learning in this course is cumulative: new ideas often build on ideas from earlier. If you feel like you’ve missed something important, please get in touch with the course staff as soon as possible for assistance!
  • Computers have no common sense or compassion. They are complex, and sometimes they do things we don’t expect. When things go wrong, don’t blame yourself. Ask your instructor, your mentor, or a tutor for help!

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!

Time and workload

Grinnell has indicated that a 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:

  • Four hours per week in class
  • Three hours per week on readings (one hour per day)
  • Four hours per week on either mini-projects or SoLAs, and
  • One hour per week for mentor sessions.

If you find yourself working much more than the expected amount in this course, please let me know. It could be that other approaches, or better support resources, can help.


We will use Microsoft Teams to communicate with me and your classmates (some of the questions that you might have can be answered by your classmates or mentor). You can post questions in the Teams course “General” channel.

Communication is key.

Diversity and inclusion

I believe that any college-level course should challenge you and put you outside of your comfort zone. My mission as an instructor is to help you manage that discomfort so that you can grow in knowledge and maturity. Therefore, I strive to create a fully inclusive setting so that we all can ultimately succeed in the classroom.

Religious observance policy

I also support the class’s religious diversity and anyone who needs to balance academic work with religious observations. Please let me 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.

Community guidelines

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.

Other Accommodations

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). I will do my best to be flexible in these cases with the overall goal of facilitating your growth in this course. To do this, I 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, I 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 your needs with them. Students should then notify me within the first few days of classes so that we can discuss ways to ensure your full participation in the course and coordinate your accommodations.

Communication is key.

Evaluation and grading

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. I believe that:

  1. The stated learning outcomes are achievable by anyone that enrolls in this course.
  2. Mastery of the learning outcomes is obtained via exploration, experimentation, and failure.
  3. Eventual mastery should be valued as highly as “getting it right” the first time.
  4. Your final course grade should reflect your mastery of the course’s learning goals at the end of the term.

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:

  • Reading problems: practice problems due at the beginning of each class period that reinforce the material introduced in the readings.
  • Lab exercises: practice and exploration-style problems worked on during class, frequently in a collaborative fashion.
  • Mini-projects: individually completed assignments that apply the weekly concepts to problems of significant complexity.
  • Learning assessments: in-class exams that directly assess mastery of the core skills of the course.
  • Group project: a final group-based project completed during the last half of the semester that acts as a capstone for your learning during the semester.

Reading problems

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, “mathematics is not a spectator sport,” and so these drills are designed to help you begin putting the day’s topics into practice.

  • Each day’s daily drills are due before the start of the day’s class period.
  • Daily drills are graded on a binary satisfactory (S)/non-satisfactory (N) scale. If it is clear that you have put effort into your responses by completing the problems with mostly positive results, you can expect to receive a satisfactory grade.
  • Late daily drills will not be accepted unless you spend a token. (See below for details.)
  • Solutions for the daily drills are posted the day after they are due on the course website. You are expected to check your work against these solutions and bring any subsequent questions you have to the course staff.

Lab Exercises

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.

  • Each set of labs are due the Saturday of the week that the lab is assigned. For example, if labs are assigned on Monday, Wednesday, and Friday, these labs are due the same week on Saturday.
  • Like daily drills, labs are graded on a binary satisfactory (S)/non-satisfactory (N) scale.
  • Also, like dailies, late labs will not be accepted unless you spend a token.
  • Solutions for the labs are posted a few days after they are due. Again, you are expected to check your work against these solutions and bring any subsequent questions you have to the course staff.


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, demonstrations 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:

  • Is the deliverable correct? Does it accurately solve the posed problem? Does it meet the specification outlined in the problem description?
  • Is the deliverable well-designed? Does it follow the design requirements and conventions appropriate to the medium? Is the deliverable clear, and does it communicate a proper understanding of both the problem and its solution?

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:

  • Excellent (E)
    • Complete understanding of the material is evident.
    • Exhibits, at worst, a few minor design errors and can serve as an exemplar solution for the course.
  • Meets Expectations (M)
    • Complete understanding of the material is evident without the need for further revision.
    • Exhibits some minor correctness or design errors that can improve the submission significantly if revised.
  • Needs Revision (R)
    • One or more misunderstandings of the material are evident from the work.
    • Exhibits many minor errors or one or more major errors that necessitate revision.
  • Not Completed (N)
    • Not completed to a degree where understanding is evident.

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 towards 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:

  • If you earn an E on a mini-project, you do not need to perform further revision!
  • If you earn a M or R on a mini-project, the feedback you will be reflective of what you need to change to achieve an E.

You are, then, free to turn in a revision of a mini-project based on your prior submission’s feedback. There are revision windows for turning in mini-project revisions, corresponding to each of the learning assessments of the course. We will grade revisions during those times, so make sure to turn in revisions early so that you can take advantage of successive revision windows if needed. Finally, 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 revision quickly.

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 me either during office hours or through a 1-on-1 meeting. In this meeting, we will:

  • Identify any gaps in your understanding of the material.
  • Develop a plan to get back on track.

Learning assessments

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 learning assessment over the course of the semester. Learning assessments are in-class exams inspired by mastery-based testing practices found in mathematics.

Learning assessments 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 (modulo minor flaws that are understandable given the timed, in-class nature of the exam). Note that, unlikely the demonstration exercises, learning assessments more closely resemble the daily drills 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 learning assessment period of the course, held during finals week, is a revision learning assessment. 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.

Group Project

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.

Overall letter grades

Major letter grades for the course are determined by tiers, a collection of required grades from your demos and core exams. 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: 25 August 2022)

Overall Readings (34) Labs (35) Mini-projects (6) LAs (15) Group project
C 27xS 28xS No Ns
At most 2 Rs
At least 1 Es
Remainder Ms
9xS R
B 29xS 30xS No Ns or Rs
At least 3 Es
Remainder Ms
11xS M
A 31xS 32xS No Ns or Rs
At least 5 Es
Remainder Ms
13xS E
  • D: 3–4 requirements of a C are met.
  • F: 0–2 requirements of a C are met.

Plus/minus grades

To earn a plus/minus grade, you must have completed the requirements of one tier and meet the requirements of the next tier for at least one of mini-projects and/or LAs. This will arise in two situations: C/B and B/A. For example, you may completely meet the requirements of a C and at least one of mini-projects and/or LAs is a B.

  • If both mini-projects and LAs fulfill the requirements for the next tier, then you earn a minus grade for the higher tier, i.e., B- if you are between a C and B.
  • Otherwise, one of the mini-projects and LAs fulfill the requirements for the next tier. If all of the readings and labs fulfill the requirements for the next tier, you earn a minus grade for the higher tier, e.g., B- if you are between a C and B. Otherwise, you earn a plus grade for the lower tier, e.g., C+ if you are between a C and B.
  • Note that Grinnell does not award A+, C- or D+ grades.


Because I care more that you learn the material than that you learn it by a particular deadline, I permit some redos in this course. Redos on learning assessments are automatically available; you may try them again on the next set of learning assessments (SoLA). Your first redo on a mini-project is free. Subsequent redos on mini-projects require tokens. When you receive a graded mini-project, it should include a checklist of issues that you must address to get a higher grade. Please reproduce the checklist in your re-done project. Where appropriate, you should indicate how you addressed the issues we have described.

You may not redo reading problems or lab writeups.

Course Breakpoints

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.

I encourage you to also preemptively come to me 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, I am tracking the following course breakpoints in your progress. When one of the following situations occurs:

  • You have used all your tokens.
  • You receive an N on a mini-project.
  • You do not turn in a revision for a mini-project graded as an R during a revision window.
  • After a learning assessment, your total completed outcomes among all outstanding core outcomes are below 60%.
  • You are otherwise at substantial risk of earning below a C in the course.

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.


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:

  • Turn in any one reading problem, lab, or mini-project up to 48 hours late.
  • Turn in a second redo of any mini-project.

In most cases, I will charge tokens automatically by noting the time of your submission on Gradescope. You should keep track of your token status.

If, at the end of the semester, you have used more tokens than you have, those extra tokens will count against your final grade.

  • Overspending of 1–5 tokens will drop your grade by 1/3 letter, i.e., from a B+ to a B.
  • Overspending of 6–10 tokens will drop your grade by 2/3 letter, i.e., from a B+ to a B-.
  • Overspending of 11–15 tokens will drop your grade by 1 letter, i.e., from a B+ to a C+.
  • …and so forth for every 5 overspent tokens.

Software, textbooks, references, technology, and such

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.


Help, collaboration, academic honesty, and academic integrity

To help expedite your learning, you can rely on me, our class mentor, and your peers as outlets in this course.

The Instructor, course staff, and other resources

When contacting the course staff, please use direct messages (DM) on Microsoft Teams. While we will generally not respond immediately—we will check our messages at fixed times throughout the day—we will prioritize responses to student questions over Teams versus queries sent through other means, e.g., email.

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. I 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). I 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 I’ll work with our peer education coordinator to get one assigned to you.

Peer learning

Finally, if you would like to discuss things in more detail—–course content, more general questions about computer science, or other things—–feel free to schedule a meeting with me, either during office hours or, if those don’t work, by sending me a message with available times.

Note that if I find that you have fallen behind on assignments or are showing difficulty on quizzes or learning assessments, I will invite you to meet with me. Please accept those invitations; they are intended to be supportive, not punative.

Peer learning and external resources

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:

  • You are encouraged to collaborate with your peers on reading exercises and labs. You may also consult the course staff as well as other people and external resources. In all cases, you (or your group in the case of group work) should independently write up your solutions and cite all the resources you used in authoring your work, including the other students.
  • You may only discuss mini-projects and learning assessments with the course staff. When completing assessments and quizzes, you may only consult the course website. You may not collaborate with peers, consult external resources beyond the ones mentioned above, or share information about these assignments with others.

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 me 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. I 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.

Code completion assistants

In an introductory programming course, we believe you must 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.

Sharing of course materials

Our goal is to create an inclusive learning environment where people feel free to share, fail, and ultimately grow in knowledge. To create such an environment, we must be mindful of what we share outside of our learning space. To this end, I request that you refrain from sharing any recordings of our class meetings with others. Recordings of class meetings that we provide, e.g., recorded through Microsoft Teams, are meant for your personal use and should not be shared outside of the class.

Furthermore, 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 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., significant 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.