We might call this "DevOps Courseware"...
except that doesn't sound as good, does it?
A point I will stress again later: I am not here trying to tell
anyone how to prepare their courses! And I certainly am not
suggesting everyone drop what they are doing and do things my
Why Agile Courseware?
Is this just a cute buzzword, or should you be
Benefits of Agile Courseware
Agile Courseware is not a rival to, or
replacement for, educational approaches like
The goal of Agile Courseware is to
deliver whatever pedagogical approach
works more easily, more rapidly, more
error-free, more collaboratively, and so
Course materials are easily shared among faculty:
No emailing of bulky PowerPoint files.
Work is in open, text-based formats: parts can
easily be extracted for use elsewhere.
It is much easier to grab
someone else's HTML table (with permission!)
and incorporate in your own work than to
use just a part of their PowerPoint
The work exists in open repositories on
the Internet (or inside a firewall, if
Open content developed for in-person classes
can easily be transferred to online classes
Because materials are based on open standards,
generally text-based, and stored in public
repositories, it is easy for other faculty
members to learn how any "neat trick" was done.
Not so easy for PowerPoint, etc.
Also, it is simple for other educators to
improve on someone else's original work,
so that the original author learns from
And by having the work in an open repository,
knowledge need never disappear.
Text-based materials can easily be processed by
Only a text editor and Internet access are
needed to deploy new versions. No need to
access PowerPoint, fetch files from a laptop,
login to a special machine, etc.
Coordination across multiple work machines is
I don't need to remember what I've updated from
my desktop when I get on my laptop to work on a
course. No need to download particular files
from Blackboard, Moodle, Classes, etc. to have
my laptop up-to-date:
I just run "git pull" and every new file is on
whatever machine I am using!
I don't even need one of my machines with me: I
have accounts on PythonAnywhere, and I can log
in from a public terminal, or a podium PC,
pull the latest material, update a mistake, and
push it back to the repository. The whole
process takes less than a minute.
Students, acting as TAs, or open-source
collaborators, will learn agile development and
DevOps principles hands-on.
I now have over 20 students contributing to
open-source projects I have initiated.
This is a great resume plus for all of these
TAs can much more easily contribute to the
courseware: instead of passing files back and
forth and deciding who "owns" them at any time,
we just use the power of verion control and can
all work simultaneously without worries.
Once these tools are mastered, they can be used
not just for courseware, but for co-authoring
or papers, and, of course, for
Breakdown silos between courseware provider,
courseware user, between different teacher's
courseware, and between different courses.
Mistakes easily rolled back
I wiped out my entire Algorithms course by running
a script on the wrong machine.
Using git, in about a minute, I was able
to restore the whole course.
Can be manipulated by programs
Easy to incorporate other resources
Uses open-source tools whenever possible
How can the above principles be put into practice?
This is not an all-or-nothing transition!
That would be anti-DevOps! That would be
Waterfall Model development.
Faculty can keep working as they have been, and
gradually incorporate more "Agile Courseware" into
Generating the menu:
When I made it collapsible,
it took 4 lines of awk code,
not 28 lines of HTML, because the menu is
generated by a script and a text file.
There is a new edition of CLRS coming: we
will change chapters.txt, and a new main
menu will emerge from our build process!
That same text file is used to build the
language table as well.