Algorithms and OOD (CSC 207 2014S) : Home

Front Door


Welcome to the Spring 2014 session of Grinnell College's CSC 207, Algorithms and Object-Oriented Problem Solving, which is described relatively briefly in the official blurb. My own take on this course is that this is the course 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 the tools and analysis 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'll also be working on general skills, from group work to thinking on your feet.

You have the fortune (or misfortune) to be in an experimental new version of CSC 207. This semester, we will be exploring some aspects of Computing for Social Good (CSG), using techniques from the Free and Open Source (FOSS) community, as well as the open-source application Ushahidi. We will also be mixing in some Android development. In the end, I think working with the FOSS tools, Ushahidi, and Android will build many skills you will find valuable, particularly if you continue in a career in software development, but also in other domains.

Note: We had some flaws with the materials the first semester we used them. I'm hoping to see some improvement this semester. (The students from the first semester encouraged us to keep trying this approach.)

I assume that you have mastered much of the material from CSC 151 and CSC 161. Among other things, you should understand recursion, the need for documentation, linked lists, higher-order programming, and some basic algorithms for sorting and searching.

In an attempt to provide up-to-date information, and to spare a few trees, I am making this as much of a “paperless” course as I can. Hence, materials will be in a course web. If you are puzzled by the organization of the Course Web, browse a bit and then ask me. If you find that you want paper copies of pages, please read the notes on printing copies. If you find that you are regularly printing pages, let me know and I can provide them for you.

Important Warnings

Warning! Computers are sentient, stupid, and malicious. When things go wrong, don't blame yourself. Ask me, a tutor, or the class mentor for help.

Warning! We are using some cutting-edge software, which means that things will occasionally crash for no good reason.


Meets: MTWF 10:00-10:50, Science 3813. Optional review sessions with SamR, Thursdays, 10:00-10:50, Science 3813.

Instructor: Samuel A. Rebelsky, , Science 3824. 269-4410 (office). 236-7445 (home). Office hours: MTWTF, 11:00-11:45. I also tend to follow an open door policy: Feel free to stop by when my door is open or to make an appointment for another time.

Class Mentor: Earnest Wheeler . Office hours TBD.

Grading (subject to change):

  • Class participation: 5%;
  • Homework (some individual, some group): 15%;
  • Lab writeups: 10%;
  • Project: 10%;
  • Three take-home examinations: 45%;
  • Required final examination: 15% (2pm, Tuesday, 13 May 2014; alternate time 2pm, Thursday, 15 May 2014).

More information on grading can be found in the grading policies page.

Labs: Like many courses in our department, computer science 207 is taught in a collaborative workshop style. Each day, you'll work on laboratory problems with other students in the class. On most days, you will need to submit a short laboratory writeup. We may also start or end each class session with a short lecture/discussion or a clicker activity.

Extra Credit: I will often offer one unit of extra credit for attending a specified academic event (e.g., a computer science talk or College convocation) or for supporting your classmates in their public endeavors (e.g., attending a concert, dance recital, or sporting event). Each category is capped at four units of extra credit, which count as one point toward your final grade. So, if you attend four academic events and four peer support events, you will receive an additional two points toward your final grade. For any activity you wish to credit this way, you must send me a short (one paragraph) note about the activity within two days of the activity.

Tutoring: Evening tutors are not required to know 207 materials. Some will be able to help you. Many will not. I recommend that you rely on your me, on your class mentor, and on each other.

Class Software: For this course, we will be using a wide variety of plain off-the-shelf software (POTS) as well as some locally developed software. Tools you will use include Git (and GitHub), Eclipse, JUnit, Ushahidi, and the Android SDK. Locally developed software includes a simplified API for Ushahidi and a few frameworks for Android applications.

Printing Pages: Most of the pages in the course web are designed for viewing onscreen. If you'd like to print them, you may want to use PDF versions, which are designed for paper. To find the PDF version, simply replace the html at the end of the URL with pdf. If you do decide to print, you should consider printing the document double-sided and two-up (that is, two pages side-by-side on one physical page) so as to conserve paper. When I distribute documents, I will do my best to distribute them in this form.

The Experimental Course Theme: Computing for Social Good with Ushahidi and Android

Computer science is the study of problem solving. So, as we study CS, we can choose particular domains for solving problems. As you know, in CSC 151 we use image making as our problem domain and in CSC 161 we use robotics as our problem domain. For this course, we will explore some basic issues of computing for social good and Android app development (yes, they are related) as our problem domain. Many, but not all, of our activities will emphasize these issues.

The Role of Ushahidi

As mentioned above, we will be using the open-source crowdmapping platform Ushahidi in this course. Ushahidi was originally developed to provide a venue for people to report election violence in Kenya. It permits anyone to provide geographic reports of incidents, using either relatively low tech approaches (SMS, Twitter) to relatively high tech (smart phone or Web apps) and supports both anonymous reporting and independent verification of incidents.

Ushahidi will serve two primary roles in the course. For most of the semester, Ushahidi will serve as the primary data source for our work in designing and implementing algorithms, abstract data types, and data structures. After fall break, you will also employ Ushahidi in a small consulting project that you will do in a group with a community partner. Further details on that project will come right before fall break.

The Role of Android

The focus of this course is not Android development. However, I think that you will understand some of our work differently if you work with it in the context of building simple Android applications. Hence, we will spend about a week of the course exploring basic aspects of Android development, and we will use a simple Android application to ground many of the homework assignments for the semester.

Optional Books and Other Readings

Eckel, Bruce (2002). Thinking in Java (3rd Edition).

A nice book about thinking like an object-oriented programmer. The 3rd edition is a bit out of date (as is the 4th edition), but it's still a nice resource, particularly since it's free on the Web.

Rebelsky, Samuel (2014). The CS207.01 2014S Course Web.

The hypertext that you are currently reading. Many of these materials (particularly those under Readings and Labs are required. You should make it a point to load the page of the day at the beginning of each class to check announcements and such.

Weiss, Mark Alan. Data Structures & Problem Solving Using Java, 4th Edition.

Some people learn better from textbooks than from my less polished readings. This is a nice textbook. I will add information on readings from Weiss to the syllabus soon.

Copyright (c) 2013-14 Samuel A. Rebelsky.

Creative Commons License

This work is licensed under a Creative Commons Attribution 3.0 Unported License. To view a copy of this license, visit or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.