Building a Digital Library

CS341BD - Mount Holyoke College, Spring 2017

Course Information

InstructorJohn Foley
  • MW 1:15-2:30 - Mostly Lecture
  • F 1:15-2:05 - Mostly group work time, some optional workshops
LocationClapp 401
PrerequsitesCOMSC-211 Data Structures
Office HoursTuesdays 9-12 and Fridays 2-4 or by appointment. 8 Park Street, Room 31

Where's the Moodle?

View our course on Moodle. We will only really use this for electronic submission and for grade entry.

Course Description

Digital libraries could be considered an archetype of many modern large-scale systems such as e-commerce websites, music listening services, and even email clients. These systems use information retrieval techniques to find documents and natural language processing to understand texts. Databases are used to store user interactions, and the whole system must be available continuously over the web. This course will focus on understanding and making improvements to the backend of such a system built in Java. Students will work in groups on predetermined 2-3 week projects to get a feel of the various fields and technologies involved. The final few weeks of the course will be for open-ended projects. This course is programming intensive.

Course Objectives

Successful students in this class will:
  • Become familiar with tools and principles of server-side web programming.
  • Become comfortable evaluating libraries and other open source code resources.
  • Develop their programming skills, in particular their ability to plan, estimate effort, ask for feedback, and reflect on their successes and challenges.
  • Develop group working habits, including the use of version control, code documentation and practice encouraging continuous learning in a group setting.


  • Class Attendance & Participation: 20%
  • Programming Assignments: 50%
    • Questions & Plans: 20%
    • Code & Reflection: 30%
  • Final Project: 30%

Project Lifecycles

Programming assignments will not be black boxes. This course will encourage a wholistic view of projects, from the planning phase through making changes, and review of expectations.

Projects will be assigned on Wednesdays, and due roughly a week later.

Project Deliverables

Phase Objective Requirements Relative Due Date
Questions One of the key steps in any software engineering task is communication with the customer (in this case your peers and myself) about requirements. Clarity of communication is difficult and is worth practicing. This is a personal reflection that should include:
  • A short paragraph summarazing the goal of the assignment in your own words.
  • The easiest and most difficult things you see about the assignment.
  • A list of questions clarifying points in the assignment.
  • An estimate in hours, for how long it will take you to complete.
  • One sentence per group member: how might you divide the work?
Due within 24 hours of project assignment, e.g. Thursday at Midnight on Moodle.
Plan Once you understand the goals of a programming task, the next step is to plan your moves. This is when you will break down the problem in your head, perhaps coding some small pieces or tests to determine how difficult it will be to interface with new code. Roughly 1-2 pages. Describe your group's plan to complete the assignment.
  • What classes will you create?
  • What methods will you change?
  • How long do you expect each to be?
  • Who in your group will do each part and when will you do them? What is the most risky piece of it?
Due roughly midway through the project: Ideally this will be worked on as a group on Friday and submitted by the start of class Monday.
Code In any project, there will be a code freeze. On this day you will come to class prepared to setup your project and show off the results. If not everything works, talk about what you tried. Ask other groups how they solved that problem. Look at what other groups did differently. I will read your code alongside your final reflection, giving stylistic and material feedback. Clear, incomplete code is always better than complete code. Code is expected to compile, as starter code will be provided for all assignments. Due in class a week after assignment: Code is frozen when you arrive in class and pull up your demo.
Reflection Code is frozen, time to look back, and review what you can learn about all the previous stages: What questions should you have asked earlier? Was your estimate close? How did your plan work out? This is a personal reflection. It should be no more than 1 page. In it, discuss things that went well, things that are still a challenge for you moving forward.
  • Comment on how your group is working together. What improvements can you make in the future?
  • Assign a peer grade from 1-10 to each of your group members, including yourself.
Peer grades from reflections will be held in confidence until the end of the class.
Due in class a week after assignment: Code is frozen when you arrive in class and pull up your demo.

Final Project

The final project will be a longer version of the standard programming projects, and will be open-ended. There will be a proposal, two drafts of a plan and weekly progress reports per group. The final report will be a personal reflection. More details will be discussed in class.