Skip to main content



Welcome to CSC 207, Object-Oriented Problem Solving, Data Structures, and Algorithms! The official course description is as follows.

An introduction to the ideas and practices of object-oriented computation: message passing, information hiding, classes and interfaces, inheritance, polymorphism, and reflection. The course also includes data structures and the associated algorithms, packages and libraries, exceptions, and the use of an integrated software-development environment. Includes formal laboratory work.

My take on this course is that it is where you really start delving deeply into what it means to be a computer scientist, computer programmer, or software designer. We will continue your exploration of the design of algorithms, data types, and programs, but will delve more deeply into tools and analysis techniques related to each. We will use Java as our programming language because it supports some tools and techniques you have not learned previously, particularly through its support of the object-oriented paradigm. As in all Grinnell classes, we will also work on general skills, from group work to “thinking on your feet”.


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 Services. Disability Services 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.

Elsewhere on this site, you can find additional notes on accommodations and my commitment to making materials accessible.

Basic needs security

Any student who has difficulty affording groceries or accessing sufficient food to eat every day, or who lacks a safe and stable place to live, and believes this may affect their performance in the course, is urged to contact the Dean of Students or the CRSSJ for support. You may also notify me, if you feel comfortable doing so, and I will do my best to help you identify and arrange other resources.

Textbooks / References

There is no required printed textbook for this course, as the material has been written by Grinnell faculty and is posted on this website. There are two primary sources for the readings.

Rebelsky, Samuel A. (2019). CSC 207 2019S.

The various readings I’ve prepared for this class. Most of these are based on readings I’ve written for previous sections of CSC 207. At one time, I called those The Tao of Java. (Types, Algorithms, Objects)

Osera, Peter Michael (2019). _Class notes on Algorithms and Object-Oriented Programming

A draft of a textbook that PM is writing for the course.

There are also some useful textbooks and references you may want to bookmark or keep handy.


Weiss, Mark Allen (2010). Data Structures and Problem Solving Using Java, Fourth Edition. Pearson. ISBN: 978-0-321-54140-6.

The book that some other faculty in the department sometimes use for the course. A few copies should be available in the bookstore.


Oracle (2019). Java 11 API: Module java.base

The primary reference pages for the standard Java classes. PM notes that “[T]he Java standard library documentation is the best organized API document out there, and is a large reason why Java is so popular.”

Oracle (2016). The Java Tutorials

The Java Tutorials were once the go-to guides for learning new concepts in Java. Unfortunately, Oracle has not updated them since Java 8. Nonetheless, they still provide a wealth of useful information. (2018). Java Development User Guide

What it says. A guide to Java development in Eclipse.

Google (n.d.). Google Java Style Guide

The style guide you should use for your code in this course.


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

Since the quizzes ended up being more challenging than you or I anticipated, there is also an alternate grading system in effect. In place of your quiz grade, I will use the highest of (a) your quiz grade, (b) your average exam grade, or (c) your final grade.

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 a score of exactly 90% could earn either a B+ or an A-. In this unlikely scenario, I will always choose the higher of the two grades. 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 participate actively in every class.

Because your participation is so important, I will not grant excused absences except in particular and exceptional circumstances. I will deduct 2% from your final grade for each absence and 1% for each time you are late to class. These deductions are doubled if you do not send me a short note on or before the day of the absence or late attendance (e.g., “I will be unable to make it to class today” or “I apologize for missing class today” or “Another instructor has asked that I meet with them immediately after their class; I expect that I’ll be about ten minutes late to yours.”) I allot each student a 4% “penalty buffer”, which allows up to two absences (with notes) or four late arrivals (with notes) with no impact on your final grade. This policy is intended to give you the flexibility to deal with or personal or other issues (including job interviews) that require you to miss class.

I realize that there are a number of reasonable and expected absences. These include athletic events, academic conferences, course trips, and religious observations. Such absences do not count as unexecused absences provided you notify me of them at least one week in advance. I would prefer you meet with me early in the semester to discuss these instances.

I understand that some disabilities may require you to miss class. Ideally, these requirements are documented in your accommodations form. But I will do my best to make adjustments and accommodations in all cases.

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 disability or 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. I would prefer that you reset and get better. Please seek medical care as needed. Student Health and Counseling Services (SHACS) offers health and mental health services to students. I excuse illness provided you notify me the day of class, preferably in advance of class. I do not require a note from SHACS or your doctor. Note, however, if you are ill more than a few times, I may discuss the issue with student affairs and may stop excusing illness-based absences.


