Object-Oriented Problem Solving, Data Structures, and Algorithms


Priscilla Jiménez Pazmino

Meeting Times
  • Sec 01 M/W/F 10:00 –11:20 CT - Classroom Science 3820
  • Sec 02 MWF 14:00 –15:50 CT - Classroom Science 3815
Office Hours
Class Mentor
  • Sec 01 Will Green
  • Sec 02 Peng, Yuxin (Kevin)
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, or even C++ or Java). 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 11+ 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, and Trees.

  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 will be in digital format and available from the schedule.

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 questions from students, based on the reading. Following this initial discussion, the course may involve a short lecture or an ungraded quiz on the reading. After these preliminaries, students will work collaboratively, in pairs, on a lab exercise based on the reading.
  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 found in the readings. 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 = 166)
  • 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 up to 48 hours late.
  • Use 1 token to turn in any assignment up to 48 hours late.
  • Use 1 token to miss class without reasonable notification.

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.

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
90 - 100         A
80 - 89         B
70 - 79         C
60 - 69         D
0 - 59         F

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. I know that sometimes “things happen.” Therefore you will be granted one unexcused absence from class without penalty. However, 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 (email is appropriate) 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.

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.

Pandemic issues

The normal instructional structure of this course requires that you be present, physically and mentally, each day. I hope you don’t get sick but I will consider adjustments for those who test positive for covid and are required quarantine if that is the case.

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, located on the ground level floor of Steiner Hall (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.

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.

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 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 or lab write-up 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)
  • 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.”