referenced this in writing, "Some folks in the pattern community are talking about a SoftwareMastersOfFineArts
." I don't know who or what he is referring to, but I am giving a talk at OOPSLA this year in which I compare teaching software to teaching the fine arts, and evaluating software designs as similar to evaluation of fine art designs. A friend of mine who is a goldsmith was delighted to hear that software people think of themselves as craftsmen (-women). So evidently I am sympathetic to the notion, even without yet knowing what the actual proposition is. What is the proposition, anyway, anyone who knows? -- AlistairCockburn
This is an idea that I believe started (in the sense that it took on this concrete form) with RichardGabriel
) who himself is working on an MFA in poetry. In any event, he has taken up the cause early and has inspired others to do likewise.
The idea is this: A BS in Computer Science doesn't prepare you for writing great software any more than a BS in English prepares you to be a great writer. An MFA program is a kind of apprenticeship, with endless pages and hours of practice, really writing stuff. The student would work under the guidance of an accomplished tutor. Richard relates that many people can probably become good writers with 20 years of practice; an MFA program can help reduce that time to 4 years. Maybe we can do the same in software: to help make competent programmers, software artisans, out of those who graduate merely with the competence of software engineers.
The folks in and around the HillsideGroup
started talking obliquely about this about a year ago, but the dialogue is becoming increasingly focused. It has roots in notions that are hardly new; DonKnuth
has long talked about LiterateProgramming
Other interested parties include KenAuer
(add your name here if you're also involved in this exchange of ideas).
are apparently going to make it really happen: http://www.testing.com/cgi-bin/blog/2003/10/02#mfa
. I'd very seriously look at applying. -- StevenNewton
Academia is a very political world. There may people who will fight it and the first students may find it tough going. From the petty (CS departments refuse to share computing resources with the MFA program) to the significant (funding would be dodgy), no doubt those who initiate it will have many eyes on them.
I'm interested; the notion is intriguing. but also, in a very real way, somewhat worrying. If you look at Literature, there is a distinction: Academic Literature (literary theory, comparative literature, ...) and Actual Writing (what authors do).
And there is, by and large, a communication gap. A lot of the better writers know something of literary theory. A lot of the academicians have read deeply. And the lesser writers ("bullshit is bullshit and will never be mistaken for secret sauce" -- S. King, talking about lit crit) sneer at the academy and the lesser academicians sneer back in mindless reflex. And, by and large, people don't talk across the divide.
Without judging the lit-people, let me say that I would be horrified if we codified and solidified a gap of our own (which, it seems to me, already exists in nascent form).
There's a lot of merit in the underlying observation that a BSCS doesn't necessarily prepare one to write great software. That takes an enculturation into the appreciation of qualities that make software great, some variation of apprenticeship. I think the quality documentation goals behind LiterateProgramming
(if not via those specific tools and models) are conducive not only to great software but to facilitating that kind of enculturation.
I'm less certain about the MFA and writing analogy. Perhaps someone with more knowledge could elaborate. What proportion of "great writers" get there via MFA programs? Isn't "fine art" more purely a matter of esthetics than software? Sure, there's an esthetic component in the latter, but more akin to that in (to use the perennial example here) architecture than sculpture or writing.
This has been expressed a lot in recent years by analogy to engineering (SoftwareEngineering
). My original limited understanding of how software engineering supposedly differed from CS was precisely in this business of producing great software (reliable, maintainable, on time and preferably beautiful). I've conversed with many people who shared some idea related to that, but a lot of others want to involve metrics, formal processes, and so on (which have their place but are immensely overrated to my mind). I haven't had experience with academic attempts at teaching software engineering, if such even exist in any widespread form. (JimCoplien
above seems to equate a BSCS graduate with a software engineer; is there a real distinction?).
As discussed here I could easily envision the transition from CS graduate to software artisan being supported by a workplace with suitable apprenticeship organizational patterns. I also think undergraduate "CS" education could be enhanced to include much more of the truth, beauty, and quality aspects than are (as far as I can judge) typical. Internship programs could help there (sort of a transition between the two latter worlds, really).
I can see how some sort of MFA-style program could work and be a good idea but I'd be concerned about some of the issues William Grosso mentioned, and other concerns as well. Some CS departments are already wrestling with pressure to teach Visual C++ and MFC; a separate SoftwareMastersOfFineArts
raises issues of the specification of great software. Proficiency in use of Hungarian notation? That's getting paranoid. Enough for now.
Of course, there won't be one MFA, there will be many. As with current arts education, there will be schools, and dialog (conflict, even) between schools. Recall the trouble that the early Impressionists got into with the Paris Salon. At least those of us in the hiring seat would be able to get a good idea, based on where a candidate did their Masters', what their thoughts about Hungarian would likely be.
If building programs were a fine art, then wouldn't the people paying for it be "patrons", rather than "customers"? That's a very different kind of commercial relationship than the one we typically have now. Might be a lot better, too. But only if there were a healthy critical culture, a culture of good programmers providing critique of good programs for the benefit of the consumers of programs. What might be in a hypothetical issue of the TimesProgrammingSupplement
Funny - I thought this would be a play on programmer's desire to be seen as "arteests".
In seriousness, AnswerMe
: Assuming that apprentices would learn while working on deliverable systems instead of fictional homework projects, would the apprentice pay or be paid for the education?
Our organization is structured around the craftsmans 3 degrees of software development. Apprentices must commit themselves to exercising agile best practices to become a JourneyMan?. Simply expressing an interest in learning the craft is all that is required to enter Apprentiship. There is an entry level salary and compensation increases are tied to the value they deliver to customers while maintaining code that is resilient to change.
Those that can do, those that can't teach, and those that can't define the skill set work on lesson plans. -- Brian
First god created an idiot for practice. Then he created the school board. - MarkTwain
Architecture, like software, has a large functionality requirement. Buildings shouldn't fall down, software should work. But not only should buildings not fall down, they should be pleasant spaces to use, and this is why architects study big sweaty shelves of art theory, cultural theory etc. Now software doesn't just have to work, it has to be pleasant to use. But the current programming education doesn't address this beyond a nominal glance at "user interface design" with no consciousness of the thousands of years people have spent honing the ideas of design and art. And theres very little studying the masters, which is a mainstay of all other design and art educations. Instead there's a lot of mathematics. Mathematics (including much of what is currently called computer science) is obviously important in programming, but in the same way that physics is important in architecture. You need it to stop things falling down, but once you know that much you should move on to the more important things like making programs that people want to use.
You'll notice I've been beating up a "programming education" straw man, which is really computer science. It's not really computer sciences fault that it doesn't teach programming, the problem is we need a qualification that does
teach programming, specifically as a craft. I think a masters of fine arts is the right way to go. -- RobbieCarlton
See also: AcademicRelevance