December 10, 2002
Richard Gabriel advocates establishing a program for Master of Fine Arts in Software, asserting that writing software should be treated as a creative activity instead of solely within the province of engineering.
[W]hat do people do when they're being trained, for example, to get a Master of Fine Arts in poetry? They study great works of poetry. Do we do that in our software engineering disciplines? No. You don't look at the source code for great pieces of software. Or look at the architecture of great pieces of software. You don't look at their design. You don't study the lives of great software designers. So, you don't study the literature of the thing you're trying to build.
Second, MFA programs create a context in which you're creating while reflecting on it. For example, you write poetry while reading and critiquing other poetry, and while working with mentors who are looking at what you're doing, helping you think about what you're doing and working with you on your revisions. Then you go into writers' workshops and continue the whole process, and write many, many poems under supervision in a critical context, and with mentorship. We don't do that with software.
See, too, Mr. Gabriel's proposal for an MFA in Software.
This idea resonates strongly with me. In my work and reading, I've observed that programming's creative side is inadequately recognized or addressed, certainly in academic programs.
Every few months, a "programmers vs. designers" debate erupts on one of the lists to which I subscribe. The contention is usually that designers and their work are creative, while programmers operate strictly within a left-brained, ordered, logical realm —never the twain shall meet.
Rubbish.
"The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination." So wrote Fred Brooks in the Mythical Man Month. Yes, the nature of writing software — which must after all run on ever-logical computers — implies a certain logic and order to the work to achieve an effective end result. But working through a problem and inventing a solution, then working and reworking the solution to make it more efficient or elegant or both, is an inherently creative activity.
This process — an aspect of the craft, to use the argot — is where the benefit of working toward an MFA lies. Kiara's working on her Masters in creative writing. The quality of her writing has noticeably improved as a direct result of the writing, rewriting, reading, critiquing, and revising that is emphasized in her program. The code I write has been improved by a similar process: working with and revising others' code, and having others read mine. Knowing that others will be seeing my code forces me to write better, to think through a problem more clearly, to revise and improve the code until it is something I'm proud of instead of ashamed. I have learned a lot about programming and software design by reading code from well-established open source projects. From what I've seen, and from what Gabriel describes, this is missing or de-emphasized in most software engineering programs.
None of this is to dismiss the engineering side of software design and development. I've never been through a traditional computer science program and sometimes keenly feel the absence of that background in my work. For the most part I make up for it by being a pretty smart guy and by reading and writing a lot of code. And fixing a lot of bad code and poor designs written by comp sci grads with no practical experience in doing quality work. An MFA program that emphasizes the creative processes of software creation calls out to me. I really look forward to seeing this happen.