From: RobG on
On Nov 15, 11:07 pm, The Natural Philosopher <t...(a)invalid.invalid>
wrote:
> RobG wrote:
> > Empirical evidence is used to develop and support a theory, however
> > the theory itself must have a scientific basis - that is, it must have
> > a rational explanation that will predict behaviour in similar
> > circumstances. Simply observing that something happens is just an
> > observation of a fact, an experiment. Being able to repeat an
> > experiment and achieve the same outcome every time doesn't prove
> > anything other than that the experiment is repeatable, it doesn't
> > provide any explanation of why the experiment "works", nor predict the
> > likely outcome if the parameters are changed, nor provide any bounds
> > within which it "works" or "fails".
>
> However most of science is, in the *final* analysis, precisely what you
> describe.

No, it isn't. Science attempts to understand and explain the
underlying system that causes outcomes. It is also open to new
theories that better explain outcomes, it doesn't blindly accept that
because something "always happens" that it will continue to happen.


> a set of propositions that may (or may not!) reflect an underlying
> reality, whose predictions have failed to ever be falsified by
> experiment, and whose propositions CAN in principle be falsified.
>
> And which actually add some value that competing theories do not.

It is by disproof that new theories emerge or existing ones are
strengthened. You can't disprove a theory by contrary experimentation
alone, you have to propose a theory as to *why* the evidence is
contradictory. The contrary evidence may simply provide a boundary for
where the theory holds and where it doesn't. Quantum theory is the
antithesis of relativity, but doesn't disprove it.

Kepler's laws of planetary motion were fine until instruments were
accurate enough to discover the errors, but then the hunt was on for a
better theory. Without Einstein's theory of relativity, modern GPS
systems would be impossible. Without Hawking's theories we'd never
have found black holes, even though they were predicted by Einstein's
theories.


> Cf Kuhn, Popper, Instrumentalism, et al.

There's a big difference between instrumentalism and scientific
experimentation. Experiments and their results are a fundamental part
of developing theories, it is the people that I call tradesmen that
are instrumentalists.


> > Without the explanation, there is no theory. There is no application
> > of scientific knowledge, no understanding of why the result occurs. It
> > is no more than faith - it's always worked before in their limited
> > experience, therefore they expect it to always work. Anyone who
> > performs work using such methods should be categorised as a trades
> > person. They are certainly not professionals applying scientific
> > theories or methods. They are not engineers.
>
> :-) sadly, there are no final explanations for anything.

I think you're being deliberately disingenuous. Science is constantly
evaluating new theories and updating old ones, even tossing them out.
There is no expectation that a theory will last forever, nor that any
theory is "final".


> will the sun rise tomorrow? Can't say really.

Then you should learn the physics of solar motion. There are theories
that predict when the sun won't rise tomorrow - it's a few billion
years away, but it's been predicted for quite some time.

> It always HAS...whether
> that's because it obeys certain immutable laws of physics that we
> BELIEVE to be universal true (nay DEFINE to be universally true) or
> whether its because the Ngongobongo tribe absolutely do a special tribal
> dance every sunset to make sure it does, is a very moot point.

You don't seem to know much about science - there is no such thing as
an immutable law of physics. Newton's laws were good enough for the
time in which they were proposed, however we now know much more than
we did in the 1600s. Einstein's laws were pretty good too, but they
have their limits also - he never did find his unifying theory,
perhaps there isn't one. But that wont stop people trying to find it.


> Oh, and an explanation is not a theory, and certainly not a scientific
> theory, nor is a scientific theory an explanation.

Now you've lost it.

> It is if you like,
> the expression of the result of a lot of experimental data in terms of
> an algorithm.

More or less. And that algorithm is the explanation.

> In the same way that the reality of our perceptions is a
> compressed representation of all the salient features of all the data we
> are subjected to.

That isn't a scientific theory - you're back to simple observed
results.


> E=mc^2 is a shorthand algorithm for calculating mass-energy
> relationships. That is borne out by observation. I am not sure it
> explains anything at all. Not in any fundamental way. Its just the
> expression of a constancy of relationship between certain elements of a
> world we have defined in certain precise terms.

I think this is some kind of straw man argument. You put up a famous
equation and say "that's not a theory", well, it isn't, and I didn't
say it was. That equation is part of a theory - Einstein's theory of
special relativity, which built on work by many others incuding
Galileo.


> 'Because God wills it' is the ultimately irrefutable explanation for
> everything.

Rubbish. It is refuted quite simply - where is the proof of this god?
If rational explanation exists, then clearly there is no need for a
god and hence no evidence for its existence.

