Skip to main content



Welcome to CSC 151! The official course description for this class is:

A lab-based introduction to basic ideas of computer science, including recursion, abstraction, state, information-hiding, and the design and analysis of algorithms. Includes introductory programming in a high-level, functional language. Prerequisites: None.

In other words, you will be introduced to the basics of computation, learning how to adequately describe and decompose problems of a computational nature so that you can effectively tell a computer the steps it should take to solve the problem. We will study some beginning concepts that make this process possible, easier to undertake, and often elegant. Our major objectives for this course include:

  • Understanding some fundamentals of computer science: algorithms, data structures, and abstraction.
  • Familiarity with the practice of computer programming (design, documentation, development, testing, and debugging) in a high-level programming language, Scheme.
  • Learning about solving problems in the functional paradigm.
  • Sharpening general thinking and learning skills.

Why take CSC151? Some basic knowledge about solving problems computationally can be useful in careers involving every major and concentration offered at Grinnell. (I invite you to challenge me with one if you are skeptical.) This course will outfit you with some versatile concepts that are applicable to most other programming languages. Plus, you get to be creative in many different ways, from problem solutions to works of art. Creativity is highly encouraged!

Important Notices

  • Experience shows that CSC 151 exercises different parts of your brain than other courses (even 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 in the course. If you feel like you’ve missed something important, please come talk to me right away.
  • 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.

In addition, we are using software that has been developed at Grinnell and may still have some bugs lurking within. It is entirely possible that it may crash for no good reason. Thus, you should develop a habit of saving your work frequently (or subconsciously twitch control-S to save, as I do).


My goal is to help you learn as much as possible in this course; please let me know what I can do meet your learning needs. If you have a disability that requires accommodations, please contact Disability Resources. Disability Resources will work with you to determine your needs, and will provide you with paperwork outlining the accommodations you require. Please give me this paperwork at least a week before the course activity for which you need accommodations. If this timeline is not feasible for any reason, please contact me as soon as possible and we will work together to find a solution.

Textbooks / references

There is no required textbook for this course, as the material has been written by Grinnell faculty and will be posted on the web. However, there are some useful textbooks and references you may want to bookmark or keep handy.




My goal is for everyone taking this course to be able to demonstrate familiarity, fluency, and excellence with the course concepts. I would be very happy if you all met the goals above and received “A”s. The following weighting of individual activities will provide a basis for evaluation.

Penalty only
10% (best of homework, quizzes, or exams)

Some work may be graded by someone other than the instructor. However, any questions or concerns about grading should only be directed to the instructor.

The grading scale for this course will be:


You may note that there are some gaps between ranges. I reserve the right to make decisions about which direction to “round” values in those gaps. I also reserve the right to adjust this scale during the semester. You will be notified of any changes, and the scale will not change in the final two weeks of the course. You may ask me for your current grade in the class at any point; I will happily give you my best estimate based on the current scale and graded work so far, but these estimates are not guarantees of a specific final grade.


Your classmates and partner(s) 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 actively participate in every class.

Because your participation is so important, I will not grant excused absences except in exceptional circumstances. I will deduct 1% from your final grade for each absence and 0.5% for each time you are late to class. However, each student is allotted a 2% “penalty buffer,” so you may miss two classes or arrive late four times with no impact ony our final grade. This policy is intended to give you the flexibility to deal with brief illnesses or personal issues that require you to miss class.

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

If you need to miss more than two class periods for an exceptional reason (e.g. to attend an academic conference, deal with a family emergency, or due to long-term illness) please talk to me as soon as possible and we will make an alternate arrangement.

If your are sick, please do not come to class. Stay in your room, rest, and seek medical care as needed. Student Health and Counciling Services (SHACS) offers health and mental health services to students.


Because much of our work in this course involves collaboration and discussion, you will be evaluated on your participation. Participating in class involves:

  • being present in class (physically and mentally)
  • coming to class on time
  • coming to class prepared
  • asking questions when appropriate
  • making positive contributions to class discussion by volunteering and when called upon
  • staying on task during lab exercises, and
  • working effectively with your lab partner(s)

Students who regularly meet these criteria can expect to earn an A- for their participation grade. I will reward students who regularly provide significant insights or guide discussion in productive ways with a higher participation score. Students who fail to participate regularly (e.g., demonstrating a lack of preparation or involvement during lab exercises) or who participate in counterproductive ways (e.g., by dominating the conversation, making inappropriate comments, or getting off-task) can expect to earn a lower score.


We will complete labs in class almost every day. You will be asked to submit a subset of the lab work via email for most labs. Your grade on labs will account for 10% of your final grade. Labs will be graded on a complete/incomplete scale. Writeups are due by 10:30pm on the next day of class. For example, a lab completed on Tuesday is due at 10:30pm on Wednesday, and a lab completed in class on Friday is due at 10:30pm the following Monday.

If you complete the lab on your own, you must acknowledge your partner’s contributions in your writeup. If you submit the lab together, only one submission is required. However, all group members are jointly responsible for ensuring a submission is made. (For example, if your partner told you he would submit a lab but he forgets to, you will both receive a zero.) For this reason, I recommend submitting labs while you are sitting together and including all named group members in the CC: line of the e-mail.

Submit your lab write-up by pasting the code or answers in the body of an email (do not send an attachment) to by 10:30pm the day it is due. If your writeup is not received by 10:30pm, it will be considered late.

The subject of the email should be of the form “[CSC 151.01] Lab: Title of Lab”. Parties to receive credit (i.e., you and your partner’s name(s) if submitting jointly) should be the first line of the e-mail.


Your write-up should include your solution to each assigned exercise from the lab. If the exercise directs you to write Scheme code, include your Scheme code. If the exercise directs you to find out what the output of some expression is, copy and paste the output from the DrRacket console. If the exercise asks a question or asks you to explain something, write an answer in English. You do not need to copy the entire lab into your write-up (please don’t!), but do include the problem number for each exercise.


Lab write-ups will be graded on a binary scale, 0 or 1. You will earn a 1 if your write-up includes a solution or evidence of serious effort for each exercise in the lab and a 0 if the write-up was not turned in or if some assigned exercises are not attempted. If you were not able to complete some exercises because of their difficulty, you can still earn full credit by explaining where you got stuck and coming to talk with the instructor as soon as possible. In short, every diligent student should earn full credit for lab write-ups.


A homework assignment is due each Tuesday night at 10:30 PM (when there is no project or exam). The homework is intended to let you learn and apply some new algorithms and ideas, rather than merely checking that you’ve learned the basic concepts (as the quizzes do). However, they are not intended to be huge undertakings. If you find the assignments are consistently taking longer than 3-4 hours, please talk to me.

I will give you instructions about what forms of collaboration are permitted on each homework assignment, but generally you will be allowed to work with one or two other students from our section.

When you work collaboratively on a homework assignment, only one submission is required. However, all group members are jointly responsible for ensuring a submission is made. For this reason, I recommend submitting labs while you are sitting together and including all named group members in the CC: line of the e-mail. This also makes it easy for the grader to provide feedback to everyone on the submission.


The course will also include one more substantial project, in which you will have an opportunity to exercise your creativity in working on a program over two weeks. I will inform you of the grading rubric when the project is assigned.


Each Friday, there will be a ten-minute written quiz covering one or two key ideas from the previous week. Because lab work is done in pairs, the quizzes are intended to check each individual student’s understanding of these ideas in a timely fashion (i.e., well before the examinations). If you (or the class as a whole) are missing a key concept, I want to revisit that concept as soon as possible so we can build on it in later lessons. Moreover, studies show that testing is a surprisingly effective learning device.

The course schedule includes 12 quizzes; your lowest quiz grade will be dropped. Because the goal of the quizzes is to check that you have learned basic skills, an answer that is basically correct will receive full credit, even if there are minor syntax issues. For code, my rule of thumb is that the code is basically correct if I believe you could quickly make it work at the computer (and it uses the required ideas). A partially correct answer will receive partial credit at my discretion.

If you arrive to class late on a quiz day for any reason, please enter as quietly and discreetly as possible. In order to avoid distractions to your classmates, you will receive a quiz with whatever time remains and be asked to submit it with the rest of the class. If you wish, you may explain your tardiness after class.

If you require accommodations for these quizzes, please come talk with me as soon as possible.

Extra Credit

To encourage you to support your peers and be an active member of the Grinnell community, I will award extra credit points for attending certain events. You can earn extra credit for up to eight activities, each worth an additional 0.25% on your final grade.


As opportunities for you to demonstrate your programming and design prowess, there will be four take-home exams and an optional final exam. The following are their due dates (10:30 PM), though they will be distributed 5-7 days in advance of the due date.

  • Exam 1: February 14, 2017
  • Exam 2: March 7, 2017
  • Exam 3: April 18, 2017
  • Exam 4: May 4, 2017
  • Final Exam: TBD

You should find the exams challenge you to go beyond what we have done in class.

Midterm take-home exams Take-home exams are open notes, open computer, and open instructor. However, because I intend the exams to assess your own individual understanding of the material, collaboration on exams is not permitted. You should not talk to anyone (except me) about take-home exams before they are graded and returned. You should not discuss the exam problems (nor your answers) with anyone else. You should not give any information about your progress on the exam (e.g., which problems you have completed or which you found difficult), and neither should you ask others about their progress. If you have any doubt about what is and is not permissible, ask the instructor.

Final exam The final exam can be used to replace your lowest score on one other examination. Although the final for this class is optional, you may end up deciding to take it. Therefore I encourage you not to make travel plans that will conflict with your final exam schedule.

Unlike the others, the final will be an in-class exam. Talking with other students during the exam will not be permitted. You may ask me questions. The exam will be closed-book and closed-computer, but you will be allowed to use one double-sided, 8.5x11 sheet of hand-written notes.


Work is due at the time and date specified in the assignment. Each calendar day your work is late will reduce your grade by one letter grade (exams excluded). Work must still be submitted by the due date if you have arranged a prior excused absence.

Because I am concerned about your health and well being, I may also accept late work (exams excluded) if

  1. you start the assignment at least three days in advance of the due date;
  2. you expend a reasonable amount of effort to complete the assignment by the deadline;
  3. you send me an e-mail attesting to facts 1 and 2 with whatever work you’d completed when the assignment is due;
  4. you go to sleep by midnight after sending that e-mail; and
  5. you make an appointment to talk with me immediately about any problems you had on the assignment.

Deadlines for assignments involving programming will automatically be extended by at least one class period if MathLAN is down for an unscheduled period of three or more hours during the two days preceding the assignment due date.

Absolute deadline: All work must be submitted by 5:00pm on Friday, May 12. This is college policy and cannot be waived for any reason.

Academic Honesty

As students, you are members of the academic community. Both the College and I expect the highest standards of academic honesty, as explained in the Grinnell College Student Handbook.

Among other things, this means clearly distinguishing between work that is your own, and work that should be attributed to others. This includes ideas, examples, and code that you draw from labs and readings.

It is expected that the collaboration policies given in this syllabus and on particular assignments will be followed. In particular:

  • When you explicitly work as part of a group or team, you need not identify the work of each individual (unless I specify otherwise).
  • You may discuss concepts (algorithms, ideas, approaches, etc.) described in the readings, lab exercises, or during class with anyone.
  • You may only discuss homework assignments (algorithms, solutions, write-ups, code, debugging, etc.) with your group members, computer science tutors, CSC 151 mentors, or the CSC 151 instructors.
  • All the work submitted (code, experimental data, write-ups, etc.) must be your own or that of your group. Code or documentation provided by the instructor must be attributed, including code that you copy and subsequently modify. No other code or written work (from any source) may be shared with others or copied for your own use.
  • All non-syntax consultations (i.e., ideas about algorithms) from any source, including the readings, labs, provided code, and internal or external language references, require formal citation within the related program or write-up.
  • Any conceptual contributions by individuals not in your group must be acknowledged and attributed in your report. That is you must give specific attribution for any assistance you receive. (This includes from tutors or mentors.) The suggested acknowledgment format is: “[Person X] helped me to do [thing Y] by [explaining Z].”
  • Any program results or output must be faithfully recorded, not forged. (A thoughtful explanation of unexpected behavior can often be a worthwhile submission and is much better than the alternative.)
  • You are responsible for safeguarding your work from being copied by others. This requires you to take reasonable precautions with hard copy printouts as well as file system permissions. (Note that MathLAN’s default permissions prevent others from viewing your files.)

As an instructor, I will meet my obligation to bring any work suspected to be in violation of the College’s Academic Honesty Policy to the attention of the Committee on Academic Standing, after which there is no recourse with me.

Getting Help

The Computer Science Department makes tutors for CSC 151 available for help in the open laboratory, SCI 3815. Class mentors hold weekly mentor sessions, which will be announced in class. Peer tutors may also be available for regular, more intensive one-on-one tutoring. As the course gets underway, please let me know if you are interested in regular weekly individual tutoring. I may also recommend individual tutoring.

Of course, you can also get help from me. Please come by during my office hours to discuss the course content, get any extra assistance, or just talk about how the course is going. Note that if multiple students have similar questions or issues, we may work together as a group.

If you cannot attend a scheduled office hour, you may also email me to schedule an appointment; please include two or three possible meeting times so that I can find one that works for both of us.

I enjoy getting to know my students, but I prefer to reserve office hours for academic matters. If you would like to have a more informal conversation, I would be delighted to accept an invitation to eat lunch with you at the Marketplace or a bag lunch in the CS Commons.

Email is also a reliable way to contact me, but please allow 24 hours for a response during the week, or 48 hours if you send an email over the weekend.