Walking Skeleton
The first step in an agile development project is to create a “walking skeleton”. An automatic build/test/deploy cycle to support further development. This skeleton is then built on through the development to create a working piece of software.
My favored python tool chain is: Hudson, Paver, Fabric, VirtualEnv, Distribute/Setuptools, Pip
My favored Java tool chain is: Hudson, maven, tomcat, (others to be determined)
Creating the “Nebulae”
This is a simple, undifferentiated substrate that the project will develop from. Like an astronomical nebula, it will collapse over time into a final product.
This substrate only really consists of assumption of the final environment the software have to live. This means that some of the major components such as hardware architecture, operating system, development language, testing framework, etc. have been chosen.
Literate Programming
Literate programming can be integrated into this process after the first “walking skeleton” is created. Perhaps after the first acceptance test is written.
Pedagogy
One approach to teaching programming could be to start with a “walking skeleton” and have novices work on new functionality in a TDD manner. Having a mature, well documented architecture would act as a “scaffold” in the problem domain, allowing the novices to focus on the details of programming.
I hope that I’ll be able to use GarlicSim for this scaffold by next summer. I don’t know how to set up the build infrastructure yet, maybe using EC2 or something else. I’ll also have to make sure that GarlicSim has a good test infrastructure.
I still have to decide whether to use Python 3. Python 3 would be generally easier to teach to, but has fewer libraries supporting it. py.test and GarlicSim already support are ported, and those are the most important dependencies.
My current idea is to guide novices through building a game of life simulation — probably test first, then having them develop a simulation of their favored domain afterwards.
Visualization may be an issue, since the GarlicSim GUI may not be open source. If it is, I can easily create a simple GUI in pygame or pyglet…