Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Can software development be considered engineering? If no, what are the things that it lacks in order to be qualified as an engineering discipline? Related to this is this question on Stack Overflow about the difference between a programmer and a software engineer.

There is the Software Engineering Institute at Carnigie Mellon University that prescribes and maintains the CMMI standards. Is this something that will turn development into engineering?

share|improve this question

migrated from stackoverflow.com Sep 28 '11 at 9:42

This question came from our site for professional and enthusiast programmers.

show 2 more comments

22 Answers

up vote 20 down vote accepted

Is software development engineering? If no, what are the things that it lacks in order to be qualified thus?

Software development does not have to be software engineering. I have a degree in Software Engineering and consider myself to be an engineer, however not everyone sees it that way, either as individuals or as organizations.

Wikipedia defines engineering as the application of "scientific, mathematical, economic, social, and practical knowledge, in order to design and build structures, machines, devices, systems, materials and processes that safely realize improvements to the lives of people." The end result of software engineering is a software system that can safely improve the lives of people, and it can involve some combination of scientific, mathematical, economic, social, or practical knowledge.

In terms of how it's viewed, academically and professionally, it varies. Software engineering programs can be accredited by ABET as engineering programs. Software engineers can be members of the IEEE. Some companies consider software engineering to be an engineering discipline, while others don't - it's a toss up, really.

The best book on this subject is Steve McConnell's Professional Software Development: Shorter Schedules, Higher Quality Products, More Successful Projects, Enhanced Careers. It looks at software engineering as a profession, evolution from a craft to a profession, the science of software development, the difference between software engineering and software engineering (applying engineering practices to software versus engineers who happen to build software, with a case study that includes my alma mater), certification and licensing, and ethics.

Is that [CMMI] something that will turn development into engineering?

No. CMMI is a process improvement framework that provides guidance to organizations on what kinds of activities are useful when building software. Engineering disciplines typically have an engineering process. Having such a process is important for the successful completion of high quality projects. That said, the CMMI (or any other process framework or methodology) is just a single tool - using it won't make you magically advance from a developer to an engineer. However, not following some kind of process is, in my opinion, a sign of a project that is not an engineering project.

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

It's only as much value as other people put into it. There are useful courses and there are useless courses. There are valuable certificates, and certificates that aren't worth the paper they are printed on. There are a lot of factors, from who is endorsing or accrediting the course or who is issuing the certificate to your current industry of employment to your current job and where you want to go.

share|improve this answer
add comment

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.

share|improve this answer
2  
Thanks for sharing your experience, many "developers" have no concept of what engineering really is. Cheers! –  LWoodyiii Jun 1 '09 at 0:42
add comment

Generally speaking YES, meaning that academically speaking you'll find courses in Software Development and Software Engineering with exactly the same subjects - but people with too much time on their hands are cyclically killing each other about this.

Have a look at this good article on the subject (from the IBM archives) and get your own idea.

Code Complete is pretty much the de facto reference for Software Construction.

share|improve this answer
add comment

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.

share|improve this answer
add comment

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.

share|improve this answer
1  
Here it is, from the Ordre des ingenieurs FAQ. oiq.qc.ca/cgi-bin/… –  Kena Oct 16 '08 at 17:52
2  
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 Oct 16 '08 at 17:57
show 4 more comments

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.

share|improve this answer
show 1 more comment

From Wiki:

Engineering :

Software engineering is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software.

Software Development

Software development is the set of activities that results in software products. Software development may include research, new development, modification, reuse, re-engineering, maintenance, or any other activities that result in software products.[1]

Especially the first phase in the software development process may involve many departments, including marketing, engineering, research and development and general management.

So they are pretty similar and can also mean the same thing.

share|improve this answer
1  
My function name actually contains "software development engineer"... really confused now :s –  fretje Jun 14 '09 at 20:07
add comment

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.

share|improve this answer
add comment

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.

share|improve this answer
show 1 more comment

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).

share|improve this answer
1  
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 Jan 26 '09 at 21:25
show 2 more comments

This is subject to interpretation, so here's mine.

Software Development refers to the stage(s) of a SW project on which you move from ideas (requirements, specifications, architecture, high level design, etc) to the actual materialization of those ideas. I didn't say "coding", because while making some design choices before coding, you are somehow actually making, like it or not, some implementation assumptions that may have an impact on coding. Therefore, I would consider them as part of development per se. For a good understanding of Software Development, I'd recommend Code Complete.

