Enabling people to work together across time and space is one of the great promises of networked computing. Within the context of university education, we have been developing and using systems that enable students and faculty to work together from around the campus and the surrounding community. These tools are aimed providing a group of people with a forum for sharing information, and at promoting discussion within the group.
CoNote is a computer supported cooperative work system designed to facilitate communication within a group via the use of shared annotations on a set of documents [Davis and Huttenlocher, 1995]. The central idea underlying CoNote is that shared annotations provide an effective forum for groups whose work involves frequent reference to some set of documents, such as the teachers and students in a course. In our experience, the shared annotations model provides a better forum than is provided by other electronic media such as news groups or bulletin boards. The key difference is that the documents being annotated provide a context for the group discussions. This context enables people to find relevant discussions more easily. The shared annotations model also provides a more structured forum than tools for shared authoring, because the documents play the role of a (relatively) fixed context for discussions.
Unlike paper annotations, the annotations in CoNote can only be placed at specific points. Thus part of putting a document into the CoNote system involves choosing points where discussion is invited. These annotation points can either be chosen by the author of the document, or by someone who is making a document available for comment. CoNote allows annotation of any document on the Web (i.e., any arbitrary URL). When a document is viewed in the CoNote system, links to the annotations are shown embedded in the document, at the point that they were made. The annotations at a given point are indented, according to the conversational structure, making it easy to see what annotations are present, as well as to follow threads of conversation. In addition to accessing annotations when reading or browsing documents, it is often useful to be able to search for annotation information according to attributes such as when the annotation was posted, what document it was posted on, who the authors were, etc. Of particular interest to students is the ability to find new annotations (e.g., those posted since some particular time).
CoNote has been in use since the fall of 1994. It has been the primary delivery vehicle for lecture notes and problem sets in several computing courses at Cornell (for close to a thousand students), and has also been used at a number of other sites. Based on experience using CoNote for two years, we have just completed a new version which will be deployed more broadly on the Cornell campus and made available to other institutions. The original version of CoNote was a joint project between Jim Davis at the Xerox DRI, and Dan Huttenlocher in the Cornell Computer Science Department. The new version is a joint effort between Huttenlocher and Andras Ferencz.
The architecture of CoNote is as a caching Web proxy server. Original documents, either on the file system of the server or at arbitrary URLs on the Web, are processed in order to insert the annotation hyperlinks into the document. This processed document is then cached for fast delivery to a requesting client. Whenver a new annotation is posted to a given document the cache is invalidated. Currently this proxy server is implemented as a standalone HTTP server in Python. We will be porting it to the Jigsaw Java-based Web server, which is designed to be an easily extensible caching HTTP server.
In order to illustrate the annotation system, here is one question from a problem set (with the original version of CoNote). These annotations are taken from postings in a class (with the names of the people who posted them omitted). When reading annotations, the "up" arrow goes back to the document, and the "left" and "right" arrows move forward and backward in the annotation tree.
We have found that CoNote greatly changes the educational experience of our students. Many students become avid users of the system, often answering questions from other students and comparing notes with each other when they are stuck on a problem. When we simply provided course materials on a standard Web server and used a newsgroup for course discussions, we did not observe such behavior. The added context provided by embedding discussions in the course materials has made a qualitative difference in the number and kind of discussions that arise. Our initial hypothesis was that putting annotations in context would make it easier for students to find answers to their questions. We had no idea of the extent to which it would help foster discussions and thus build a sense of community among the students in a course.
CoNote can also be helpful for the less self-confident students in a course. In written evaluations at the end of the semester, a number of students have reported that the CoNote system kept them from dropping a course because they could see that other students were at least as confused as they were. In contrast, the questions that get asked in the classroom are often from the better students, leaving those with lower self-confidence feeling that they cannot keep up. What is different about CoNote is that students are asking questions in the context of trying to understand the material in order to complete a homework assignment. In this context, they are willing to (in fact almost need to) ask ``dumb looking'' questions. This level of honesty in the questions is important in fostering a sense of community as well.
There is additional information on the original version of CoNote, including more on design and implementation issues.
We have also been developing remote collaboration tools which allow students to work together on programming projects from any Internet-connected computer. The widespread use of Java-capable Web browsers (from both Netscape and Microsoft) has created a new opportunity to provide universally available collaboration environments. While Java-capable browsers were initially intended to enable small programs to be be embedded in Web documents, they also provide a universal platform for larger applications, such as collaboration tools.
We have created a shared, portable programming environment for the Dylan language, which we are using in one of our introductory programming courses (CS212). This Dylan environment is portable because it is a Java applet that can be run from anywhere on the Internet. The applet communicates with a central server on which students store their work. This central store together with the universal availablility of the environment enables students to start working in one place, save their partially completed work, and continue later from another place. For example a student can start working on a Mac PowerPC in a public computing lab and continue working on a Windows95 machine in their dorm room. The system also allows students to work together, by providing shared work spaces on the server. This permits students to work jointly, either at the same time or at different times, and from the same location or from different locations. The Dylan environment was developed by Justin Voskuhl, and the server by Andras Ferencz.