Does anybody what this course is about?
Good. At least I'm not alone. :-)
What are the characteristics of a great software team?
Some answers: Delivers software that is reliable, on schedule, and under budget. Communication between the customer and the developer. Well-defined goals, so that team members know what to do.
What are the problems you face as a developer?
Primary answer: More experience!
In recent weeks, when students asked, "What is is your summer course about?", I sometimes told them to google "agile software development" to find out a little about what the course title means.
Back when I last taught an agile development course, I recorded that the result of the query on August 24, 2004, was:
Results 1 - 10 of about 336,000.
Search took 0.25 seconds.
When I made the same query this morning, May 10, 2010, the result was:
About 1,670,000 results (0.19 seconds)
That is a five-fold increase in documents in the last six years. Clearly, the topic is still a topic of discussion.
Today when I pressed the "I Feel Lucky" button, Google gave me the Wikipedia page for agile software development. Wikipedia wasn't nearly as large or popular in 2004 as it is today. When I pressed "I Feel Lucky" back then, Google served the The Agile Manifesto.
Manifesto for Agile Software Development
We are uncovering better ways of developing
Individuals and interactions
over processes and tools
That is, while there is value in the items on
© 2001, the above authors
READ IT OUT LOUD...
Read that page. Follow the link to Principles of Agile Software and read some more. Without any technical detail, these two pages tell you an awful lot about the term "agile software development".
When I pitched this course, here is what I was thinking: The 'agile' movement has blossomed in the software industry in the last five years, but its values and practices are as old as computer programming itself. Yet our students don't get to learn about or from it, because, if they get any exposure to software development principles at all, it is from the traditional software engineering community.
In this course, I would like students to learn (more) about:
All of these ideas and software tools draw heavily from existing practices. In the mainstream commercial world, they first grew in the object-oriented communities around Java and C++. Going farther back and into smaller communities, these ideas have long been known and practiced in the Smalltalk and Lisp communities. You can also see many of these ideas in the work of building architect Christopher Alexander. They share a common theme of growing software, organically, rather than master planning it.
(How many of you have taken 810:172 Software Engineering?) The 'agile' movement grew in part as a reaction to many of the kind of traditional software engineering practiced in large, hierarchical organizations. This course will explore some alternative ways to develop software, ways that are pragmatic practices of master programmers that complement or replace traditional software engineering methods.
I am not entirely certain yet. The Agile Manifesto will also be our guide as we develop and run the course. I have several key ideas that I want us to cover, several practices and tools that I want you to learn, but no fixed course. You are advanced CS students and so can help set the direction for the course.
Here is what I know we must do:
Building software is our central activity. It will allow us to understand these methods, tools, and patterns, not just memorize them. It will allow us to write about them, discuss them, and draw conclusions about them.
How, and how much, we build software is still open question. So is how we will evaluate our progress.
When preparing for this course, I reviewed many textbooks, on-line sources, and software tools. Here is a stack of them...
project -- 3-4 iterations diversity - programming language - experience team(s) what class will be like - short, short lectures - discussion - coding and demos of code * meet in 335 as our studio? time expectations: 4-6 hours a day out of class work expectations: gotta do this stuff
Look over the Agile Manifesto and some of the links from that page.
Think about an open-source piece of software that you would like for the class to build or contribute to this semester. We will have a lot more fun applying the tools and techniques we study this semester if we are working on a cool program.