On the other hand, Software Engineering (from Wikipedia) "is the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software". Engineers apply knowledge to solve practical problems. One of those problems may be the construction of software, another its maintenance, its deployment, operation, etc. From the same author of the book above, here is a good column for understanding what Software Engineering is.

share|improve this answer
add comment

IMO, Software development is subdiscipline of software engineering.

Engineering dealing also with the consequence of the developed software.

As already said, knowing or not knowing the difference between the two concepts, is of little importance.

share|improve this answer
add comment

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.

share|improve this answer
2  
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 Oct 16 '08 at 18:31
show 4 more comments

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.

share|improve this answer
1  
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 Jan 26 '09 at 21:35
show 2 more comments

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.

share|improve this answer
add comment

I wouldn't consider the term "engineering" as the most appropriate to describe software development, for 2 main reasons :

  • It conveys a lot of old ideas, concepts and so-called "golden rules" originating in traditional engineering disciplines such as industrial, civil, naval, or mechanical engineering. I'm talking about rules in labour division, production processes, quality standards... These most often only marginally apply to software.

  • It fails to describe in a satisfying way what programming has more than other disciplines (and I believe it has a lot more and a lot different), and what new challenges developers have to face on a day to day basis compared to their counterparts in traditional enineering domains. Software's virtual and immaterial nature plays a huge role in that.

Software development has long been seen as "just another engineering discipline". Considering the failure rates of software projects we have known ever since they were measured, it's high time we recognized develoment as an entirely new animal, code as a really special material and application lifecycle as a totally different kind of production cycle, and stop desperately trying to apply old recipes to them.

share|improve this answer
add comment

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.

share|improve this answer
add comment

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.

share|improve this answer
add comment

Yes I'd guess that development is a subset of engineering:

  • Software engineering includes the initial specification ("what kind of software do we need here?"), which arguably precedes the development
  • "Engineering" might also include e.g. defining the Quality Assurance Process, which is certainly related to development but also arguably outside the scope of the 'construction' itself.

Code Complete defines "construction" as being synonymous with coding and debugging (and commenting), also with detailed design before-hand and with unit- and integration-testing afterwards. Chapter 1, Welcome to Software Construction (PDF) starts by listing many topics in the overall Software Development Lifecycle (including Problem Definition, Software Architecture, Corrective Maintenance, etc.), and then says,

As the figure indicates, construction is mostly coding and debugging but also involves detailed design, construction planning, unit testing, integration, integration testing, and other activities. If this were a book about all aspects of software development, it would feature nicely balanced discussions of all activities in the development process. Because this is a handbook of construction techniques, however, it places a lopsided emphasis on construction and only touches on related topics. If this book were a dog, it would nuzzle up to construction, wag its tail at design and testing, and bark at the other development activities.

share|improve this answer
add comment

Software development and software engineering go hand in hand when it comes to the implementation of software. Software development deals more with the creation of the software and when this is complete, software engineering takes over with the creation of software systems. Both of these disciplines are at times interchangeable and without much difference to the layman. If you just want to have one specific piece of software designed, such as database software that will keep track of your bird watching hobby, then you'll just need software development. joomla Developers

share|improve this answer
add comment

Software development is engineering.

A few arguments made by others for why software engineering does not meet the standard of engineer:

Some say engineers are in the business of designing "things" for the public good - are ICBMs, Tanks, etc in the public good? Some would say yes (a good offence is a good defense) others would say no. However, I don't think anyone would disagree that the guy who designs the next generation tank targeting system is an engineer. Public good can be subjective. At any rate plenty of software is in the public good so the point is moot either way.

Others say engineers design they don't build. I have seen several "mechanical engineers don't weld" type comments. I would argue that mechanical engineers produce blueprints - detailed designs that something else implements. If a mechanical engineer produces a blueprint and feeds that to a CNC machine does that make them no longer a mechanical engineer - because a machine did the implementation instead of a person? I would argue that source code is a detailed blueprint that is fed to a machine that does the implementation and I fail to see how that is any different than a MechE feeding code to a CNC machine. And we now have 3d printers, does that signify the end of mechanical engineers? Are they now mechanical developers?

Licensure is the other topic that I see come up. Currently only a few jurisdictions license software engineers. There is (so far) no US wide licensing of software engineers (I think only Texas does so). Some have used this as a reason to state that software engineering should not be called engineering. The PE for software engineers is coming. But on a more philosophical level just because some state legislators choose (or not) to call software development engineering has no effect on reality.

share|improve this answer
add comment

I think it depends from company to company what a software developer and a software engineer is. At my company for example are all developer called software engineers. But everyone does different thinks. Some more in the direction of software developers and others in the direction of software engineers!

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.