views:

766

answers:

11

The field has been just (relatively) recently been recognized in North America and Europe. However, in other areas it's still not being taught at all. There is also still a lot of controversy and debate regarding the profession.

  1. How do you think the discipline compares with other engineering fields?

  2. What are the good practices (Agile vs. Waterfall, RUP vs. Agile, etc...)?

  3. Would you put the profession at the same level as mechanical or electrical engineering? If not, what are the main things missing for it to be mature?

  4. Do you think there should be a rigid process behind software engineering (as defined by guides such as SWEBOK) or are you against this (against SWEBOK arguments)?

+28  A: 

No. For a decent read on this subject, see Steve McConnell's After the Gold Rush.

A few points:

To have a mature field in anything, we have to first define what that field is -- which, we haven't really done. As McConnell points out, there are two main points of view, software engineering^ and software engineering^^. As the field matures, these two viewpoints will come a bit closer (or perhaps one will be redefined).

In a mature field, the well-known best practices are disseminated among the various practitioners, and there is some sort of measurement to gauge whether those practices are being followed. As the SEI report on process maturity points out, the majority of companies have a way to go in adopting best practices.

In a mature field, the public has some level of protection between the practitioners and themselves (in particular where the public's health is at risk) -- usually in the form of certification or a professional license (e.g. doctors, lawyers, professional engineers). This doesn't yet exist in the United States, except in Texas.

In a mature field, there is a well-established curriculum for obtaining the knowledge required to successfully work in industry. While there are about 17 universities in the United States that are accredited by ABET (the Accreditation Board for Engineering and Technology), and that is about 17 more than we had seven years ago, we still have a ways to go.

And, a mature field has an established code of ethics. The ACM wrote a code, but there are no "official" consequences if one violates it, and I'm not aware of any public tests written around it / requiring knowledge of it.


^ software engineer: Someone "trained and educated to use an engineering approach to develop computer software."

^^ software engineer: "An engineer who has received special training in software development."

Source: After the Gold Rush. McConnell. 1999. p 114.

GreenReign
+1 for immediately hitting on the right source.
Steven Sudit
What would be the code of ethics in civil engineering?
Treb
@civil engineering: Usually building shit so that is doesn't break is considered a good path to follow.
Sneakyness
+3  A: 

Software Engineering is NOT a mature discipline.

My view is that Software Engineering is not a true Engineering discipline.

Software development is an combination of Math, Engineering, Art, Psychology and Philosophy.

Unfortunately the state of the art in Hardware and Software changes so rapidly, I don't think we will even be able to keep up. As long as we are behind the curve, the "discipline" will not be able to mature.

Jeffrey Hines
The book that GreenReign mentioned argues that it's NOT a mature engineering discipline, but could and perhaps SHOULD be. Frankly, I for one would be thrilled if it became a true profession.
Steven Sudit
I disagree that change in software engineering prevents it from maturing. For example, though materials improve, mechanical engineering remains engineering. Software engineering has some constants, even if technologies change: basic algorithms, data structures, encapsulation, and abstraction remain, even when languages change.
Chip Uni
Development of software products is an engineering discipline, although a very young discipline. Tools change, but principles do not. Steve McConnell has a lot of good reading on the topic.
Dima Malenko
+4  A: 

Civil and Mechanical engineering have been around for thousands of years; the Romans took Civil engineering to a great peak (Vitruvius) but the Renaissance raised the bar again (esp. with Alberti and Palladio). Mechanical engineering was long confused with Civil, but, albeit slower, it kept progressing too, and exploded in the last few centuries.

Software engineering has been around for sixty years or a tad more. How could it possibly be as mature as a sister discipline with many thousands of years' (or even "just" many centuries) worth of accumulated history and experience?

Electronic engineering is my own field (originally, I've been doing software rather than hardware for decades now;-) and somewhere in-between -- a bit more than a century, rather than half that or an order of magnitude more. Least you think it's "mature" check out e.g. The Pentium Chronicles: The People, Passion, and Politics Behind Intel's Landmark Chips. As I read and enjoyed it, it reminded me a lot of the big software projects I've personally lived though!-)

And btw to give you a better idea of what it means for a field of engineering to be "mature", try High Steel: Building the Bridges Across San Francisco Bay about a specific aspect of Civil engineering (the bridges of the San Francisco Bay Area) -- this, too, may help put things in perspective (perhaps together with reflections on the tragedy of that Minneapolis bridge over the Mississipi that collapsed so recently -- unfortunately I have no book to recommend on THAT yet).

In proportion to how much engineering is ambitious, it's only very relatively "mature", whatever the sub-branch -- ambitious projects, be they bridges, microprocessors, or software systems, demand experimentation, risk, novel approaches. Thousands of years of civil engineering -- as mature as it gets -- will help you only marginally if you're the first audacious engineer putting up an all-steel suspension bridge, say... or, whatever tomorrow's bright new star in the field of Civil Engineering will be. Software isn't all that different -- if you're doing "one more churn" of something that's been done a zillion times before (yawn;-), you can already rely on a few generations' collective experience; if you're doing drastic innovation... you're mostly on your own: good luck!-)

[[As I mentioned, I'm an electronic engineer working mostly in software -- I have many relatives and friends who are Civil or Mechanical engineers, and a keen interest in the history of engineering (and science, and maths, and just about anything else besides;-), and these personal interests and connections, as well as reading over and over everything ever written by Vitruvius, Alberti, and Palladio (etc;-) is how I came to develop these opinions.]]

Alex Martelli
A: 

Would we even agree what software engineering is, much less whether it is mature? Unlike most other engineering disciplines it still lacks a common core knowledge that all would accept as being 'common' or 'core'.

However, moves to develop an 'engineering mindset' in SE University courses gives room for optimism that SE will become another engineering discipline in years to come (see for example the recent article by Ewan Tempero "Software Engineering & Computer Sciences - Two Worlds' in ACM SIGSOFT Software Engineering Notes, Volume 34, Issue 3 (May 2009).

mas
A: 

My major, gained over a decade ago, was in Software Engineering. The field wasn't mature then, and isn't mature now.

YogoZuno
+1  A: 

Software engineering IS a mature decipline.

Software engineering in the context of "software development" has much in common with art. Like an artist who is given a canvas, a programmer is given a theoretically perfect, controlled environment to build his work in.

Like an artist, he/she could choose to use tools designed by others... or he/she could build his own tools, or even use his fingers.

He/she follows methods and styles set down by others, or he/she could make his own rules.

The quality of a product created by a programmer, or a team of programmers is determined by the tools that they chose, the styles that they adopt, and the individual ability to produce quality code.

Civil engineering: in the context of producing unique structures, is similar to what programmers do -- they would ignore established conventions and create new processes.

On the other hand, the process of setting up a wordpress installation, configuring a vanilla ERP, or writing an excel formula is like building a house... There is an obvious, known, accepted and 'easy' way to do it.

The difference between software development and other engineering desciplines is that the software engineer who writes excel formulas sometimes doesn't undergo as much training as a civil engineer... because software failure is less serious than structural failure.

Alterlife
+1  A: 

I wouldn't call it mature. I'd say it entered puberty somewhere around the dot-com boom. :)

I have to say though that in my opinion, many people mistake rapidly evolving science with immature science. Look at the recent physics, or even better, biology; they've existed for ages, you couldn't actually say that they're immature, and they're practically redefining themselves recently.

Domchi
I'd say it entered toddler-hood about the time of the dotcom boom!
KevinDeus
+1  A: 

Nope. An analogy would be that we are practicing alchemy (emerging discipline with lots of "folklore") rather than chemistry (matured/formal discipline with outcomes that can be proven before implementation). Here is an interesting read on the subject: Prospects for an Engineering Discipline of Software by Mary Shaw.

Daniel Auger
+2  A: 

The engineering disciplines evolve from ad hoc state in two steps. Initially, talented and passionate amateurs pioneer the discipline. They achieve their goals by all means necessary – usually irrationally using available resources. Later the routine production occurs. With time the need for advancement arises and supporting science for an engineering discipline emerges. The maturing science eventually turns into a “professional engineering practice,” where science will become the main driving force of a discipline.

Software Engineering: The Evolutionary Discipline diagram

joe
+2  A: 

No, it's not, nor am I convinced you would ever really want it to be.

When I think of attempts to "turn software development into a mature engineering process", I think of Carnegie Mellon's Software Engineering Institute (SEI) and their methodologies such as the Personal Software Process (PSP) or the Capability Maturity Model (CMM).

PSP and CMM are just pure crap. I've never encountered a single software engineer who actually found them useful in the slighest.

These approaches mean well, but they are just fundamentally wrong, and that's where the disconnect lies.

Software engineering is far more about craftsmanship, creativity, and artistry, than it is about "mature, established engineering". You learn your craft by practicing it, applying it. Not by reading up on some "official manual" or "official process" for software engineering.

Saying "software engineering is now mature" is like saying "the artistry has been exhausted; there's nothing new to be tried or learned". That's just impossible, by definition. Especially in a field whose essence is "the manipulation of pure thought-stuff"

Aaron F.
+1  A: 

Notkin, Gorlick & Shaw's report against SWEBOK sums up the situation nicely: http://www.cs.washington.edu/homes/notkin/bok_assessment.pdf

ja

related questions