Open Source Software Development: A socio-technical course
Most up to date version at https://howisonlab.github.io/open_source_software_course/current/
Welcome to the materials for a course on open source software development, taught at the School of Information at the University of Texas at Austin. The course is taught by James Howison, with contributions from a set of wonderful TAs, including Chongyan Chen.
The course was developed as an undergraduate version of a course on Peer Production: Open Source, Wikipedia, and Beyond.
I call this a “socio-technical course” because I interleave social theory about open source (such as theories of motivation, approaches to governance, sources of lack of diversity) in among the technical skills needed to participate in open source projects (git and github commands, markdown, unit testing, packaging). This interleaving is inspired equally by Karl Fogel’s approach in Producing Open Source Software, and the intellectual traditions of Sociotechnical Systems, Sociomateriality, and the Consortium for the Science of Sociotechnical Systems (CSST).
In these materials I present these in two separate sequences: “insights” and “skills”. When I teach, though, I interleave them in what I hope are synergistic ways. For example, when teaching about coordination theory, the week includes the git and github approaches to managing dependencies (such as identifying and resolving conflicts, as well as branching). I pair literature on knowledge sharing up with skills to do it, such as understanding Markdown and referring to Issues/Commits. You can see this interleaving in the most recent syllabus at Section 2.1.
The course begins with a two-part physical in-class exercise: students fold paper planes, and share improvements. The first exercise addresses how patents and copyright affect sharing, building on each others work, and the division of claims. The second takes a more technical tack, and addresses management of versions and conflicts. These exercises give a physical analog for the topics in the course, giving a grounding for discussing intellectual concepts and git commands.