CS 439: Labs

I hear and I forget. I see and I remember. I do and I understand. -- Confucius


Projects are a vital part of this class. Using an idea to build something gives you a much deeper understanding than reading or even talking about the idea.

Project teams

You will work on these projects in teams of two. You are responsible for forming a team with someone with whom you will work well, and resolving any problems that arise during the partnership is your responsibility. If you are unable to resolve a serious problem, the instructor will arbitrate.

We recommend that you interview your prospective teammates just as you would someone you were considering hiring into your company. E.g., What are their goals for the course? Are they technically competent? Are they responsible? Is their personality and schedule compatible with yours? (Don't underestimate the importance of the last question!)

Effective pair programming

Your team must follow a pair programming methodology. In particular, both members of the team must work together to understand the problem, design your solution, enter code, and test your solution. For code entry, one member should type while the other observes, detects tactical coding defects, and thinks strategically about the overall design. These roles must be frequently swapped. You might also want to consider the XP strategy of designing your tests before you design your solutions. In general, studies [1, 2] suggest that pair programming works well: (1) counter-intuitively two programmers working together at one keyboard produce about as much functionality as two programmers working apart at two keyboards, (2) the code produced in this manner is of higher quality than individually programmed code, and (3) in an educational setting both team members learn more than they would separately. Note that for this project, these advantages of pair programming over disjoint work are especially likely to apply: it is vital that both team members understand all aspects of the implementation. Also be aware that the exams will have questions that required intimate knowledge of the project.

The projects will be challenging. We hope they will be very satisfying. The instructor and TAs will work to help you succeed on these challenging projects. Although the scope of the projects is ambitious, we will provide a framework to guide your efforts and to ensure that you don't have to spend a lot of time building uninteresting "glue" code. Our hope and expectation is that everyone that works hard on these projects will succeed. If you have other ideas for improving the project, please let us know. Good luck!


Relative Weight
Shell labs: 1, 2: Fork/Exec
Understand system calls, signals, processes, and shells 5, 10
Threads I and II Programming With Threads
Practice writing correct and robust multi-threaded code. 10, 10
Malloc Memory allocation
Implement a fast, efficient memory allocator
File Systems labs I, II, III: Atomic disk and File Systems and Understand storage, transactions, and file systems

Last updated: Wed Jan 18 07:18:44 -0600 2012 [validate xhtml]