A few months ago I asked the question, “Is Software Development a Science or Art?” and opined that while it has elements of both, it is perhaps at least as much art (or as I put it, craft) as it is science, and that this craftsmanship aspect of it is too much overlooked.
The February 2007 issue of Computer published an article by Raghavendra Rao Loka that basically agrees with my thesis. It has been a little slow reaching the blogosphere because the article is readily accessible only to IEEE members; if you aren’t a member you have to pay $19 to read it. I have to confess, I’m too cheap to read it myself, and have never seen the point in an IEEE membership; but it isn’t hard to follow the “Is too! Is not!!!” debate that is now developing. Here is the core of Loka’s argument as quoted by someone who sprang for either the membership or the article:
Many developers view software development (…) as a science or engineering activity(…) Writing software is neither: I view it as a craft or art, similar to the work required of teachers and writers. (…) So it’s not clear why we call software development software engineering. (…)
No less a personage than Steve McConnell, of Code Complete fame, who probably needs no introduction to most of my readers, was moved to write a letter [PDF] to Computer objecting to Loka’s essay. Now I have a lot of respect for McConnell, as evidenced by my having bought and read both editions of Code Complete over the years. But I can’t agree with his assertion that this question is beyond debate and that it has been established beyond doubt that software development is an engineering discipline.
Certainly, as Loka mentions in his response to McConnell, there are many disciplines supporting software development that can be called engineering. But Loka asserts that the actual act of writing and maintaining code is not an engineering discipline. Even McConnell, in his letter, has a Freudian slip and says, “The issue is educating practitioners and bringing them up to speed on the current state of the art.” There’s that naughty word creeping in there again!
HackNot has come out against Loka as well, but methinks he, like McConnell, doth protest too much. He ends up likening the engineering side of the argument to the ancient Romans, and the agile / craftsmanship ethic to the ancient Greeks, and suggests what’s really needed is a hybrid approach.
As McConnell acknowledges, huge edifices have been erected to the fantasy that software development really can be pure software engineering. Yet even proponents of the idea have trouble denying that software development has at least some subjective, artistic, qualities of a craft.
I’ve seen efforts to reduce development to an equation come and go; it will no doubt always be the Holy Grail of the profession, and just as elusive.
{ 5 comments… read them below or add one }
To me the question seems a little misguided. If you ask whether X is “science or art”, you’re making an unfair assumption that nothing science-related can be art.
I think that *all* the engineering disciplines can be artful. Math proofs can be art. Architecture can be art. Physics can be art. In the same vein, programming can be art.
With that in mind, the question “is software science or art” seems to really ask, “is software significantly more artful than the other disciplines of science?” To that I’d have to answer no.
Is it possible that this is a subjective, mostly pointless debate over affinities? Those that stress the rigorous and disciplined aspects of programming will go for the term engineering, those that like the creative problem-solving and the sudden insights will prefer to call programming an art.
I’m probably in the second camp — but in the end, who really cares what we call it. It’s fun.
Marijn, I disagree that it is a matter of opinion. Either you can engineer a software project, or you can’t. If you can engineer it, then you can predict how long it takes and you can control its quality, you can standardize the projects, and so on. Or you can’t.
Either the engineer processes work or they don’t.
As far as I can tell, the sole engineer process that works is testing. Everything else is a waste of time. Hiring great programmers is the only thing that will save you.
I have to agree with Daniel. I started my career in software before I achieved a degree ( it was much that way with many of us “back in the day” or it’s called ). We had formal training ( I’d was already a junior in college when I got my first REAL paying programming job ), but then came along this concept of “Software Engineering”. And frankly I have to admit to “falling for it”, because my present title includes the said “engineering” word in it.
So when I decided to go back to school and finish my degree, one of the “new” requirements was a Software Enginering class. Software models this, metrics that. Disemination, disemination, more like decimation. Decimation of most creative processes that take place in the practice ( why do we call it practice when we already know what we’re doing ? Practice makes perfect ? But I digress. ) of designing, implementing and maintaining software. Along what an earlier responder wrote, to my best estimation the process of Software Testing or Validation and Verification is mostly suited to having the “Engineering” term applied to it, because therein, those processes are is tied to input -> output, action -> reaction. In this age of Design-by-Contract, know your interfaces development, I know that there isn’t a single development organization where at least ONE developer/architect/coder hasn’t had to resort to some “Craft” to “magically” bring things together to work.
I got an A in that Software Engineering class, but boy was the whole ordeal fubar hoo-ey.
Development is clearly and only a craft. Is carpentry engineering? The architect would like you believe that it is but the experienced carpenter knows better. Likewise, you can teach people engineering and expect that if they have enough intelligence they will ‘get’ it. The same is not true about developers. How many people have you worked with who were brilliant but couldn’t program their way out of a paper-bag? (BTW – I say craft only because art and science are not craft! (- takes all 3 to make a civilization.))