Object-Oriented Problem Solving, Data Structures, and Algorithms


Priscilla Jiménez Pazmino

Meeting Times
  • M/W/F 1:00 –2:20 CT - Classroom Science 3815
Office Hours
  • Book an appointment using this link -> https://calendly.com/jimenezp-at-grinnell/office-hours
  • It is possible to schedule other times by requesting an appointment by email. Please include a few options for the appointment in the email body and the course code in the email subject. Make sure you first check my availability in the outlook calendar.
Class Mentor
  • Elizabeth Zimmerman (Mentor session, Sundays 7:30 - 8:30 pm)
Mentor Sessions
  • TBA
CS Tutors
  • Su-Th, 7:00–10:00 p.m. CT
  • Su 3:00–5:00 p.m. CT

About this course

Welcome to CSC-207, Grinnell College’s computer science course. This is the third course in our introductory sequence of programming paradigms. In this course, we will introduce you to the object-oriented computational model. While we will be using Java as our programming language for this course, the skills and concepts we learn in this class are applicable to other languages.

Note: 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.


You have already studied the functional and machine-oriented imperative models of computation. In this course we will learn about the object-oriented model. This abstraction facilitates a certain way of thinking that can help us solve many computational problems in a manner similar to the way we solve problems in our everyday lives. It scales well and will facilitate our study of an important area of computer science: the organization, representation, and access of information. Thus, we will learn about some common ways of organizing data and the algorithms that allow efficient access to it. Such data structures are integral to many computational artifacts, from your computer’s operating system to genome sequencing, to GoogleTM-scale Internet-wide indexing.

Our major objectives for this course include fluency in object-oriented fundamentals, learning about object design patterns, sharpening algorithmic analysis skills, practicing good software development with unit testing, understanding how data organization affects access efficiency. Like the prior introductory programming classes, this is a lab course. The lecture and discussion will take about 20 minutes per class session, and the remaining time will be devoted to hands-on learning through conducting labs with a partner. Attendance is therefore required for every class period. See the “Class Attendance” and “Accommodations” sections for more details.

Why take CSC-207?

Understanding how to do efficient computation with the right data structures is a fundamental job of any computer scientist. In addition, object-oriented techniques have become a prevalent, widely used method of design and development. An understanding of these tools will take you to the next level of maturity in computer science.

What do I need to know?

This course assumes you have experience with a (moderately) typed imperative/procedural programming language (e.g., C), unix basics and file editing with tools like emacs, vi, or similar. You should also be familiar with some basic computational ideas like encapsulation and code re-use with procedures and recursion.

Course Outcomes

Universal Learning Outcomes

  1. Create correct multi-file programs in Java 17+ to meet requirements specification.

  2. Collaborate with one or more other students in creation of programs and completion of labs.

  3. Apply object-oriented design principles to the creation of Java programs: Abstraction, Encapsulation, Inheritance and Composition, and Polymorphism —ad hoc, parametric (a.k.a. generics) and subtyping.

  4. Use and build core abstract data types to design solutions to programming tasks: Arrays, Lists, Maps and Sets, Stacks and Queues, Hash Tables, Heaps, Trees, and Graphs.

  5. Use and implement core algorithms to design solutions to programming tasks: Sorting, Searching, Iteration, and Traversal.

  6. Analyze run-time complexity of algorithms.

  7. Create effective unit tests of Java programs using tools such as JUnit.

  8. Use Java’s Exception libraries to detect and handle run-time errors.

  9. Use version control software program, such as Git, to maintain multiple versions of software under development.

  10. Exercise good practices in code documentation and create documentation for Java programs using Javadoc.

Other skills (Instructor-specific)

  1. Debugging and Evaluation.- Experience code from a different perspective by testing, reviewing, and refining their code.

  2. Communication.- Demonstrate effective use of written and verbal communication by creating reports (Labs write-ups) with other peers by discussing and consensus on acquired knowledge.

  3. Independence and Curiosity.- Habitualize learning programming languages within the scope of individual assignments through self-driven, hands-on exploration and problem-solving practices.


Required textbook:

  • Reges, Stuart, and Marty Stepp. Building Java Programs. (5th Edition). Pearson, 2019.

Some readings are selected from the following resources.

Other good books/documentation:

Activities, Evaluation and Grading

This course follows a lab-based format. Thus, work related to [almost] all class sessions proceed in three stages:

  1. Read Before Class: Reading assignments will incorporate both assigned readings from the textbook and online readings (links found on the schedule page). Textbook readings are assigned on most days, and those assignments can be found noted on the schedule. Students are expected to complete assigned readings prior to each class session. Each student should prepare a list of questions or topics for class discussion, should questions arise on the reading.
  2. Ask Questions and Work on Lab during Class: Each class will begin with an initial discussion of the readings, it may involve a short lecture or an ungraded oral quiz on the reading. After these preliminaries, students will work collaboratively, in pairs, on a lab exercise based on the reading. On quiz days (Wednesdays), we will start with a 15-minutes paper-based quiz. (Note: Students with approved accommodations for extra time on quizzes/exams are responsible for reserving the testing room by contacting Stacy Turley prior to the quiz/exam.)
  3. Finish Lab for Homework: Although the in-class labs will help students get started on the lab exercises, students might not be able to complete the lab during the class period. Any lab work not completed during class should plan be finished as part of homework. I will assign lab partners that will generally change weekly. Note: not all lab sections will be turned in for credit; however, you can expect the graded quizzes and tests will include questions or coding problems taken from either the reading or the labs.


  • Quizzes: quick assessments of the concepts introduced in the readings or lectures. Weekly @ 5 points each. (Total = 60 points)
  • Lab exercises write-ups: practice problems worked on during class, frequently collaboratively, with a partner. Weekly @ 12 points each. (Total = 153)
  • Assignments: individually completed, small-scale programming projects that apply the concepts to the themes of the course. 6 assignments for this semester, @ 25 points each. (Total = 150)
  • Exams: individually completed, problems that directly assess your mastery of the course material. 2 exams @ 100 points each. (Total = 200)


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 lab writeup or assignment up to 48 hours late.
  • Use 1 token for every two missed classes without timely notification (see class attendance section).

