views:

579

answers:

14

Is software development engineering? If no, what are the things that it lacks in order to be qualified thus? AFAIK, there is a software engineering institute at the Carnigie mellon university, that prescribes and maintains the CMMI standards. Is that something that will turn development into engineering?

Also, what is your opinion on the software engineering courses/certificates?

See Also

You might also look at this post about developer/engineer

+4  A: 

No, it's not engineering. We're not that scientific and we don't have to pass any of those state engineering tests. In fact, it's illegal to call yourself a software "engineer" in some places due to that lack of testing.

Brian Knoblauch
Actually, it depends where you live. In Quebec, you cannot call yourself a software engineer unless you have an engineering degree, pass exams, etc...
Kena
Provide proof, please.
Thomas Owens
Kena
Depends what you're doing. There are software engineering degrees that qualify for P. Eng designation. If you're building software to control nuclear plants or send someone to mars then you're probably actually going to need to be an engineer.
tloach
The reasons that most engineering societies do not recognize SE is political and economical: very few universities give out a degree that is officially in software engineering. At best, you can minor in it or do a master's degree.
Uri
+8  A: 

Software development does not have to be software engineering. If you apply technical and scientific knowledge that utilizes natural laws, physical resources, and computer science knowledge to design and implement a software or software/hardware system, then you are engineering.

Thomas Owens
+1  A: 

From Dictionary.com: en·gi·neer·ing /ˌɛndʒəˈnɪərɪŋ/

–noun 1. the art or science of making practical application of the knowledge of pure sciences, as physics or chemistry, as in the construction of engines, bridges, buildings, mines, ships, and chemical plants.

I would say that creating software is the practical application of math and computer science, and potentially of any other number of pure sciences depending on the application.

[EDIT] FWIW, I don't call myself a software engineer, but a software developer so I don't have a personal stake in this.

tvanfosson
A: 

Yes, one should be able to apply standards and principles to arrive at a decent product. What makes it difficult is the mindset of the client (it's just code - it shouldn't cost that much to change), the extreme difficulty in codifying what the product should do into machine code (spoken/written language to code) and quantifying "quality". Your definition of quality isn't mine.

It's also repeatability. Take a set of requirements and give it to two teams. When you can get the same thing out (without the teams talking to one another) you're pretty close to engineering.

Other areas of engineering also have penalties and a rigid review and sign off. Accountability.

jim
A: 

IMHO the term 'software engineering' was coined to try to better describe the range of things a developer does, rather than just being a 'programmer' (which has overtones of some mechanistic process with little thought or creativity).

Personally I prefer the emerging analogy of a developer as a 'craftsman', championed by the pragmatic programmers, among others.

Historically, people have tried to analogise software creation with manufacturing. I think Jack Reeves made a pretty good argument to discredit this idea in his article What Is Software Design.

johnstok
+3  A: 

In my view a Software Engineer and Software Developer are two different things.

I see a software engineer as one who does planning, such as what life cycle will the development take, doing requirements/specifications, etc... Basically, a software engineer deals with lots of documentation. This can be accomplished by a software developer and/or project manager.

A software developer would be more closely related to a programmer but with more skills in other areas like database management, etc..

One interesting thing to bring up is Architecture. Someone who is also involved in figuring out what hardware/software will be needed for the life cycle of the project.

avgbody
I believe software development is one of the categories in software engineering.
LWoodyiii
+4  A: 

I would argue that there is indeed such a thing as software engineering.

Engineering involves the systematic application of scientific knowledge to the solution of problems. The complexity of problems that are tackled today are not that different from those tackled by an electric engineer in creating a circuit or a chemical engineer in devising a manufacturing process or a mechanical engineer in the creation of a device.

The fact that there is also a hands-on approach of applying existing plans (development in this case) is simply similar to the fact that in other fields somebody else executes those plans (e.g., the construction worker).

It is true that most developers also carry software engineering tasks, and that our education is often not in programming but rather in software engineering. So we get our hands dirty whereas a civil engineer would not.

However, the ability to apply a programming language and program does not turn one into an engineer: I have met my share of developers who lack a true understanding of the complexities and issues outside their current piece of code.

As for your question regarding CMU: Application of a standard or practice (e.g., CMMI) does not automatically turn a person's work into engineering. However, the fact that there are organiztions which carry out scientific research to provide new practices is again a sign that there is such a thing as engineering.

Uri
+2  A: 

I'm going to go with "No" here. My brother is a mechanical engineer, and he describes engineering as "The Art of Being Cheap":

"Engineers are more concerned with getting things done as fast as possible, at the lowest cost possible, with the fewest materials possible."

