Published: Mon 04 August 2014
teaching cis440 software
Wall Street Journal features a column by Christopher Mims that argues " Programming Is a Trade; Let's Act Like It". He argues that not only is it possible to learn programming without going to college, but that university computer science programs may be teaching something entirely different from what's used in practice:
Take Facebook: The first thing that happens to a new engineer there is six weeks of intensive classes, many of which are -- you guessed it -- programming classes. This is in part becuase university courses in computer science favor theory over programming, which is a mishmash of skills ranging from practical knowledge of in-vogue programming languages to how to work on projects that involve dozens of other programmers and thousand or even millions of lines of code.
Mims is primarily interested in writing about online training programs like
Codecademy and Treehouse, as well as a few "intensive" trade schools like Seattle's Code Fellows. I'd like to raise the possibility that this article highlights an excellent way for MIS programs (like ours at ASU) to make our programs relevant for students.
In CIS440, which started out as a textbook-driven project management (PMBOK-based) course, my students are now experimenting with a wide variety of practices in that "mishmash" -- version control, test-driven development, DevOps, and so on. Last spring, we started using Scrum as an organizing framework for the course schedule, with its strict requirement that the team
deliver working software early in the semester and demonstrate new features every iteration (every two weeks, starting this fall).
Aside: my initial motivation in adopting Scrum was to protect my own pride! I hated telling capstone project sponsors at the end of the semester, "The students didn't finish your project, but..." [choose one of: "...they had a great learning experience", "...they did a non-working prototype", "...you can consider this an experiment with the new technology", etc]. Scrum mandates that you'll have
something deliverable, even if it's a bare-bones web page with lots of "coming soon" stub pages.
It turns out that there's more to the "mishmash" than just learning a programming language or a few tools. There is indeed
theory about software development -- it just doesn't happen to be the kind of theory (data structures, algorithms, etc) that they teach in the computer science department. "Agile" and "Lean" are two keywords that both stand in place of a rich history of theoretical study and empirical experience. We can look at collaborative software development itself as a scientific process in which requirements are seen as hypotheses to be tested (cf. ). And in fact there is a great deal of operations management, especially the Theory of Constraints, underlying much of the DevOps movement. The Lean Startup
The gap between what CS departments teach and what the market needs is real. CS graduates may study programming theory for four years and graduate without ever having written a test, or checked code in with
git. But there's more to being a great developer than just learning the currently most popular language. Teaching the art and science of software development in organizations can and should be (part of?) the mandate of an MIS department. By claiming this role, we can offer more than just "computer science lite". We can even begin to justify why
computer science majors should take courses or a double major in our departments. We'll offer something that complements, rather than substitutes for, their training in computing theory.
This is going to be one of the guiding ideas of my courses in 2014-2015. To accomplish it, we're going to need some new practices (such as using GitHub for assignments) and new resources (like a great textbook!) as well as lots of communication with the professional community (and maybe with the CS department) to better understand what's really needed.