Problems and Programmer
Problems and Programmer
Abstract
Problems and Programmers is an educational card
game that we have developed to help teach software engineering. It is based on the observation that students, in
a typical software engineering course, gain little practical
experience in issues regarding the software process. The
underlying problem is time: any course faces the practical constraint of only being able to involve students in at
most a few small software development projects. Problems and Programmers overcomes this limitation by providing a simulation of the software process. In playing the
game, students become aware of not only general lessons,
such as the fact that they must continuously make tradeoffs among multiple potential next steps, but also specific
issues such as the fact that inspections improve the quality of code but delay its delivery time. We describe game
play of Problems and Programmers, discuss its underlying design, and report on the results of a small experiment in which twenty-eight students played the game.
1. Introduction
In surveying the state of software engineering education as reported in conferences [3, 13, 14] and special
journal issues [1, 2, 4], it becomes clear that students gain
remarkably little experience in exercising the software
process. While the relevant theory certainly is taught in
lectures, the practical side of most courses typically
guides the students through a linear execution of the waterfall model.
The underlying problem is simple: class projects must
be completed within the length of their course. Combined
with the need for students to at least once exercise creating a set of project deliverables (e.g., requirements documents, design documents, test cases), little room is left to
illustrate the many facets of the software process.
Industry has recognized this problem and over time has
requested academia to better prepare its students for their
future in the workplace [8, 9, 12, 16]. In response, many
attempts have been undertaken to improve software engineering education. Some attempts involve basing an entire
2. Objectives
3. Overall Design
The first and foremost goal of Problems and Programmers is to enrich a students understanding of the software
process. To create this higher level of understanding, the
game makes careful tradeoffs among faithfulness to reality, level of detail, usability, teaching objectives, and fun
factors. Our choices in these tradeoffs were guided by the
following high-level objectives.
Finally, we note that Problems and Programmers is explicitly meant to complement existing course materials in
software engineering. Instead of replacing those materials,
Problems and Programmers is best used in a role that
builds upon the theory presented in lectures and in turn
reinforces its lessons with actual experiences in subsequent (or parallel) project assignments.
Figure 2. Examples of a project card, programmer card, problem card, and concept card.
4. Game Play
4.2 Design
Game play in Problems and Programmers is straightforward. Each turn, a player takes the following six steps:
4.1 Requirements
Creating a requirements document constitutes the first
phase of game play. Over a number of turns, a player must
create a single column of requirements cards, the length of
which simulates the size of the requirements document.
Based on the projects complexity and length, a player
must decide when the document is complete for their
purposes. Some players will intentionally move on to the
design phase rather quickly, others will take a more cautious approach and first build up a significantly sized requirements document.
Requirements cards are either clear or unclear. The
presence of unclear requirements cards is problematic:
certain problem cards trigger unwanted negative progress
if too many requirements cards are unclear. Fortunately,
players may forgo some or all of their creation of new
requirements to rework existing unclear sections: at each
turn a player may choose to draw two new requirements
cards, draw one new and one replacement requirements
card, or draw two replacement requirements cards.
4.3 Implementation
Implementation is the most important phase in Problems and Programmers. Per turn, each programmer that a
player has hired can take four different actions: program
good code (cost equal to project complexity), program
rush code (cost equal to project complexity divided by
two), inspect code (cost one), and fix a bug (cost one or
more). Total cost cannot exceed the skill-level of a programmer. A programmer of skill-level four working on a
project of complexity two could choose to program two
good code, one good code and two rush code, inspect four
code cards, or any other combination totaling four or less.
Code is programmed by drawing code cards from the
code deck and placing the cards face down in a column
above the programmer. Good code is distinguished from
rush code by the card color that is put at the top (blue and
red, respectively). Inspection is not mandatory, but gives a
player insight into their code quality by turning cards over
and revealing whether the code has bugs. Three types of
bugs exist: simple, normal, and nasty. Code containing a
simple bug can be replaced with another code card when a
player chooses to fix the bug. Of note is that the new code
card is placed face down in the stack to simulate the fact
that bug fixes can contain bugs themselves.
Normal bugs are fixed by swapping them, one-by-one,
with the code cards above them until they are at the top of
the column and can be gotten rid of like a simple bug.
This process simulates that other code often must be
modified as well if it builds on buggy code and emphasizes the importance of early bug detection and resolution.
Finally, nasty bugs are what they are called: they wipe
out all progress above it in the column, and a player has to
redevelop that code.
Inspecting code clearly has the benefit of uncovering
bugs early in the process. Just like in the real world, however, improving code quality bears the cost of increased
time-pressures that exist to get coding completed.
Note that when a player has reached the implementation phase, problem cards may be played upon that player.
Some players may hold off on playing their problem cards
until later in the process to wreak even more havoc (mimicking the fact that later changes typically are costlier).
5. Experiment
To evaluate Problems and Programmers, we conducted
an experiment in which twenty-eight undergraduate students played the game. Teamed in pairs, each student was
first introduced to the game, its objectives, and its mechanics of game play (30 minutes), then played twice
against the other person (45 minutes per game), and was
asked to fill out a questionnaire regarding their particular
experiences (10 minutes). Our primary objective was not
to observe or analyze the students play, but rather to simply let them play and report on whether they considered
the game helpful in learning about the software process.
To promote objectivity, the experiment was carried out
independent of any particular software engineering course.
Furthermore, while all students had passed the same software engineering course as background material (ICS 52,
Introduction to Software Engineering), they did so in different quarters with different instructors. Finally, we randomly chose subjects from a full pool of applicants.
6 13 9
3 10 12 3
8 12 3
3 12 6
7. As an optional part?
4 10 8
8. As a mandatory part?
8 11 2
Also informative were the answers given to the openended questions. Designed to present us with feedback to
assist in further improving the game, questions focused on
favorite and least-favorite parts, clarity, problematic parts,
lessons learned, suggestions for improvement, and overall
impressions. Again, results are encouraging: I learn that
even though doing requirements and design take a lot of
time, but if we dont do well on these parts of the project
might actually take longer to finish!, It reinforces the
ideas taught in ICS 52 with a fun way to learn it., The
game illustrates in 1 hour or 2 almost half of the material
in ICS 52., I think I learned that having many programmers = more time in integrations., and Tells me
WHY it is important to create quality code. Most importantly, a significant number of respondents considered the
competition aspects of the game enjoyable and helpful.
At the same time, the responses brought to light some
issues with the game, e.g.: Requirements and design are
boring., Add different life cycles., It was unclear the
amount of time should be spent on requirements and design. The majority of these comments were focused on
the early phases of the game and we will take these and
the other comments provided and examine whether we can
improve the game accordingly. In particular, we intend to
make the requirements and design phases more varied in
order to introduce both more alternative strategies and
more depth into the game.
6. Conclusions
Problems and Programmers represents a first attempt at
using a physical card game for educating students in the
many difficult issues inherent to the software process.
While it certainly is not designed to teach the right answer to each particular situation (such an endeavor is impossible), repeatedly playing Problems and Programmers
prepares a student for the breadth of issues they may face
in their future careers, reinforces in a practical manner
many of the theoretical lessons presented in lectures, and
builds a students understanding of their actions and role
in the overall software development process.
Compared to existing automated simulations, our cardbased simulation has the advantage of being highly visual,
being easy and fun to play, engaging students in collaborative learning, and providing almost instantaneous feedback on the actions that students take. While we had to
make some compromises to achieve this level of functionality and therefore were unable to include as many aspects
of the software process as we would have liked, we believe the current incarnation of the game achieves a good
balance among the objectives stated in Section 2.
The results of our experiments confirm our intuitions:
students largely believe that use of the game in their software engineering class would have helped them in their
studies. Our research, however, does not end here. First,
we plan to actually use Problems and Programmers in our
introductory software engineering class. Using an improved version based on the feedback received, we hope
to further build our understanding of how the game helps
in teaching the software process. Planned collaborations
with three other institutions will provide us a broad sample size in this process. Second, we will develop an automated version of the game. Although losing the physical
aspects of the game, automation facilitates easy distribution and allows us to build a version of the game that incorporates additional software engineering principles and
life cycle modelsthe advantage being that the program,
and not the player, enforces the rules of game play.
Acknowledgments
We thank the other members of our research group for
their invaluable suggestions regarding the design and implementation of Problems and Programmers.
This research is supported by the National Science
Foundation under Grant Number CCR-0093489. Effort
also sponsored by the Defense Advanced Research Projects Agency, Rome Laboratory, Air Force Materiel
Command, USAF under agreement numbers F30602-002-0599 and F30602-00-2-0607. The U.S. Government is
authorized to reproduce and distribute reprints for governmental purposes notwithstanding any copyright annota-
References
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
IEEE Software, Special Issue on Educating Software Professionals. Vol. 19 (5), September/October. 2002: IEEE.
The Journal of Systems and Software. Vol. 49. 1999: Elsevier Science Inc.
Proceedings of the Fifteenth Conference on Software Engineering Education and Training. 2002: IEEE.
Balci, O., Annals of Software Engineering. Vol. 6. 1998:
Baltzer Science Publishers.
Borstler, J., et al., Teaching PSP: Challenges and Lessons
Learned. IEEE Software, 2002. 19(5): p. 42-48.
Brooks, F.P., The Mythical Man-Month: Essays on Software Engineering. 2 ed. 1995: Addison-Wesley. 336.
Bruffee, K.A., Collaborative Learning: Higher Education,
Interdependence, and the Authority of Knowledge. 1983:
John Hopkins University Press.
Callahan, D. and B. Pedigo, Educating Experienced IT
Professionals by Addressing Industrys Needs. IEEE Software, 2002. 19(5): p. 57-62.
Conn, R., Developing Software Engineers at the C-130J
Software Factory. IEEE Software, 2002. 19(5): p. 25-29.
Dawson, R., Twenty Dirty Tricks to Train Software Engineers, in Proceedings of the 22nd International Conference
on Software Engineering. 2000, ACM. p. 209-218.
Drappa, A. and J. Ludewig, Simulation in Software Engineering Training, in Proceedings of the 22nd International
Conference on Software Engineering. 2000, ACM. p. 199208.
McMillan, W.W. and S. Rajaprabhakaran, What Leading
Practitioners Say Should Be Emphasized in Students Software Engineering Projects, in Proceedings of the Twelfth
Conference on Software Engineering Education and Training, H. Saiedian, Editor. 1999, IEEE Computer Society. p.
177-185.
Mengel, S.A. and P.J. Knoke, Proceedings of the Thirteenth Conference on Software Engineering Education &
Training. 2000: IEEE Computer Society.
Ramsey, D., P. Bourque, and R. Dupuis, Proceedings of
the Fourteenth Conference on Software Engineering Education and Training. 2001: IEEE Computer Society.
Sharp, H. and P. Hall, An Interactive Multimedia Software
House Simulation for Postgraduate Software Engineers, in
Proceedings of the 22nd International Conference on
Software Engineering. 2000, ACM. p. 688-691.
Shaw, M., Software Engineering Education: A Roadmap,
in The Future of Software Engineering, A. Finkelstein,
Editor. 2000, ACM. p. 373-380.
Shukla, A. and L. Williams, Adapting Extreme Programming for a Core Software Engineering Course, in Proceedings of the Fifteenth Conference on Software Engineering
Education and Training. 2002, IEEE. p. 184-191.