896d12dff23f187c21505418d67b21f8c8544c93
[pintos-anon] / sigcse2009 / principles.tex
1 \section{Design Principles}
2 \label{sec:designprinciples}
3
4 The Pintos series of projects are built on a number of principles.
5
6 \paragraph{Read before You code.}
7 Each project involves a significant amount of reading code before
8 students write the first line of their code.  
9 Because software maintenance constitutes the vast majority of all
10 software development efforts~\cite{askEliforcite}, this setup mirrors the 
11 environment in which most software engineers work.
12 We went to great lengths to write the entire Pintos baseline code,
13 and in particular the portions students will read, in a style that shows,
14 by example, the coding style we expect from students.  This style
15 includes purely syntactical convention such as the choice of the
16 GNU indentation style, and extends to commenting style and naming 
17 conventions.  During the semesters in which Pintos was used, we
18 continuously refined the internal code documentation, focusing on those 
19 portions that initially proved difficult to understand or confusing.
20
21 \paragraph{Maximize Creative Freedom}
22 OS design involves a tremendous amount of creative freedom, both in the
23 choice of algorithm and data structures.  Our projects are designed to
24 stimulate creativity by avoiding the prescription of specific approaches
25 to accomplish each project's goals.  Instead, students must design their
26 own data structures and associated algorithms as much as possible.
27
28 \paragraph{Practice Test-driven Development}
29 %Test-driven development~\cite{Edwards}
30 Each project includes a large number of test cases that is accessible
31 to students.  In keeping with us adopting an internal perspective, students 
32 do not develop test cases, rather, they must implement the API that is exercised
33 by these test cases.
34
35 \paragraph{Work in a Team}
36 The projects presented in this paper are designed to be accomplished by teams of 
37 2-4 students.  Working in a team provides an environment that more closely resembles
38 industrial software development, and it provides a way for students brainstorm and
39 implement together.  In addition, we teach and require the use of group collaboration tools,
40 notably shared source code version control systems such as CVS.
41
42 \paragraph{Justify your Design}
43 Design justification and rationale is as important for learning as creating an artifact 
44 that fulfill a set of given requirements.  We designed a set of structured questionnaires 
45 in which students describe their design and discuss choices and trade-offs they made.
46
47 \paragraph{Provide a reproducible, manageable environment.}
48 Some concurrent environments are difficult to manage and debug.  
49
50 Teaching OS involves teaching concurrency
51
52 Operating systems are fundamentally
53
54 \paragraph{Provide analysis tools.}