L
LR
Lew said:I call myself a "software engineer" in Maryland, the U.S. of A.
On business cards? Letterhead? I'm sorry, I don't recall, did you say
you were a PE?
LR
Lew said:I call myself a "software engineer" in Maryland, the U.S. of A.
That sounds like mathematics to me. I've always been told that Computer
Science is a branch of mathematics. Just because something is called
science doesn't mean it is, the same as if you call something
engineering it doesn't mean it is.
I agree. But something that isn't engineering won't become engineering
as it gets more mature.
Sorry, I think that qualifies as mathematics.
James said:Not entirely. It's generally easier to verify that software
will work than it is for a bridge, because software works in a
very controlled medium.
Yes, but do software systems fail in the same way that bridges
do?I tend to think that a significant number of bridge failures
occur because engineers don't take the entire physical world
into account when they do their work. EG, in the case of the
Tacoma Narrows they may not have accounted for certain kinds
of fluids problems. I don't recall exactly but I think the Tay
may have collapsed under it's own weight.OTOH good engineering can work wonders which layman can only
comment on as Lincoln famously did: "That man [Herman] Haupt
has built a bridge four hundred feet long and one hundred feet
high, across Potomac Creek, on which loaded trains are passing
every hour, and upon my word, gentlemen, there is nothing in
it but cornstalks and beanpoles." I'm not sure if this is the
bridge in question, but it might fit the
bill:http://www.geocities.com/rayhaupt.geo/GeneralsBridge.JPGI think software doesn't have this particular problem.
I'm not exactly sure what problem you're referring to. If I've
understood you correctly, then no, software doesn't have this
problem. Which makes verification several orders of magnitude
easier; you know the full environment.
For some types of
software, at laest. For real time software, it's less obvious,
since it's fairly hard to be sure that you've analysed all
possible timing issues.
But it's still several orders of
magnitude easier than verifying that you've analysed all
possible physical interactions which might affect a bridge.
Mathematics.
Seriously, engineering is a lot more than just the application
of scientific principles---engineering is also concerned with
esthetics, cost, development methodology, etc. (Take a look at
some of the bridges designed by Gustave Eiffel---the viaduc de
Garabit, for example---and tell me that esthetics aren't
involved).
But the operative word in your case is "principles",
not just one principle, but more the set of all of them.
In many ways, the way you develop software is exactly the same
as the way an engineer develops a bridge, or an architect
develops a building. It involves a complex mixture of creative
work, applying known and established principles, having the work
verified by others, etc., etc. There is also the great range of
applications: most bridges/programs are really just a rehash of
standard solutions, and can be turned out quite quickly, with
very little real creativity or analysis. And a very, very few
push the envelope; these require even more analysis than usual.
Absolutely reliable? Suppose you have a customer who wants a formal[email protected] said:{...]
Do the programs provably work? To the same extent that an engineer could
"prove" that the bridge they designed will work?
There is a whole branch of computer science that is dedicated to
"program provability". In the practical world, the theory gave rise to
what is called "design by contract", by which you define formally the
specifications of your program with pre/postconditions, invariants,
etc. You can mathematically prove that your program will work by those
means. This is used in any sensible environment that needs absolutely
reliable softwares.
proof that the program you've written will halt. Can you provide that?
Yes, absolutely reliable. The program is proven to be correct in any
way. The proof can be given in the form of mathematical notations.
LR said:Sorry, I think that qualifies as mathematics.
LR said:If that choice works for you, then that's what's best for you. I'm
still waiting for a single example of a scientific principle applied in
the development of software.
[email protected] said:(e-mail address removed) wrote:
{...]
Do the programs provably work? To the same extent that an engineer could
"prove" that the bridge they designed will work?
There is a whole branch of computer science that is dedicated to
"program provability". In the practical world, the theory gave rise to
what is called "design by contract", by which you define formally the
specifications of your program with pre/postconditions, invariants,
etc. You can mathematically prove that your program will work by those
means. This is used in any sensible environment that needs absolutely
reliable softwares.
Absolutely reliable? Suppose you have a customer who wants a formal
proof that the program you've written will halt. Can you provide that?Yes, absolutely reliable. The program is proven to be correct in any
way. The proof can be given in the form of mathematical notations.
I'm not sure you responded to my question, so please allow me to restate
it. Suppose you have a customer who wants a formal proof that the
program you've written will halt, can you provide that?
AL said:Help me understand your definition of "scientific principle"
and the
background of the engineers you cite as your source. If they are the
white lab coat Phud types of research I can understand the narrowness of
the definition. If, on the other hand the engineers are brushing off the
dirt & crud from the field I can't imagine any of them giving you that
singular an answer.
FWIW, not all engineers design bridges.
I hold a degree in electrical engineering where systems are designed
based on electrical theory. Did you catch that "theory" thing?
I also
hold a degree in industrial engineering where systems design entails
such issues as process flow & control, statistical measurements of
production, cost accounting, environmental issues and human behavior,
just to name a few - oh, and a thorough study of materials science, just
so you know there *is* a scientific principle or two involved.
How I came to design software is a whole other story but suffice it to
say that I found the discipline of engineering to be directly
transferable to the development of software. I took over a position
vacated by someone who probably should have been out writing a book
(programming analogy provided by someone else in this thread) rather
than designing software. I also worked with someone who entered the
programming field from a job in social services. What I found sadly
lacking in the work of these genuinely nice folks was the vaguest notion
of logic and structured design.
And that was back in the days when the
programming language itself imposed some limits on how careless you
could get. IMO, the freedom JAVA provides to go totally berserk
*demands* an engineered approach to software design.
The field of engineering is a richly diverse discipline that encompasses
logic, structure, nathematics, ethics, economics, reliability, safety,
creativity, imagination, aesthetics, the human element and *even*
scientific principles. Your insistence on such a narrow definition is
like insisting that flight requires the flapping of wings.
I guess to sum up my thoughts on software engineering, the exponential
growth of complexity in the systems that we depend on every day demands
a disciplined, structured approach to safe reliable designs - that is
the function of engineering.
Acknowledging I might be a bit biased.
BTW, did anyone ever answer the question posed in the subject line?
Martin said:Same here: its well recognised in the UK. I hold a CE in software
engineering as well as an MSc (Chemistry).
LR said:(e-mail address removed) wrote:
{...]
Do the programs provably work? To the same extent that an
engineer could "prove" that the bridge they designed will work?
There is a whole branch of computer science that is dedicated to
"program provability". In the practical world, the theory gave
rise to what is called "design by contract", by which you define
formally the specifications of your program with
pre/postconditions, invariants, etc. You can mathematically prove
that your program will work by those means. This is used in any
sensible environment that needs absolutely reliable softwares.
Absolutely reliable? Suppose you have a customer who wants a formal
proof that the program you've written will halt. Can you provide
that?
Yes, absolutely reliable. The program is proven to be correct in any
way. The proof can be given in the form of mathematical notations.
I'm not sure you responded to my question, so please allow me to
restate it. Suppose you have a customer who wants a formal proof
that the program you've written will halt, can you provide that?
any scientific principle being applied in this so called engineering
disciple.
If that choice works for you, then that's what's best for you. I'm
still waiting for a single example of a scientific principle applied
in the development of software.
LR said:Some of the states too, I think. However, I read a little of the law
for one state and it doesn't really describe an engineering
discipline. It actually used the phrase "computer programming". At
least AFAIR.
By way of example, "F = ma" is a scientific principle. I^2*R=W is a
scientific principle. Hz = 1/(2*PI*sqrt(L*C)) is a scientific
principle.
I admit I had to pull out my copy of Marks for that last one. It's a
been a long time since I needed it.
Ben said:QED This function returns in finite time for all inputs.
That's quite wrong. The engineers who designed the Tay and the TacomaBut I think I made it plain that engineers don't consider the entire
physics of the bridge. They might not consider fluid interactions or
wind loading or some such. The parameters are likely to be driven by
budget, customer requirements or perhaps good practice.
If that choice works for you, then that's what's best for you. I'm
still waiting for a single example of a scientific principle applied in
the development of software.
Lew said:What a specious argument.
You set up a straw-man definition of engineering as solely
"application of scientific principles", rejecting every definition
offered by engineering groups as cited here.
Then you reject the
scientific principles proffered because they "sound like" mathematics
*to you*, and therefore must not be science, again, by your definition
only.
Then by redefining everything you have "proven" that software
development cannot be engineering. So you control all the
definitions, rejecting everything the rest of the world uses if it
doesn't fit your little, narrow world view. Thus, you will always
win.
There is no reasoning with you.
Gennaro said:We might be having a problem around the term "principle". If you
refer to scientific principles (laws) such as Archimedes'
principle or the law of conservation of energy then, of course,
they aren't "applied to the development of software".
"Therefore it is not 'engineering'", you are saying? Fine, it's
a terminology problem: you might call it software-ology, for
instance. However "software engineering" is used by an engineer
association with an agreed upon meaning.
It's of course more
about methodology ("systematic, disciplined, quantifiable") than
scientific principles.
Note that I've assumed good faith so far. I won't feed the
troll.
Tamas said:It's applied mathematics,
like with other fields of engineering.
These
days a lot of the hardware is engineered similarly to software:
You
write code in a hardware description language, simulate it in software,
and compile it in silicon or a programmable hardware. Just like with
software, it is extremely hard to formally prove hardware correctness as
well (remember the old Pentium floating point bug?).
I'm not sure you responded to my question, so please allow me to restate[email protected] said:(e-mail address removed) wrote:
{...]
Do the programs provably work? To the same extent that an engineer could
"prove" that the bridge they designed will work?
There is a whole branch of computer science that is dedicated to
"program provability". In the practical world, the theory gave rise to
what is called "design by contract", by which you define formally the
specifications of your program with pre/postconditions, invariants,
etc. You can mathematically prove that your program will work by those
means. This is used in any sensible environment that needs absolutely
reliable softwares.
Absolutely reliable? Suppose you have a customer who wants a formal
proof that the program you've written will halt. Can you provide that?
Yes, absolutely reliable. The program is proven to be correct in any
way. The proof can be given in the form of mathematical notations.
it. Suppose you have a customer who wants a formal proof that the
program you've written will halt, can you provide that?
If "halting of the program" was in the user requirement specifications
of the software, then yes. Since the software was developped using
design by contract, it can be proved to meet the specifications. If
the specifications was impossible to meet for one reason or another,
the software couldn't have been developped using formal methods.
Want to reply to this thread or ask your own question?
You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.