Master of Fine Arts in Software

Richard P. Gabriel

Software education today is embodied in Computer Science and Software Engineering programs, supplemented by informal mentoring on the job. I find this approach unsatisfactory. Software development is a performance exhibiting skills developed by an individual—often in groups of teams in order to achieve the scale of software required. In this way, software development is like putting on a play, which requires the skills and performances of a number of people working in tandem on stage and behind the scenes. Such skills can be developed in isolation through practice with other amateurs or even by putting on plays in public without any training at all. But how much faster could talent be developed in a educational program that recognized that writing software has enough of an arts-like performance component that the program was tailored to it?

Another apt comparison can be found in the creative writing arts. It is entirely possible to become an extraordinary writer by one’s self, by simply writing and reading, and many excellent writers progress this way. A faster way to gain competence is through a Master of Fine Arts program, which is designed to rapidly increase one’s skills and to get one prepared to bring to bear critical thinking to the process of continuing improvement. Some believe that all aspects of software design and development are really engineering or scientific disciplines where the models of engineering and science apply, and I will not quarrel with them nor try to convince them otherwise.

Many degree programs for Computer Science and Software Engineering work by shovelling information into the student along with presenting opportunities for developing critical thinking. Despite the tone of this description, I believe it’s a valid way to teach certain students certain things, to prepare them in a particular way for their work or research careers. In the writing arts there are similar approaches in the forms of Master of Arts and PhD degree programs. But both in software as in writing, there are people whose work is "doing the thing"—writing and designing programs—and such people do this work every day. They hope to be good at it and to be able to improve over time. They have pride in what they do and are satisfied or not with each project they do. To them what they do feels more than craft, includes engineering and science, but still feels like more. This proposal is aimed at educating those people.

This is a proposal for a Master of Fine Arts in Software program. For purposes of simplicity I am locating within the semantic range of the term "software" not only software code and coding, but software design, user interface design, user-centered design, humane design, and in general the practice which is creating the entirety of a software system including its human interactions, what to design in the first place, and the techniques for constructing such a thing. Some will feel most comfortable limiting their imagination of the program to design, and it is true that no one will be able to graduate from the program without displaying excellent high-level design skills. But in my view, a person may reasonably enroll in the program to become quite simply an extraordinary coder—but one with very good design skills. Others may wish to focus on the graphic parts of user interface design, for example, and these folks will need to end up with a good grounding in implementation techniques and skills.

This proposal is predicated on the belief that being a good software designer and developer requires talent, and that talent can be developed. We explicitly liken the practice of software to the practice of fine art.

The structure and constitution of this program is such that we can begin it immediately upon an educational institution being given the right to grant the degree called "MFA in Software." There is no curriculum to develop, no books, no semester-long classes. You can see this by realizing that the MFA is primarily a performance degree not a knowledge degree—though every student and teacher will gain knowledge along the way. and knowledge will be generated by the program. Education in this MFA program operates by providing a context in which students are constantly designing, writing, and working with software under supervision, with critique, and with explicit thought being given by the student to what the student is doing. One way to look at it is that the student is writing, designing, and working with software while paying attention.

"Writing, designing, and working with software" is achieved by the student working on a variety of his or her own projects under the serial supervision of a variety of faculty. This is a low-residency program, which means that these projects are done at home or at work. In this way, the program resembles a mentorship program, and the work done by the student can be projects of interest to his or her employer.

"While paying attention" is achieved principally through writing short essays called annotations. An annotation is a vehicle for the student to pay attention to one craft element at a time. A craft element is something that makes software effective and beautiful. Craft elements can range from the smallest coding details such as the choice of variable, function, class, or method names through the design of interfaces and protocols through the layout of information on a screen to the largest concerns such as the architecture of a system and descriptions of what to design. In essence, anything created that is a hallmark of what sets the extraordinary apart from the ordinary in software and software design is a craft element.

Here are the parts of the MFA for Software program:

Those are the important points. The way that the program works is for each student to spend a lot of time explicitly thinking about the craft elements in any piece of software, design, or user interface. This is accomplished by the annotation. Attention is paid to the smallest details first and the focus expands as time goes on (at a rate that depends on the student). The faculty advisor is chosen from software practitioners and teachers, but always the faculty member is an extraordinary practicing software person. The software each student produces during the semester is carefully critiqued in writing by the faculty member. Work on a piece of software or a design is continued until it is completed; this might mean that a single 1-page program or the design of a dialog box may be revised 5 or 6 times or even more over the course of the program.

It is this explicit attention to matters of craft that matures each student into an excellent software practitioner.

This program can be quickly set up assuming there is a friendly host school and a group of 5 or 6 dedicated core faculty. A Board of Directors also needs to be formed to resolve various issues such as recruiting faculty, settling disputes, and establishing rules for the program.

There is no preset curriculum, though I anticipate that themes and trends will emerge which form a sort of "school" of design thought which will be passed on to all students. This is a performance degree, which means that students who graduate will be extraordinary practitioners. Though the MFA in Software is a terminal degree, it is not suitable as a teaching credential.

The host school would need to be able to house students during the residencies as well as support one permanent faculty member on its faculty who would serve as the director of the program. Further, a full-time administrative assistant and perhaps a lower level assistant would be needed particularly during admissions, which occurs twice a year.

There is no other program like this in the world today. This is because the traditions of Computer Science and Software Engineering have tried to turn all aspects of software creation into a pure engineering discipline when they clearly are not. The MFA in Software would begin to repair this error.