If you plan to use a token you should let me know in advance so I can update the extension/deadlines in the platform. You may not re-do lab writeups or assignments.

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–3 tokens will drop your grade by 1/3 letter, i.e., from a B+ to a B.
  • Overspending of 4–6 tokens will drop your grade by 2/3 letter, i.e., from a B+ to a B-.
  • Overspending of 7–9 tokens will drop your grade by 1 letter, i.e., from a B+ to a C+.
  • …and so forth for every 3 overspent tokens.

Communication is key.

Scores and Letter grades

In the interest of simplifying grading and keeping students up to date on their progress, all points are equally weighted. This means that you can easily calculate your current grade by summing your scores and dividing that sum by the total points possible so far. Then the letter grades are assigned by the following schema:

Percentage         Letter Grade     Definition
90 - 100         A     Excellent
80 - 89         B     Good
70 - 79         C     Satisfactory
60 - 69         D     Passing
0 - 59         F     Failing

and the modifiers (+ and −) are based on the last digit of the score, as follows: [+] for 8-9, [None] for 4 - 7, and [-] for 0 - 3. D or F however, is not modified. And given the Grinnell College grading scheme, there is no A+ or C- either.

Course Policies

Time and workload

Grinnell has indicated that a 4-credit course, like this one, should involve approximately 180 hours of work, which matches some guidance from the U.S. government. Across a 14-week term (plus a week finals), that ends up being approximately 12 hours of work per week.

Class attendance

Class meetings will involve a mix of discussions, lectures, and lab activities. In short: You are expected to attend and actively participate in class. This is a collaborative discussion and lab-based course, so your presence is integral to your learning. If you think you might have to miss class or be late, I would appreciate a written explanation (via our group in Teams or email) at least a week in advance so that we can make arrangements to keep your progress on track. It is very important for you to attend class because you will often work collaboratively on the labs with another classmate. In addition, our discussions during class benefit from your contributions. If you do miss a class, you must first talk to a classmate about any material that you may have missed. After that, you may follow up with me about any further questions or concerns.


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.

  • Reasonable delays, I do my best to respond to messages within twenty-four hours (excluding weekends and holidays). If I do not do so, you should feel free to send me a reminder.

Communication is key.

Religious observance policy

I try to 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 community. We should behave as such. Among other things, that means treating others with respect, not only in the language that we use, 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 Student Disability Resources, Jae Baldree, located on the 1st floor of Steiner Hall (x3089) and discuss your needs. 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.

Students with approved accommodations for extra time on quizzes/exams are responsible for reserving the testing room by contacting Stacy Turley prior to the quiz/exam.

Communication is key.

Software, 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.

Help, academic honesty and academic integrity

Computer Science Department has a great support system (please use it) and a carefully designed pedagogical methodology design for you to succeed.

Feeling confused or overwhelmed

We know this can be a very challenging course since it asks you to think in yet another way about problems that can be solved with computers. It will also cover quite a few topics and move quickly. So, I encourage you to reach out with questions as soon as they arise and seek help from one or more of the following sources:

  • Your instructor. Please ask questions during class and lab time, also feel free to schedule a meeting either during office hours or, if those don’t work, by sending me a message with available times.
  • Your course mentor. They will be available during lab time during each class meeting and will also hold informal meetings at least once per week (called “mentor sessions”). Mentor sessions may include practice exercises and quiz or test preparation opportunities. 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!
  • Evening tutors. Most evenings (Sunday through Thursday), tutors hold informal drop-in sessions in the labs on Noyce’s third floor. Generally, these students have excelled in our three-course introductory sequence and can help you in trouble-shooting lab and assignment code or working with MathLAN’s resources.

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.

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

Academic Honesty

All work in this course is governed by the rules of the college regarding academic honesty. In summary, standard practice requires that you must acknowledge all ideas from others.

When you work in a lab write-up, the names of all students in the group should be added in the lab day. Turning in work with multiple people listed as authors implies that all members of the group agree with what is presented. If a group member does not agree with some part of the work, the group should continue to discuss and revise the material until agreement is achieved. In summary, a group activity is a joint effort, and all group members have equal responsibility for the finished product.

Every programming assignment, lab write-up, and code that you submit must include:

  • Name(s) of all authors
  • Assignment name
  • Assignment due date
  • Written/online sources used: (enter “none” if no sources other than the textbook and course website used)
  • Help obtained: (enter “none” if no help was given outside of the class period. But if you consult the instructor, an evening tutor, another student, or the course mentor during mentor sessions, add their names here) For all individual assignments
  • Add the statement: “I/we confirm that the above list of sources is complete AND that I/we have not talked to anyone else (e.g., CSC 207 students) about the solution to this problem.”

About lab-write up. Suppose you submit your work individually because your lab partner only collaborated in some sections involved in the lab. In that case, you must state, using comments, the lab sections/parts that were worked in collaboration.

In addition, you are not allowed to search the Internet for solutions/code on assignments/labs you submit as your work. Remember, you are developing your coding and problem-solving skills.