Building Software Together

Most undergraduate programs in computer science and software engineering include a one-semester project course designed to teach students how to work in teams. The aim of UCOSP was to make these courses more realistic and more engaging by having students from different institutions work together. I propose restarting this program with several new wrinkles.

First, Software Tools and its sequel taught my generation how to design software by showing us how to create small versions of the very tools we were using. Software Tools in JavaScript does the same thing with JavaScript, JSON, and HTTP instead of C, ASCII strings, and standard I/O. Having each team of students extend the model implementations in STJS or build new tools in a similar vein would:

  1. make mentoring easier (since more knowledge could be shared across projects);
  2. make assessment more balanced (since projects would be easier to compare to one another); and
  3. broaden students’ understanding of what tools exist and how they can make programmers’ lives better.

The second change would be to provide more training on the “how” of distributed team software projects. Building Software Together covers the usual topics like build systems, debugging, and testing, but also teaches students:

  • how to run a meeting;
  • the basics of intellectual property law;
  • what to do when you’re running out of time to finish what you’re supposed to deliver; and
  • how to hand over a project when you’re done.

The third change is to recruit team mentors from industry and to teach them basic management skills while they are overseeing students’ work. How should you manage conflict between team members? How should you ensure that everyone is evaluated fairly, and that no one is shut out of the conversation? Every programmer who wants to become a team lead needs to learn how to do these things; this program would give them that opportunity.