An Overview of Recourse

This brief document answers the question "What is Recourse?," describing its goals, components, and implementation.

Definition

Recourse is a methodology for implementing a four-year undergraduate computer science curriculum based on open-source principles, values, ethics, and tools. It provides a general framework consisting of a curriculum progression and set of open-source inspired teaching methods.

Goals and Objectives

A Recourse curriculum strives to provide a superior educational experience giving the student both (1) engineering and people skills demanded by industry, and (2) sufficient fluency with computer science fundamentals to enable new research.

Curriculum

The Recourse curriculum progression models one's rise through the ranks of open-source participation as follows:

  • Year One focuses on the study, testing, and fixing of pre-existing code --- corresponding to the initial phases of participation by a developer in an open source community.
  • Year Two focuses on coding specific functions from scratch, accompanied by unit tests. This activity corresponds to a programmer's implementing new but well-bounded functionality, with unit tests to validate work and identify regressions.
  • Year Three introduces term-length, focused projects. An open source software developer finds an analogous milestone in the form of his or her first open source projects.
  • Year Four expects students to demonstrate computer science proficiency through capstone projects. These projects correspond to an open source developer's growth into a full-fledged initiator of formidable software projects.

At the end of the four phases of this overall curriculum "arc," the student should have acquired the expected knowledge and skills of a computer science bachelor's degree not only through existing conventional texts, lectures, and exercises, but also in the context of collaborative programming, shared code, and overall accountability for one's and others' work.

Teaching Methods

A Recourse curriculum uses an extensible set of teaching methods, including (at a minimum) the following four:

Sample Code Bazaar
Creates and maintains live, organized, searchable, student-accessible sample code libraries for courses.
Test Infection
a.k.a. "cross-testing," adapts the workflow of current test-driven development approaches to classroom assignments.
Cyclic Life of Code
Places code in a "feedback loop" --- all student work becomes part of a repository that can then be used for future work by other students.
Release Early, Often, & Open
Models long-term student projects in the same way that open source projects operate: early, frequent, and unrestricted dialog among students and instructors, allowing sharing of common functionality and encouraging proper structure for effective software reuse.

Implementation

A Recourse curriculum does not conflict with any established curriculum such as ACM Curriculum 2001, since the Recourse framework does not define particular classes or knowledge units. The methodology simply requires, at a minimum, that:

  • Students submit homework as versioned releases of projects in a centralized repository
  • Students work on a large number of collaborative assignments
  • Instructors use some class time to access the repository and demonstrate, discuss, and correct student work
  • Students produce documentation, news, bug reports, build and test scripts, and release notes with submissions.
  • Students build capstone projects entirely from scratch in their final year

These elements require a degree of automation if they are to be applied efficiently in the classroom. A Web application called Mari is available for implementing a Recourse-ready repository of course assignments and submissions. The application supports plugins for pre- and post-processing of submissions with instructor-defined rules if desired. Students submissions can be tagged as viewable only to certain users, to support assignments given to a whole class where collaboration (cheating) is prohibited. Submissions can also be marked completely public; thus Mari can serve as an open-source distribution point for student projects.