In reaction, I've come to describe software development (not software engineering - they really are fundamentally two distinct fields) as "The Art of Being Efficient":

"Developers are more concerned with getting things done as fast as possible, at the lowest cost possible, with the least amount of repetition possible."

The difference is in the last part of those sentences.

Lieutenant Frost
Good view on the concept of "Engineering", funny and true.
avgbody
I'll let him know that someone else agrees with him - he should be pleased. :D
Lieutenant Frost
I have to disagree with that at least in some cases. I know people who work for the aeronautics industry and NASA who would put a lot of properties first before cheapness.An engineer is good at balancing needs.
Uri
Sounds like a terribly jaded opinion to me. Can you back up with fact?
Jeremy
Wait...I'm confused. Whose opinion sounds jaded? Mine or my brother's?
Lieutenant Frost
A: 

By the way, the benefit of certificates (like degrees) depends on their quality and prestige. Recognized academic institutions that run onsite programs are better than remote degrees and "affiliated" degrees.

In other words, if you go to the university of southern Latvia to get a degree or certificate from an affiliated program run by MIT, it is not an MIT degree...

I can personally vouch for the software engineering masters program at CMU, it will give you the same breadth in engineering that an MBA from a top school will give you in business.

Uri
+1  A: 

Is software development engineering?

No. Being an engineer means your project follows a cause-and-effect timeline - you follow the building codes, therefore your building doesn't fall down (or at least you can't be blamed if it does). Writing software, you can follow all the guidelines going (and there's so many different ones to choose from!) and it still might hang/crash/give wrong answers (unless you're involved in the remarkably small field of writing provable programs in side-effectless functional languages).

David Hicks
I live a couple of miles from the 35W bridge that failed catastrophically about a year and a half ago. Being an engineer doesn't mean you're immune to screwing up.
David Thornley
+1  A: 

I see an engineer (mechanical, structural, software) as someone who designs the product beforhand based on the understood needs and an understanding of what and how to apply the materials to accomodate that need.

For example, you may often see a structural engineer looking up different strengths of steel and applying rules of physics to calculate materials required and how they should be implemented. Structural engineering is a prime example because you always end up with a blueprint (specification) of what you're going to build before you build. That doesn't always happen with software.

To me the difference of a software engineer and a programmer is that the engineer is capable of building the specification for what will be produced before writing any code, where a programmer either just writes the code based off someone elses specifications, or is one of those wild west programmers who writes code without specifications. As well, the engineer has his degree.

I liken the difference between a construction worker and a structural engineer to the difference between a programmer and a software engineer.

To clarify, I only have a college diploma, so can't call myself an engineer.

Jeremy
It's not always possible to come up with a specification before coding, and I can make a good argument that coding is designing the product. In software, manufacturing copies of a finished product is trivial.
David Thornley
+1  A: 

No. Software Engineering is not engineering. In my opinion, the difference is in the amount of creativity involved. In Civil Engineering, for instance, there can be very little or no creativity. This is a good thing.

To construct a bridge, you have a set of specifications (I need to get this number of cars from this side of the river to the other side).

From this, I can deduce:

  1. the number of lanes of road I need (using a standard calculation defined by the government);
  2. the loads I will need to support (using calculations defined by the government)
  3. the materials I need to use to support those loads (using either standard materials, which I can get from a number of different suppliers, or non-standard materials, which I then have to prove will have the correct properties).

Then, I must get the design approved and checked by a third party (another company) to ensure that I've done my calculations correctly.

Then, when the bridge is actually constructed, the work will be done by qualified people in a standard way. They will be doing work that they have done hundreds, maybe thousands of times before.

Don't get me wrong, every civil engineering project is different, but it seems every time I develop a new application/website, things get done differently.

MatthieuF
+2  A: 

Coming from a typical engineering background, but making a career in software development, I see large similarities between both worlds. Apart maybe from the exact definition of engineering, I see in practice that developing software is not that different from developing a physical product. At least I think it should not be very different.

Whether you design an aircraft or a software application, for both you need to:

  • make designs
  • define subsystems and components
  • make prototypes
  • specify and execute tests
  • etc.

I read somewhere in an other answer that designing software is different because you do not design everything before you start programming. Well actually to a lesser extent that is also the case when you design a physical product. Designing and prototyping and testing is an iterative process.

Also when software projects grow in size it gets more important to define clear subsystems, components and interfaces which is also similar to designing complex products such as an aircraft.

That is why I consider developing software to be engineering.

Roy
Thanks for sharing your experience, many "developers" have no concept of what engineering really is. Cheers!
LWoodyiii

related questions