“Donec et felis
vestibulum dui
ligula id scelerisque,
suscipit quis dolor
nulla facilisi curabitur
sit amet pede fusce.
figure 5. Ranked results from survey of former Berkeley students on whether course topics listed in the table and figure 3 were useful
in their industrial projects. these earlier versions of the course did not offer enhancing legacy code, design reviews, and working with
nontechnical customers.
75% 19%
13%
7%
7%
6%
7%
7%87%
93%
100%
Agree Neutral Disagree
Design patterns
Working in a team
Version control
unit testing skills
(mocking, stubbing, test automation,…)
saas knowledge
(used in other languages/frameworks)
80%
Ruby on Rails
73%
20%
7%
cloud computing knowledge
67%
33%
test-first development
67%
20%
13%
user stories
60%
20%
20%
Lo-fi user interface mockups
44%
25%
31%
Velocity
21%
57%
21%
0%
20%
40%
60%
80%
100%
legacy code fits surprisingly well with the
test-driven development of Agile.
To learn to communicate with nontechnical customers, for the Berkeley course we asked for projects from
nonprofit organizations. The projects
are typically less than 3,000 lines of
code, with typically two to three times
more code for testing than for the app.
Teams of four or five students meet
with customers on each Agile iteration
for feedback on the current prototype
and to prioritize the next features to
add. (Moreover, we encourage students
to connect these applications to Facebook or Twitter, which gives students
the chance to deal with users as well as
nontechnical customers within a single
course.) Teams members do design
reviews for each other as part of a biweekly class laboratory section, as Agile
favors frequent code check-ins and design reviews. (Online students do not
do projects.)
using the course
content afterward
Figure 4 shows the survey results of
Berkeley students from two earlier
course offerings. Just 22 of the 47 re-
spondents had graduated, and just 19
had done significant software projects.
The percentages indicate the results
of their 26 software projects. We were
surprised that Agile software development was so popular (68%) and that
the cloud was such a popular platform
(50%). Given that no language was used
in more than 22% of the projects, our
alumni must be using Agile in projects
that use languages other than Ruby or
Python. All the class teams had four or
five students, which directly matches
the average team size from the survey.
Once again, Agile development and
Rails were not selected because we expected them to dominate students’
professional careers upon graduation;
we use them to take advantage of their
productivity so we can fit several critical ideas into a single college course
in the hope they will use them later no
matter what methodology, programming language, and framework.
Figure 5 shows the students’ ranking of the topics the table and Figure
3 in terms of usefulness in their industrial projects. Most students agreed
that the top nine topics in the course
were useful in their jobs. Once again,
we were pleased to see that these ideas
were still being used, even in industrial projects that did not rely on Agile
or on Rails. The two lower ranked top-
ics were Lo-Fi User Interface Mockups,
which makes sense since few developers work on the UI of a user-facing
project, and Velocity, as progress can
be measured in other ways in industry.
Although a small sample and not
a conclusive user study, our survey offers at least anecdotal evidence that
students of this course do continue to
use successful software development
techniques in later software projects of
all kinds.
conclusion
Using Agile to develop SaaS apps via
highly productive tools like Rails and
deploying them using cloud computing cultivates good software practices
and pleases many stakeholders:
˲ Students like it because they get
the pride of accomplishment in shipping code that works and is used by
people other than their instructors,
plus they get experience that can help
land internships or jobs.
˲Faculty like it because students
actually use what they hear in lecture,
even after graduation, and they experience how big CS ideas genuinely improve productivity. Virtual machines reduces hassles for faculty plus the cloud
allows for more interesting program-