> That doesn't make it a scientific theory in any sense.

More straw men - no one said it was, it's faith. Science does not
state categorically that one or more gods can't or don't exist, it
just says that there is no proof of a god. Read a bit of Richard
Dawkins' work, specifically "The God Delusion".


> A professional engineer is one who makes his living out of designing
> engines. HOW he does it, is really no part of what he is.

That is an utterly superficial excuse for logic. It's all about how
the work is done that matters, that's the whole point of this thread.

>
> Professional is no guarantee of quality.

Of course not, and I didn't I say that. Quality is a whole new topic -
as if this hasn't gone far enough off topic already.


--
Rob
From: David Mark on
On Nov 15, 7:24 pm, RobG <rg...(a)iinet.net.au> wrote:

[...]

>
> There's a big difference between instrumentalism and scientific
> experimentation. Experiments and their results are a fundamental part
> of developing theories, it is the people that I call tradesmen that
> are instrumentalists.
>

Yes, one of them sees something work in a handful of browsers, writes
a blog about it, another copies it for a new wonder-library and blogs
about that. The current culture says that you trust these people as
they must know what they are doing (they wrote these wonderful
libraries!) Try to explain that their chosen tools are bunk and they
refer back to the blogs as "proof".
From: The Natural Philosopher on
David Mark wrote:
> On Nov 15, 7:24 pm, RobG <rg...(a)iinet.net.au> wrote:
>
> [...]
>
>> There's a big difference between instrumentalism and scientific
>> experimentation. Experiments and their results are a fundamental part
>> of developing theories, it is the people that I call tradesmen that
>> are instrumentalists.
>>
>
> Yes, one of them sees something work in a handful of browsers, writes
> a blog about it, another copies it for a new wonder-library and blogs
> about that. The current culture says that you trust these people as
> they must know what they are doing (they wrote these wonderful
> libraries!) Try to explain that their chosen tools are bunk and they
> refer back to the blogs as "proof".

Another person without a clue what instrumentalists are.

God the effort we went to to build the Internet, and they cant even look
up Wiki.
From: RobG on
On Nov 16, 1:25 pm, The Natural Philosopher <t...(a)invalid.invalid>
wrote:
> RobG wrote:
> > On Nov 15, 11:07 pm, The Natural Philosopher <t...(a)invalid.invalid>
> > wrote:
> >> RobG wrote:
> >>> Empirical evidence is used to develop and support a theory, however
> >>> the theory itself must have a scientific basis - that is, it must have
> >>> a rational explanation that will predict behaviour in similar
> >>> circumstances. Simply observing that something happens is just an
> >>> observation of a fact, an experiment. Being able to repeat an
> >>> experiment and achieve the same outcome every time doesn't prove
> >>> anything other than that the experiment is repeatable, it doesn't
> >>> provide any explanation of why the experiment "works", nor predict the
> >>> likely outcome if the parameters are changed, nor provide any bounds
> >>> within which it "works" or "fails".
> >> However most of science is, in the *final* analysis, precisely what you
> >> describe.
>
> > No, it isn't. Science attempts to understand and explain the
> > underlying system that causes outcomes.
>
> Nope. Not in the final analysis.

Not in your "final analysis" perhaps.

We aren't arguing about what is or isn't science, we're discussing
whether the use of scientific methods is a suitable criterion for
distinguishing a software engineer from a hack.


> Its just a set of consistent hypotheses that hang together and haven't
> been shown to be wrong, yet. Based on the assumption that the behaviour
> of the world is governed by casuality, and laws. Both of these are human
> inventions.

You can characterise all knowledge as "human invention" if you like.
Your "final analysis" is just you refusing to accept a particular
argument on the basis that it's all made up. Of course it is, as is
our entire system of mathematics and physics, but that system is
fundamental to our ability to develop technologies. Anything and
everything can be resolved to being "just a theory", but that's a
pretty useless conclusion.

[...]

> Ultimately an engineer is a caveman who, with no science at all, ties a
> stone on the end of a stick, and bashes idiots who are still looking for
> Explanations as to *why* it works, over the head, and eases their
> troubled minds that way.

That caveman is not an engineer by my definition. The original
question is "What is a software engineer". My position was that the
difference between an engineer and a tradesman is that the engineer
uses scientific methods to develop solutions. Doing something simply
because it works without any understanding is not a scientific
approach. It might be successful (i.e. it might "work"), but it's not
scientific.

