A public forum for discussing the design of software, from the user interface to the code architecture. Now closed.
I'm trying to find out whether it's right to call software development "Engineering" or not. Is this misuse of the word?
Isn't an engineer originally someone who runs a train or builds and repairs engines and such?
I'm not from an english speaking country myself, so please have me excused if I'm totally lost here. (but please tell me if I am!)
In that sense, the only engineers would be the ones who design and build engines.
Merriam-Webster dictionaty says:
"Engineering: the application of science and mathematics by which the properties of matter and the sources of energy in nature are made useful to people"
So, I believe that when software is developed following certain *proven processes and techniques* based on mathematical analisys, and produces usable applications on a machine (the computer), yes, it is Software Engineering.
I would use this analogy:
Civil Engineer is to Software Engineer what a house builder is to Software Developer.
Almost anyone be a bricklayer, in the same way almost anyone can be a 'software developer' ((it only takes to know how to write a hello world program and invoke a compiler to *develop* some software) just consider the Microsoft Express line of IDE's and products)), but laying bricks and running a compiler is not engineering.
For instance, the people at SEI ( http://www.sei.cmu.edu/engineering/engineering.html ) have a collection of best practices and methods based on analysis of past software development projects and experiences that constitutes what they think it takes to make software 'the right way'.
So, I think there is a 'Software Engineering practice', but most of us do just software development most of the time.
My 2 cents
I actually have a degree in Electrical Engineering and software development is an art.. not a science.
There are some scientific/mathematical principles that underlie some of the concepts, but it's just as much about opinion/preference/taste of the boss/client/developer than anything else.
For hardcore CMM-5 shops, I might be willing to call it "Engineering", but I personally believe that much of the CMM system is just to cover up the opinion/preference/taste factor.
I agree with KC, but I believe the artish aspect of software development comes from the fact that we are already in the primitive stages of software crafting.
When primitive tribes built their houses and facilities I bet they weren't ding any engineering design and analisys, but just doing craftmanship work.
In short: I think we are still discovering how software should be done.
I really hope that this changes over time.
Maybe It wont and we're screwed.
I work at construction company and I avoid the term engineer. An engineer in construction has to be licensed. Likewise I avoid the term architect. Those guys don't like how people in our profession just bestow those titles upon oursleves.
So I also vote for Software Developer.
As I understand it, software development isn't strictly an engineering discipline. But it's generally accepted as one.
Brent P. Newhall
Thursday, September 30, 2004
Same guy that recently interviewed Joel has a really interesting interview of Alistair "Agile Development" Cockburn. Cockborn describes the genesis of the term "software engineering" and it turns out to be quite interesting:
I am a Civil Engineer.
And I am doing software development, analysis, requirements, you name it in my own business.
Does it qualifies as software engineering ? :-p
I find that having been tought some hard facts and methods in civil engineering have helped me in developing structured tought & durable focus on the issues I've to deal with (less sloppiness than what I experience from the guys I am working with).
So, working in a structured way (using requirements, design specs, etc) is my way of working and proves to be very useful in the long run.
Does it qualifies as engineering ? Maybe but it has nothing to do with hacking formulas ...
Friday, October 01, 2004
While I prefer the term "Software Engineer", probably "Software Developer" is more accurate. Yes, software as an engineering discipline is still evolving and developing. It's more a craft-work industry right now. This also means different people have very different ideas about what you are saying when you say "Software Engineer".
Also, there are NOT any 'Professional Software Engineer' certifications -- and at the current state of the art, there shouldn't be any.
As a result, "Software Developer" will say more about what you know how to do to more people than the term "Software Engineer".
Friday, October 01, 2004
And, regarding the "Train Engineer" comment:
It is not wrong to use the term Software Engineer. There are Chemical Engineers, Civil Engineers, Mechanical Engineers, Aerospace Engineers. Each understands (hopefully) the principles and factors of the domain they work in. Each should be able to design a system that works using those principles and factors.
There are people who can and do treat Software Development (the more general term) as an Engineering descipline. So, it is not wrong to use the term Software Engineering. It's just that the descipline is evolving so fast people will argue over the meaning of the term.
Friday, October 01, 2004
To be called any of those (Civil, Chemical, Electrical, Mechanical, etc), you have to go through a pretty specific curriculum.
To be *legally* an "Engineer", you actually have to take a test (usually while in your last year of study), demonstrate proficiency in the field, and then take another test.
Calling someone who does not have formal training or has not demonstrated proficiency or has not mastered certain concepts or all of the above should not be called an "Engineer".
Would you call a knife-weilding murderer a "Surgeon"?
This is not well handled in the English speaking world, or at least the Anglo/Celtic corner of it because the word originated there via Old French "engin" from the Latin "ingenium" = skill and originally meant sappers, ie army engineers, then was extended to peaceful purposes with the prefix 'civil'. Further specialisations followed.
Unfortunately, the American dialect adopted engineer for the lofty profession of engine-driving (as known elsewhere) with knock-on debasing effects amongst the english-speaking public worldwide.
Other cultures reserve the term for the qualified professional in their language. This is particularly true in Europe and in Japan, where engineers enjoy social parity with medical doctors and those invidious parasitical pests, lawyers.
My business card says Software Engineer. I have both engineering and IT qualifications. I don't see a problem with using Engineering and Software together, it shows a commitment to standards and quality, and ultimately the market decides what words mean in our chaotic, evolving and richly rewarding language.
Friday, October 01, 2004
It's all just words and titles and who you want to be, but I'll add this.
An engineer in any scientific discipline is able to design, build, and operate an engine or structure. Physical or virtual, that engine/structure is designed using proven methods, documented in a format that can be understood by peers, and uses resources that have been tested and/or found to be suitable for the purpose. The end goal is a system that gets the job done and gets it done nicely.
None of the above precludes creativity and craftsmanship, but the purpose determines the level of each. Designing engine management software for a consumer car requires hardware and software materals and methods that fit the market: low cost, volume production, robust, easily serviced by technicians. The engine management system for a Formula One car is based on completely different requirements: harsh environment, traction control, and a "rule book" that must be obeyed (or bypassed with great stealth).
But there are similarities in the approach to either problem that indicate the use of "engineering" principles: first, identify what needs to be done, then determine the resources available to do it. Lay out the approach, start documenting high level design strategies. Do some experiments and jot down the results. Now you have enough info to come up with some prototypes to test your ideas. From there, a formal design and accompanying test plan can be written and project planning can begin.
An important element: can another "engineer" pick up where you left off if you get hit by a bus? Adherence to well-defined engineering disciplines (i.e., process and docmentation) can help. Unfortunately, software engineering is a mixed bag in that regard. (I suppose mechanical engineering, with it's diversity of CAD software, is too.)
Some things I believe are necessary for software engineering:
- Being able to analyze code as if it were data. This is necessary for engineering because right now our tools are very clunky for analyzing code -- the very thing we work with and want to inspect.
- Real tools. Like OOP. "I invented the term Object-Oriented, and I can tell you I did not have C++ in mind." -- Alan Kay, who argued against things like the inability to evolve programs as they're running. Solved decades ago. And other things too: we have functions, but languages don't support that tiny increment of power for functional programming to be possible. Functional programming can in many situations help software scale.
Now, that doesn't mean these tools will instantly make people into software engineers. I work with them to some extent, but I still just have the mindset of hacking out code, and then cleaning it up when I see how it's taking shape. I mean, I use things like unit tests, but this kind of non-engineering is appropriate for what I do. Engineers make sketches too, but mine run.
Tayssir John Gabbour
Sunday, October 03, 2004
Engineering is the use of well described, repeatable solutions to solve problems and defining new, robust solutions where needed.
Engineering to me means decomposition, re-use of components, being part of a community which defines and is supportive about best practice. The use of protocols, open source, design patterns, standard methodologies, OOD, decomposition, encapsulation, peer review, and so on are all indicators of an 'engineering' approach.
This subject is one of the biggest wanks.
First, the word "engineer," like almost every other word in the language, can be used any way that makes sense. In software, it's used to mean high standard development.
Second, high standard development has nothing to do with Engineering degrees, including some of the specialist Software Engineering degrees. That is, a graduate Electrical Engineer, Civil Engineer or even a Software Engineer is no better at software development than a Physics graduate or even a non-graduate in many cases.
Monday, October 11, 2004
This topic is archived. No further replies will be accepted.Other recent topics
Powered by FogBugz