CS 439: Labs
I hear and I forget. I see and I remember. I do and I understand. --
Confucius
Overview
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!
Projects
Projects
|
Objectives
|
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
|
25
|
File Systems labs I, II, III: Atomic disk and File Systems and
|
Understand storage, transactions, and file systems
|
15,15,10
|
Last updated: Wed Jan 18 07:18:44 -0600 2012
[validate xhtml]