> He doesn't know *why* it works, he merely notes
> that it *does*, and that the bigger the stone and the longer the stick,
> the more dead the Dawks are when he's finished hitting them. No more is
> needful for the purpose of commiting useful assault and battery.

Which is a suitable analogy for developers who have no understanding
of why the code they write works, and therefore no understanding of
when it will fail. Your caveman will be bewildered by the mob who work
out how clubs work and develop suitable defences or superior weaponry.


[...]
> You should note that this is why computer *scientists* are such an
> infernal waste of space. They want to know how it all works. Software
> engineers don't need to know how it works.

Such broad generalisations are a poor substitute for reasoned
argument. It's absurd to argue that computer scientists are a waste of
space as without them there'd be no computers or software engineers,
or this discussion. Or were computers invented by a bunch of people
connecting a stack of valves together and messing around with them
until the light (literally) came on? Was the first logic circuit
simply chance, or did someone actually design it from first
principles? And if someone finally develops a feasible quantum
computer, will that be put down to "trial and error" or scientific
endeavour?

Yeah, computer scientists are completely over rated.

Your entire argument has been about splitting hairs using simplistic
analogies. Of course science doesn't have answers for everything and
depends on the results of experiments to prove (as in provide
supporting evidence for, not to define irrefutably) its theories. Nor
does a scientific approach necessarily result in a better or faster
"solution" than trial and error - the success of concepts like lateral
thinking are proof of that.

But a scientific approach is more likely to provide a better solution
in the majority of cases, and it provides information that can be used
to further knowledge at a much greater rate than purely empirical
methods. That is why it is regarded as the best methodology for
developing things.

> Just how to *make* it work.

So in your version of reality engineers must work purely by trial and
error - you can't win a debate by simply defining your protagonist out
of the argument.


--
Rob
From: Garrett Smith on
David Mark wrote:
> On Nov 15, 2:41 am, Garrett Smith <dhtmlkitc...(a)gmail.com> wrote:
>> David Mark wrote:
>>> On Nov 15, 1:35 am, Garrett Smith <dhtmlkitc...(a)gmail.com> wrote:
>>>> Richard Cornford wrote:
>>>>> David Mark wrote:
>>>>>> On Nov 14, 11:55 pm, Richard Cornford wrote:
>>>>>>> Richard Cornford wrote:
>>>>>>>> ... After all, you can show them the environments where
>>>>>>>> objects result in 'undefined'...
>>>>>>> That 'undefined' should have been 'unknown', but you probably
>>>>>>> figured that out already.
>>>>>> Actually, I thought you meant document.all in FF quirks mode. ;)
>>>>> Fair enough, that will do as your third example of a host object -
>>>>> typeof - oddity that can be stated. (Which reminds me, there is (or was,
>>>>> as it has been criticised) something in Safari that claims to be
>>>>> 'undefined' even though it can be shown to exist (be an object or
>>>>> function). I don't recall the detail, but I think Garrett may be in a
>>>>> position to say what it is (without looking it up in the ES 4/3.1
>>>>> mailing list archives.))
>>>> Was an SVG "filter" style property, as a string value:-
>>>> typeof el.style.filter
>>>> "undefined".
>>>> javascript:var s=document.body.style;alert([typeof s.filter,"filter"in s]);
>>>> elerts "undefined, true"
>> And:
>>
>> javascript:var s=document.body.style;prompt('',[typeof s.filter, s]);
>>
>> results:
>>
>> undefined,[object CSSStyleDeclaration]
>>
>>> Right. The collection item method is IE and "string". So to sum up,
>>> typeof for native objects is specified and all known implementations
>>> follow the specification in this regard (and would be broken as
>>> designed otherwise).
>> Ah, not completely.
>>
>> We recently discussed callable regexp.
>>
>> In Spidermonkey typeof /a/ results "object" (where it should, by
>> following the typeof table, result "function". This is because RegExp is
>> callable in Spidermonkey, using Function Call syntax as:
>>
>> /a/("a");// results ["a"]
>>
>> javascript: alert( /a/("a") )
>>
>> elerts "a"
>
> Fair enough, but it is still within the specified range for native
> types.

There are about 5 different implementations where RegExp may or may not
implement [[Call]] (or a bastardized version thereof) and where result
when used with typeof operator varies.

ECMA-262 table for the typeof operator states:
+----------------------------------------------+-----------+
| Type | Result |
+----------------------------------------------+-----------+
| Object (native and implements [[Call]]) |"function" |
+----------------------------------------------+-----------+

So, where RegExp implements [[Call]], the result of typeof
should be function.

Actual implementations:
+---------------------------------------+-----------------+
| RegExp Behavior | typeof Result |
+---------------------------------------+-----------------+
| 1) implements [[Call]] | "object" |
| 2) implements [[Call]] | "function" |
| 3) callable for Function Call only | "object" |
| 4) callable for Function Call only | "function" |
| 5) does not implement [[Call]] | "object" |
+---------------------------------------+-----------------+