Because much of our work in this course involves collaboration and discussion, I will also evaluate you on your class 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 before class on the next day of class. In particular, a lab completed on Monday is due before class on Wednesday a lab completed on Wednesday is due before class on Friday, and a lab completed in class on Friday is due before class 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 class time the day it is due. If your writeup is not received by class time, it will be considered late.

The subject of the email should be of the form [CSC 207.01] Lab: Lab Title (Names). For example, the class instructor might title a lab writeup on lists as [CSC 207.01] Lab: Lists (Rebelsky). Parties to receive credit (i.e., you and your partner’s name(s) if submitting jointly) should also be on the first line of the e-mail.


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 Thursday night at 10:30pm, except when there is a project or exam due. The homework is intended to help 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 4–5 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 assignments 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.


Each Monday, there will be a ten-minute written quiz covering a few 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 13 quizzes; I will drop your lowest quiz grade. 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.

Quizzes are considered timed assignments, so if you have an accommodation letter that grants you additional time that is available to you on quiz days. You should meet with me during the first full week of class so we can determine the best way for you to complete the quiz.

Extra credit

To encourage you to support your peers, pursue wellness, and be an active member of the Grinnell community, I will award extra credit points for attending certain events or participating in certain activities. You can earn extra credit for up to eight activities, with no more than four in any broad category (peer support, wellness, academic/artistic), each worth an additional 0.25% on your final grade.


As opportunities for you to demonstrate your programming and design prowess, there will be three take-home exams. 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: March 14, 2019
  • Exam 2: May 2, 2019

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

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. This includes other faculty, class mentors, CS tutors, and any other student, including students who are not currently in this course. You should not give any information about your progress on the exam (e.g., which problems you have completed or which you found difficult), nor should you ask others about their progress. If you have any doubt about what is and is not permissible, ask the instructor.

I will not accept late exams except in special circumstances. If you believe you need to submit an exam late, you must contact me at least 72 hours before the deadline or I will not grant an extension.

Final exam

The final exam for this class is mandatory. Therefore I encourage you not to make travel plans that will conflict with your final exam schedule. (It appears that our final is on the last day of finals week; we will discuss possible options for those who must take it earlier.)

Unlike the other exams, 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, 17 May 2019. This is College policy and cannot be waived for any reason.

Academic honesty

These are abbreviated/shared notes on academic honesty. You should also read my longer notes on academic honesty and the Computer Science Department’s academic honesty policy.

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.

I expect that you will follow the collaboration policies in this syllabus and on each assignment. 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).
  • In most cases, you may discuss concepts (algorithms, ideas, approaches, etc.) described in the readings, lab exercises, or during class with anyone.
  • While take-home exams are in progress, you may only discuss class concepts with your instructor, class mentors, and individual tutors.
  • All the work you submit (code, experimental data, write-ups, etc.) must be your own or that of your group. You must appropriately cite any code or documentation you copy or modify, including code provided by the instructor.
  • You must cite all non-syntax consultations (i.e., ideas about algorithms, help with debugging) from any source, including the readings, labs, provided code, and internal or external language references.
  • If you refer to another document when answering a question, cite that document. This principle holds whethery ou’re using the readings, your answers to a previous assignment of lab, a resource you’ve found on the Web, or, well, anything.
  • You must acknowledge and attribute any conceptual contributions by individuals not in your group. 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 I no longer have authority over the matter.

Getting help

You may, as always, ask evening tutors for help. However, evening tutors are intended primarily for CSC 151 and CSC 161, and students in those classes receive first priority. Because knowledge of CSC 207 material is not a requirement for the evening tutor positions, not all evening tutors will know the material.

Our class mentors will hold weekly mentor sessions, which will be announced in class. Individual 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 or small-group tutoring. In some cases, I may recommend individual tutoring even if you do not request it.

In most cases (exams and quizzes are notable exceptions), I am comfortable with you getting help from any other Grinnell student. Note, however, that you must cite any help you get.

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 my scheduled office hours, you may also email me to schedule an appointment; please include multiple possible meeting times (at least two or three) 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, a bag lunch in the CS Commons, or even to take a walk together and chat.

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.

Additional information

Configuring your MathLAN account

Make sure to add the following line to the end of your .bashrc.

export PATH=/usr/lib/jvm/jdk-11.0.1/bin:$PATH

Working outside of MathLAN

While I require that you do your in-class work on MathLAN, you should feel free to work on your own computer outside of class. Because you will be using GitHub to share your work, you should find it comparatively easy to synchronize your work between machines.

We are using the following software.

I do not provide guidance for installing any of this software on your personal machine. If you want to work on your own machine, you should be able to figure out how to install the software.

Formatting your code

I expect you to follow the guidelines in the Google Java Style Guide for any code you write in this class. Failing to follow those guidelines will likely result in a loss of redit.