views:

364

answers:

15

A post I read on Brad Abrams blog had this very question and I would love to get the views of the community.

Software is being taught as an engineering discipline in many universities, even though the field is so young that questions regarding what consitutes good design, in terms of what is measurable, cannot yet be answered all that well without simply resorting to good arguments and drawing from experience.

So, as it stands now; do you view software development as a discipline of engineering or as a discipline of arts, and what's your reasoning?

+2  A: 

I would say that it is a discipline of engineering, because of the strict mathematical foundations of computer science, but the practice certainly has a lot in common with the creation of art.

McWafflestix
A: 

Yes, I do.

Lasse V. Karlsen
A: 

It can be also seen as a craft.

See also: http://stackoverflow.com/questions/438670/programming-is-more-a-science-or-an-art-expression

seb
+11  A: 

Engineering.

It's like architecture in that it's got both function and form. It's unlike architecture in that it really does need to do its function well, but it's never going to be a tourist attraction merely because of its form.

kajaco
Is my misses' eggs benedict engineering too? That needs function, but if it looks like crap im not eating it.
Aiden Bell
@Aiden, your missus would be justified in telling you to cook your own darn eggs, considering where they're going to end up
kajaco
+3  A: 

I would say it's a combination of both. There are many that say that engineering principles rule and sure there are many aspects that could be considered scientific. But as many developers will tell you, there are often many right answers making solutions much more fuzzy than formal. So in that respect it can be as much of an art as a science.

BenAlabaster
+4  A: 

Both!

Software development is a subset of engineering Engineering because you are solving extremely technical and difficult problems that fall in the realm of hardware, math, science, etc...

SD is also an art, though, when you bring in code-formatting, OO design, etc... there are people that spend a ton of time trying to make the most elegant solution possible.

On any given day, you probably trend one way or another, but if you've ever re-formatted someone's poorly structured code, or complained because someone's CSS was all upper-case, you are arguing for style/art and not so much engineering. On the other hand, if you are trying to improve the running time of your O(n^2) algorithm by a constant factor to improve performance, you are falling into the realm of engineering.

Robert Greiner
+9  A: 

I think it is a craft.

Joel Spolsky made a powerful argument for software development as a craft

johnstok
Agree wholeheartedly with this. +1
Bayard Randel
+1 here also. It is a craft
mhd
+8  A: 

I'd class it as engineering, but engineering in the same vein as architecture. There are very strict limits on what can and can't be done.

I think it's worth bringing up my view that engineering isn't an absence of creative ideas, but more of a practical application of such creativeness. You can be a reasonable engineer by just quoting formulae etc, but you can only be a great engineer by having a creativeness and vision that could almost be classed as artistic :)

workmad3
In other words, just because you're an engineer doesn't mean you can't be creative with your work, to a degree.
Jagd
Yes, that's pretty much it :) You can be creative, but you still have constraints (in many ways, so do artists. They have constraints in the medium they choose etc). It's harder to get over the constraints in engineering though (no matter what type of rubber you use to change your drawings, you aren't gonna up the tensile strength of those steel girders...)
workmad3
+3  A: 

An art. Because you can achieve the same results in a multitude of ways ... some poetic, some ugly, some unconventional, some take time to appricate Just like art.

The degree of art/engineering is really down to the project. I suspect there is more art in compilers than writing a dry business application in Java. That said, if someone makes that business application beautiful then that is some form of art.

Or many the whole discussion is too hippy-tastic.

Aiden Bell
+1  A: 

Is architecture about design or function?

Many answers are not all black and white like being pregnant or not. Software development is design first, and then engineering second to make it work.

I think the two are inseparable.

Why? If you can build a shed without a blueprint, it doesn't mean you should build a house without a blueprint.

The design (blueprint) of a house is as critical from a usability and layout perspective as the materials, methods and processes employed to make it a reality. Which engineering methods, materials, systems or tools you employ make a big difference.

Jas Panesar
+1  A: 

It will remain a lesser kind of engineering until a practitioner risks losing his or her license for producing negligent code or for unprofessional conduct.

Thomas L Holaday
+1  A: 

The purpose of software development is to create useful artifacts that solve problems in the world. That's engineering. The disciplines of the arts create artifacts that are pleasing for their intrinsic properties, without regard to whether they do anything useful. That's beautiful code. It's also good engineering.

One of the paradoxes of software development is that if the code has good instrinsic properties, it is likely to be more useful for longer. In other words, writing beautiful code is good engineering.

That said, although I honor the artistic side and am deeply committed to artistry in my own work, I'm firmly in the camp that software is an engineering discipline.

Norman Ramsey
+1  A: 

Just the way the question is worded yields its answer. By that I mean, development is just that, something that grows, something that unfolds in an iterative manner in which the end is not predetermined or certain. (part of the reason for this is the plasticity of coding - as opposed to a process that requires manipulation of physical materials - which begets churn in requirements) This is the predominant approach employed in many a company in which the bottom line is watched much more closely than the quality of the product. As such, software produced this way is not the product of engineering. In the majority of cases it is too easy to make money in software without the added effort needed for engineering. Many who practice this approach find solace in calling it art.

Software engineering yields so much more than mere software development. Engineering involves the practice of science and mathematics (can anyone seriously say that all the code they've seen has involved the practice of these?). The degree of certainty engineering yields requires emphasis on design. Producing the code afterwards then becomes a matter of construction, rather than development.

References to craft seem related but misplaced. For me, a craft is something to learn and get better at. You hone your craft, whether it is cooking, bicycle repair, etc. or software engineering. Even if your approach to writing software is development it represents a craft to be honed.

yetanotherdave
A: 

Writing source code is a craft, making source code executable is engineering.

(I forgot the source of that quote, but it's not me)

Matt Hinze
A: 

Well, it depends actually, if you write a software:

Most people understand; Solves problem most people care; It's call engineering.

Most people understand; Solves problem most people don't care; It's call crap.

Most people don't understand; Solves problem most people care; It's call science.

Most people don't understand; Solves problem most people don't care; It's call art.

Generally speaking, art is something you don't quite understand the intention, but yet it doesn't really matter. No one ask an artist why he/she choose a particular color over the other.

Hao Wooi Lim

related questions