Behavior seen in implementations:
(1) Opera
(2) Safari
(3) Firefox 3+
(4) Older Spidermonkey (Firefox 2, Seamonkey)
(5) IE

Quick example:
javascript:var a=/a/;alert(typeof
a);alert(a('a'));alert(isNaN.call.call(a,a,'a'));

The first alert checks the result of typeof
The second alert shows if the RegExp can be used in a Function Call.
The third alert test [[Call]] indirectly, via Function.prototype.call.

Firefox 3:
"object", "a", (TypeError)
Seamonkey:
"function", "a", (TypeError)
Webkit:
"function", "a", "a"
Opera:
"object", "a", "a"
IE:
"object", (Error -> Completion)

This doesn't mean typeof is unusable, but care should be taken when
using it, even with a native object.

Implementations other than IE implement non ECMA-defined objects as
native ECMAScript objects. These implementations have copied IE behavior
with respect to particular object type result with typeof operator,
where IE's result is unintuitive (e.g. typeof alert == "object").

It is also worth noting that document.all is a callable object in some
implementations where typeof document.all result may be "object" or
"undefined".

javascript:var d=document;alert([typeof d.all,
d.all.constructor,d.all("q")]);

The results depend on the browser, its version, and compatibility
mode of the document. It doesn't matter if document.all is not used
There really isn't any good reason to use it, so its a non-issue.

IE <= 8 implement "Host" objects so that when used with the typeof
operator, the result is "object", "unknown", or "string"). While this
does not violate ECMA-262, it provides results that are incongruent and
unintuitive. Check in your intuition at the door.

Part of the problem with the typeof table, and with the ECMA-262 r3
specification overall, is the great leeway given to Host objects.
There is no encouragement that the implementation of a Host object
SHOULD implement an interface which behave as Native ECMAScript object.
and no incentive by providing a pertinent description of desirable
behavior.

Fictitions spec example, for callable Host object:-

(fictitious, hypothetical table)
+-----------------------------------------------------+-----------+
| Type | Result |
+-----------------------------------------------------+-----------+
| Object (Host and implements [[Call]])* (see Note) |"function" |
+-----------------------------------------------------+-----------+

* *Note* Host object that implements [[Call]] operator, when used with
the typeof operator, SHOULD result "function". Implementations are
discouraged for providing different behavior, unless for good reason.

Although that is fiction, it encourages implementations to implement
Host object so that it behaves as a native object. That would make the
outcome of typeof more predictable.

The current specification gives wide-open leeway. It provides no
guidance for Host objects. It does this in full knowledge that the
implementation will have objects that are not defined by the
specification, as stated in the specification:

| 4. Overview
|
| [...]
|
| ECMAScript is an object-oriented programming language for performing
| computations and manipulating computational objects within a host
| environment.

There, and:

| ECMAScript as defined here is not intended to be
| computationally self-sufficient; indeed, there are no provisions in
| this specification for input of external data or output of computed
| results.

Again, this is defining that ECMAScript is for a Host environment
(obviously).

It goes on to provide great leeway for Host object to have any behavior:

| Instead, it is expected that the computational environment of
| an ECMAScript program will provide not only the objects and other
| facilities described in this specification but also certain
| environment-specific host objects, whose description and behaviour are
| beyond the scope of this specification except to indicate that they
| may provide certain properties that can be accessed and certain
| functions that can be called from an ECMAScript program.

| 4.3.8 Host Object
| A host object is any object supplied by the host environment to
| complete the execution environment of ECMAScript. Any object that is
| not native is a host object.

A reasonable expectation would be that implementations will do anything,
even introducing useless and undesirable complexities and quirks.

Implementations would not have had the incentive to copy IE's odd
implementation with result of typeof operator on callable "Host" object,
had IE just used native jscript object from the beginning.

Had Microsoft implemented Host objects as native jscript objects,
you would not be reading this message.

Perhaps future revisions of ECMAScript will include stronger wording for
Host objects, so that implementations will have at least some
conformance guidelines, though it seems too late for WebIDL, which
also takes liberty to implement special behavior on Host object,
defining a very large number of additional internal properties.
--
Garrett
comp.lang.javascript FAQ: http://jibbering.com/faq/