The fact that you use 'proven' in conjunction with a scientific theory shows that you haven't got a clue what science is about and that you should probably refrain making distinctions between scientific theory. According to the burden of 'proof', Newton's mechanics don't belong in the science curriculum either. Unproven. Any chance you're educated in Kansas?
Behe's hypothesis has been considered, and is by most of his peers rejected. At the very best it belongs way out there with string theory and other untested hypothesis, but should never be taught alongside scientific jewels as Newton's theory of gravitation and Darwin's theory of Natural Selection. Too flimsy and too speculative. If all works out for the best for ID, maybe in a century or so. I'm not holding my breath on that one though.
hmm, and can you give me the link to the double-blind experiment that confirmed it? You know, so that my physician can prescribe a trip to Lourdes instead of these other double-blind tested drugs?
Sorry, burden of proof on the people that claim existence of the FSM or any of Its variants, and despite millenia of 'philosophy' (you might want to read up on Thomas of Aquino and William Ockham), no such luck.
Evolution, when properly taught, will not claim knowing the origin of life. What it will claim however is that all evidence points to a common ancestor of all life on Earth, that man descended from primates, and that all life is linked together through a tree of genetic transformations. This is all backed by evidence and doesn't preclude a sprititual/religious view of the world. It does however preclude a believe in the Bible as a set of facts, which is the entire problem. The factual believe in the Bible, that is.
Invalid vs null. Null is valid and can be used to send a particular message, usually 'object doesn't exist'. Invalid is just a particular programming error that hasn't lead to a segmentation violation yet (viz. RuntimeException). C++ allows memory to become invalid (for a while), that's just the nature of the beast (and a runtime issue, not a typing one). The difference between C++ style references and Java references that a C++-style reference is guaranteed to be non-null is still there, and is still important. Java references: all the disadvantages of references (no pointer arithmetic) combined with the disadvantages of pointers (does this reference actually exist?);)
As for cloning to protect encapsulated data. Doesn't really work in general. Suppose you have a big chunk of data (say 10 MB) in your class and callers need to inspect it in various ways, but shouldn't be able to change it. To actually encapsulate that data you are forced to make a deep clone of the object everytime someone calls a simple getter.
This is impractical, and therefore in practically all Java code I've ever seen, getters are always simple functions that just hand out the object with the implicit meaning 'be nice to it, please'. However, this does break encapsulation. This is a big issue I have with Java.
I hoped that with Java 5 they would've tackled it as in my experience const-correctness makes for much better self-documenting code, but then again, Java apparently is happy with programmers writing javadoc:(
I'm finding this interesting as well, so I'll just keep on going. Some clarifications
References in C++:
void f(Foo& foo) { /* foo is guarenteed to be non-null. It can still be invalid, but that should lead to a segmentation fault */ foo.doSomething();// dot notation }
void f(Foo* foo) { /* foo can be 0 */ foo->doSomething();// arrow notation }
The usual idiom is to use the pointer variant in two cases only: if handing over the null pointer is expected by the function, or (obsolete when using 'smart' pointers) when you want to take over the memory. Polymorphism works in both cases (but not with f(Foo foo)).
Const-correctness. Final doesn't handle this at all for complex types. In C++ you can return 'const' references that will only allow you to call 'const' functions on these references. I.e., you can decide that you will give out some member data through a getter and be sure that the caller cannot change anything in the data. You can ensure this through arbitrary depths. No such thing in Java. Check:
public class TST {
private final int[] contents;
public TST() { contents = new int[1]; contents[0] = 1; }
public final int[] getContents() { return contents; }
final static public void main(String[] args) { TST t = new TST(); int[] c = t.getContents(); c[0] = 2;// now I've possibly screwed up the internal mechanics of the class. This can happen by whomever
System.out.println("" + t.getContents()[0]);
}
}
See how the caller can change the member data inside the TST class? As far as I know, there is no way that you can hand out a reference to a member, without at the same time giving up encapsulation of data. Serious issue. C++:
int main() { TST tst; const vector<int>& c = tst.getContents();// gets the reference, cannot change c[0] = 2;// compile error; vector<int>& c = tst.getContents();// will not compile, type error }
(as a side-note, of course C++ has a way to circumvent its own mechanism: const_cast, but that one falls into the same 'frown' class as reinterpret-cast: something you should almost never use, but if you need it, you need it badly.)
Finally, covariant return types, this is not possible in Java, right? Simple stuff such as inheriting the 'clone' member and returning the most specific type. This you can do in C++:
class A { public: virtual A* clone(); } class B : public A { B* clone(); }
And everywhere in your code where the compiler knows you're working with B, you don't need to cast.
For both C++ and Java it is trivial to break the type system through casting. In Java it is even the 'preferred' way of using the typesystem (at least until 1.4). Few more weaknesses: the aforementioned covariant return types (meaning more casts in Java then C++), no const-correctness (meaning broken encapsulation in Java), and no way to guarentee non-nullness of 'references' (C++ references are non-null always). So as far as I can see, the C++ typesystem is significantly stronger than Java's as you can program with more guarentees, can actually encapsulate complex data and protect it from change, and you can specify in the language that something is not expected to be null (in Java you need Javadoc to actually document what is expected, the function signature is almost never enough).
I'm not sure that the static type-checking is better in Java than C++, care to give an example? Yes, in C++ it's much easier to break the type-system through static_cast and even reinterpret_cast, but that takes a conscious effort and is by design (C++ tends to get out of your way when you tell it you know what you're doing).
As far as I know, the inheritance semantics for the Java subset of C++ is equivalent between Java and C++. But maybe I'm missing something (that, and the covariant return types;)
The static type system in Java is horribly broken. You do realize that everytime you cast something you are circumventing this type-system, don't you? Java is the most cast-heavy language I can imagine, and even something simple as covariant return types which eleminate a lot of casts has never made it into the language. In C++ world, a cast is generally seen as a way to circumvent errors in the type structure of the application, in Java there's no way around it.
Then of course there is no support for parametric polymorphism (Java generics are not that, that's auto-casting, a quick hack on a broken system). Yes, C++'s implementation through templates is complex and relies much too much on overloading to be considered a 'nice' implementation of parametric polymorphism, but it is there, and it is extremely useful. In my experience parametric polymorphism is more elegant and more safe than inheritance. Inheritance (subclassing) has its place in the programmer's cookbook, but for most applications I've worked on, inheritance is actually useful for about 20-30% of the code. Much is algorithmic ('using' the classes, not defining more), and can be nicely made into libraries through parametric polymorphism.
If by worlds ahead you mean that the particular subset of 10% of the language features of C++ is 90% more easily and robustly used, then yes. However, the language as a whole is very limited in scope and extensibility of the language is non-existant. The VM is however excellent.
About the language shootout: two remarks. You are free to enter your own Java implementation of a particular problem, so if you think the implementation is wrong, don't whine and enter your own stuff. Second, startup time is important for many small applications. Would you write wc in Java? I'm using java much less then I could, simply because the startup time of java often is longer than the total process time in, say, python. Especially for making small utility programs tied together through pipes, Java blows. People do write such programs as it is often clearer to create a couple of small apps with easy input-output behaviour than a largish monolithic app that does all but is a nightmare to instrument and maintain.
But then again, for its main purpose, business server apps, it has no equal. Too bad it sucks for many things outside of that, as it has a nice feature set, but wasn't completely thought through.
IMO, type safety is really not a thing Java excels at. Yes, if you consider that Java in general only manipulates one type (object), then it is type safe, but in reality its type system is shoddy at best. The container classes are a huge gaping hole of typing nightmares, only shoddily patched with the new 1.5 Generics. And don't get me started on the overloading issue: by design Java has excluded itself from scientific computing.
All in all: as a language, I don't think Java is particularly elegant, innovative or resourceful. As a platform, it's robust, fast and excellent at what its supposed to do. It's not really general purpose, but at its single purpose, business applications, it's very good and really takes over the flag from COBOL.
Not too difficult: the distinction between micro- and macro-evolution is defined to depend on the hypothesis that evolution can occur within a species, but that it cannot create species. Without a rigorous definition of what constitutes a species, the distinction is void and meaningless. So what does constitute a species according to creationists? If it's the (biological) interbreeding thing, then it's provably untrue. Showing this is undergraduate stuff. So what is it?
So yes, given the 'interbreeding' definition of species, they apparently are. You're however free to offer another definition of species, I'm sure many people would like to sharpen their teeth on it. Personally I think a crisp distinction between species is meaningless and impossible, and is a remnant of the time that biology was more akin to stamp collecting (taxonomy) than science. I believe the lack of a clear quantative definition of species follows from the theory of evolution.
A crisp and rigorous definition of species is however necessary for any argument based on micro- and macro-evolution to hold water. We're still waiting for such a definition from the Creationist camp. In this particular case, why are killer whales and dolphins different species given that they apparently can interbreed? And please, make the definition quantative and general.
I for one am not holding my breath to ever see such a falsifiable statement to come from that corner.
You might actually want to read that entry again, as you missed the necessary requirement for astroturfing that the campaign is organized to make it appear spontaneous. Not so in this case: we've got a highly public website attending the readers on this poll, and a pointer to the way to vote. This is simply a public announcement with a voting recommendation based on a specific political issue. Completely clear and legit. You're no claiming that whenever a politician says 'please vote, and do vote for me', he's actually astroturfing, or are you?
This micro- and macro-evolution stuff you spew is also a concoction of Creationism. In evolutionary biology there is no hard distinction between the two, and even the concept of species is cumbersome. The most workable definition is two populations of organisms that cannot produce viable offspring, and in that sense creation of species is routinely observed in the laboratory. Through the years that the terms have been flung by creationists, many concrete examples of macro-evolution have been reported in the lab. Such findings only lead to a further retreat of the term macro-evolution.
For a creationist: micro-evolution means whatever evolution has been shown to occur and macro-evolution everything that has not been shown yet. In that sense the distinction is completely self-consistent and it is tautological that evolution has not shown macro-evolution to occur. But of course it's a logical scam. Try to give a rigorous definition of species, I dare you.
Science is taught both in India and China. Do you think they need this Christian garbage next to their science? Science is global (if not universal), Christian religion is just one of many. Maybe you're better of starting to convert those three quarters of the world that don't believe your particular brand of superstition instead of killing your own science.
This Bloody Stupid Design theory of yours will never catch on: I personally prefer to call it Incompetent Design. That will leave the acronym intact as well. Much more to go at with that.
Just to put in my 2 cents. What IBM does is keep the financial sector operating. They are so firmly entrenched in practically every financial institute in the world that save from collapse of the entire financial sector (and thus the end of commerce) they are here to stay. What they do? They allow the financial institutes to pay them money to keep operating. Not a bad position at all.
It is a roll bar. What you get is a small round bar in front of you which you can roll forward/backward and sideways. The bar is simply connected to the ball of the mouse on the side of the contraption, thus transferring any movement on the bar to the mouse. It's very nifty.
The buttons in the middle of the contraption are also transferred to the mouse on the side. What I like about it is that you can steer the thing with a flat hand in front of your keyboard. This saves a lot of movement of the wrist which in my particular case leads to most trouble.
The disadvantage is that it is less accurate and fast than a real mouse, yet that's a small price to pay for actually being able to use a pointing device.
My personal favourite, the MouseTrapper. Completely mechanic, can use whatever old mouse you have lying around, and the motion you use are completely different from a regular mouse. It also doesn't break. I personally cannot use any mouse, not even those 'ergonomic' ones, as I will feel it in my wrists in a couple of days. I usually use a laptop with touchpad, but when I sit behind a desktop machine, this thingy really helps.
You might be able to take the artificial ones: genetic algorithms, or even better, genetic programming. Do two independent runs on the same problem. Start out with the same population, only change the initial random seed.
Let the critters grow and evolve for, say, a hundred thousand generations. Now, check in each of the populations what the probabilities are of exchanging genetic material between members while still maintaining viable offspring. Now try that for members between populations. You will notice that the probabilities within the population are much higher than those between the populations, to such an extent that you can conclude that the two populations can really be considered different species of code, simply because they can't mix.
The reason I have problems with agnosticism is that it's really too friendly for the proclaimed gnostics. My particular breed of agnosticism is not the meek 'I don't know', but more of 'You're pulling my leg, aren't you?'. The existence of a god is such a ridiculous proposition that it actually insults my intelligence to have to say 'I don't know', although in a true philosophical (not theological) discussion I would take that position (but followed by '... I cannot know. You cannot know. Noone can know this. Stuff that cannot be known is rubbish and this discussion is completely vacuous. Are you sure you're not pulling my leg?).
It is also kind of weird that the people that actually don't really care about religion need to protect themselves with one particular negative position towards the object of ridicule or another. I think the negative position is more suited for the theists.
Therefore I suggest that we start asking people that tout their belief in god as either 'arational' (from the Latin root of 'ratio'), or 'acognitive' (also from Latin). Arational for those who actually think that arguing from a hopeless assertion as the existence of god has something to do with logical thought (ID and creationists fall into this school of 'thought'), and acognitive for the milder variant of people that simply suspend their mental faculties whenever the preacher or other figure of authority says so (the regular church-goer). So that leaves the following choices to level the playing field between the religious and the non-religious, pick one: atheist, agnostic, arational or acognitive?
Nope. He doesn't actually state that 100 is average until after someone points out that IQs are normally distributed. In other words, he was clearly trying to mislead people.
First time I read the OP, I jumped to the same conclusion you seem to stick at. After a quick re-reading (which I usually do if I disagree with something) it stuck out that no such thing was going on. To quote the OP:
50% (more, actually, because there are many at the center of the curve) of Americans have an IQ of 100 or under.
Notice the presence of the word 'curve' and 'center', making quite clear that he indeed exactly means, what you so tirelessly try to correct. This curve of his might be the bell curve? Pretty sure it is.
You actually quote this in the same post and STILL make the topmost remark. Tsk, careless.
Just to be completely clear, I think the OP's reasoning is not quite spotless as he seems to assume blatently that below average means inability to understand scientific thought. This might very well be the case in the US or anywhere else, but it does not follow from the definition of IQ. You can have a country with 100% practicing (and good) scientist and still 50% will have an IQ lower than 100, per definition.
The fact that you use 'proven' in conjunction with a scientific theory shows that you haven't got a clue what science is about and that you should probably refrain making distinctions between scientific theory. According to the burden of 'proof', Newton's mechanics don't belong in the science curriculum either. Unproven. Any chance you're educated in Kansas?
Behe's hypothesis has been considered, and is by most of his peers rejected. At the very best it belongs way out there with string theory and other untested hypothesis, but should never be taught alongside scientific jewels as Newton's theory of gravitation and Darwin's theory of Natural Selection. Too flimsy and too speculative. If all works out for the best for ID, maybe in a century or so. I'm not holding my breath on that one though.
hmm, and can you give me the link to the double-blind experiment that confirmed it? You know, so that my physician can prescribe a trip to Lourdes instead of these other double-blind tested drugs?
Evolution, when properly taught, will not claim knowing the origin of life. What it will claim however is that all evidence points to a common ancestor of all life on Earth, that man descended from primates, and that all life is linked together through a tree of genetic transformations. This is all backed by evidence and doesn't preclude a sprititual/religious view of the world. It does however preclude a believe in the Bible as a set of facts, which is the entire problem. The factual believe in the Bible, that is.
Invalid vs null. Null is valid and can be used to send a particular message, usually 'object doesn't exist'. Invalid is just a particular programming error that hasn't lead to a segmentation violation yet (viz. RuntimeException). C++ allows memory to become invalid (for a while), that's just the nature of the beast (and a runtime issue, not a typing one). The difference between C++ style references and Java references that a C++-style reference is guaranteed to be non-null is still there, and is still important. Java references: all the disadvantages of references (no pointer arithmetic) combined with the disadvantages of pointers (does this reference actually exist?) ;)
As for cloning to protect encapsulated data. Doesn't really work in general. Suppose you have a big chunk of data (say 10 MB) in your class and callers need to inspect it in various ways, but shouldn't be able to change it. To actually encapsulate that data you are forced to make a deep clone of the object everytime someone calls a simple getter. This is impractical, and therefore in practically all Java code I've ever seen, getters are always simple functions that just hand out the object with the implicit meaning 'be nice to it, please'. However, this does break encapsulation. This is a big issue I have with Java.
I hoped that with Java 5 they would've tackled it as in my experience const-correctness makes for much better self-documenting code, but then again, Java apparently is happy with programmers writing javadoc :(
References in C++:
The usual idiom is to use the pointer variant in two cases only: if handing over the null pointer is expected by the function, or (obsolete when using 'smart' pointers) when you want to take over the memory. Polymorphism works in both cases (but not with f(Foo foo)).
Const-correctness. Final doesn't handle this at all for complex types. In C++ you can return 'const' references that will only allow you to call 'const' functions on these references. I.e., you can decide that you will give out some member data through a getter and be sure that the caller cannot change anything in the data. You can ensure this through arbitrary depths. No such thing in Java. Check:
See how the caller can change the member data inside the TST class? As far as I know, there is no way that you can hand out a reference to a member, without at the same time giving up encapsulation of data. Serious issue. C++:
(as a side-note, of course C++ has a way to circumvent its own mechanism: const_cast, but that one falls into the same 'frown' class as reinterpret-cast: something you should almost never use, but if you need it, you need it badly.)
Finally, covariant return types, this is not possible in Java, right? Simple stuff such as inheriting the 'clone' member and returning the most specific type. This you can do in C++:
And everywhere in your code where the compiler knows you're working with B, you don't need to cast.
For both C++ and Java it is trivial to break the type system through casting. In Java it is even the 'preferred' way of using the typesystem (at least until 1.4). Few more weaknesses: the aforementioned covariant return types (meaning more casts in Java then C++), no const-correctness (meaning broken encapsulation in Java), and no way to guarentee non-nullness of 'references' (C++ references are non-null always). So as far as I can see, the C++ typesystem is significantly stronger than Java's as you can program with more guarentees, can actually encapsulate complex data and protect it from change, and you can specify in the language that something is not expected to be null (in Java you need Javadoc to actually document what is expected, the function signature is almost never enough).
I'm not sure that the static type-checking is better in Java than C++, care to give an example? Yes, in C++ it's much easier to break the type-system through static_cast and even reinterpret_cast, but that takes a conscious effort and is by design (C++ tends to get out of your way when you tell it you know what you're doing). As far as I know, the inheritance semantics for the Java subset of C++ is equivalent between Java and C++. But maybe I'm missing something (that, and the covariant return types ;)
Then of course there is no support for parametric polymorphism (Java generics are not that, that's auto-casting, a quick hack on a broken system). Yes, C++'s implementation through templates is complex and relies much too much on overloading to be considered a 'nice' implementation of parametric polymorphism, but it is there, and it is extremely useful. In my experience parametric polymorphism is more elegant and more safe than inheritance. Inheritance (subclassing) has its place in the programmer's cookbook, but for most applications I've worked on, inheritance is actually useful for about 20-30% of the code. Much is algorithmic ('using' the classes, not defining more), and can be nicely made into libraries through parametric polymorphism.
If by worlds ahead you mean that the particular subset of 10% of the language features of C++ is 90% more easily and robustly used, then yes. However, the language as a whole is very limited in scope and extensibility of the language is non-existant. The VM is however excellent.
But then again, for its main purpose, business server apps, it has no equal. Too bad it sucks for many things outside of that, as it has a nice feature set, but wasn't completely thought through.
IMO, type safety is really not a thing Java excels at. Yes, if you consider that Java in general only manipulates one type (object), then it is type safe, but in reality its type system is shoddy at best. The container classes are a huge gaping hole of typing nightmares, only shoddily patched with the new 1.5 Generics. And don't get me started on the overloading issue: by design Java has excluded itself from scientific computing.
All in all: as a language, I don't think Java is particularly elegant, innovative or resourceful. As a platform, it's robust, fast and excellent at what its supposed to do. It's not really general purpose, but at its single purpose, business applications, it's very good and really takes over the flag from COBOL.
Not too difficult: the distinction between micro- and macro-evolution is defined to depend on the hypothesis that evolution can occur within a species, but that it cannot create species. Without a rigorous definition of what constitutes a species, the distinction is void and meaningless. So what does constitute a species according to creationists? If it's the (biological) interbreeding thing, then it's provably untrue. Showing this is undergraduate stuff. So what is it?
A crisp and rigorous definition of species is however necessary for any argument based on micro- and macro-evolution to hold water. We're still waiting for such a definition from the Creationist camp. In this particular case, why are killer whales and dolphins different species given that they apparently can interbreed? And please, make the definition quantative and general. I for one am not holding my breath to ever see such a falsifiable statement to come from that corner.
You might actually want to read that entry again, as you missed the necessary requirement for astroturfing that the campaign is organized to make it appear spontaneous. Not so in this case: we've got a highly public website attending the readers on this poll, and a pointer to the way to vote. This is simply a public announcement with a voting recommendation based on a specific political issue. Completely clear and legit. You're no claiming that whenever a politician says 'please vote, and do vote for me', he's actually astroturfing, or are you?
Huh, how come? Find an organism that doesn't use DNA and you've completely falsified that statement.
For a creationist: micro-evolution means whatever evolution has been shown to occur and macro-evolution everything that has not been shown yet. In that sense the distinction is completely self-consistent and it is tautological that evolution has not shown macro-evolution to occur. But of course it's a logical scam. Try to give a rigorous definition of species, I dare you.
Science is taught both in India and China. Do you think they need this Christian garbage next to their science? Science is global (if not universal), Christian religion is just one of many. Maybe you're better of starting to convert those three quarters of the world that don't believe your particular brand of superstition instead of killing your own science.
This Bloody Stupid Design theory of yours will never catch on: I personally prefer to call it Incompetent Design. That will leave the acronym intact as well. Much more to go at with that.
Just to put in my 2 cents. What IBM does is keep the financial sector operating. They are so firmly entrenched in practically every financial institute in the world that save from collapse of the entire financial sector (and thus the end of commerce) they are here to stay. What they do? They allow the financial institutes to pay them money to keep operating. Not a bad position at all.
The buttons in the middle of the contraption are also transferred to the mouse on the side. What I like about it is that you can steer the thing with a flat hand in front of your keyboard. This saves a lot of movement of the wrist which in my particular case leads to most trouble.
The disadvantage is that it is less accurate and fast than a real mouse, yet that's a small price to pay for actually being able to use a pointing device.
My personal favourite, the MouseTrapper. Completely mechanic, can use whatever old mouse you have lying around, and the motion you use are completely different from a regular mouse. It also doesn't break. I personally cannot use any mouse, not even those 'ergonomic' ones, as I will feel it in my wrists in a couple of days. I usually use a laptop with touchpad, but when I sit behind a desktop machine, this thingy really helps.
You might be able to take the artificial ones: genetic algorithms, or even better, genetic programming. Do two independent runs on the same problem. Start out with the same population, only change the initial random seed. Let the critters grow and evolve for, say, a hundred thousand generations. Now, check in each of the populations what the probabilities are of exchanging genetic material between members while still maintaining viable offspring. Now try that for members between populations. You will notice that the probabilities within the population are much higher than those between the populations, to such an extent that you can conclude that the two populations can really be considered different species of code, simply because they can't mix.
It is also kind of weird that the people that actually don't really care about religion need to protect themselves with one particular negative position towards the object of ridicule or another. I think the negative position is more suited for the theists. Therefore I suggest that we start asking people that tout their belief in god as either 'arational' (from the Latin root of 'ratio'), or 'acognitive' (also from Latin). Arational for those who actually think that arguing from a hopeless assertion as the existence of god has something to do with logical thought (ID and creationists fall into this school of 'thought'), and acognitive for the milder variant of people that simply suspend their mental faculties whenever the preacher or other figure of authority says so (the regular church-goer). So that leaves the following choices to level the playing field between the religious and the non-religious, pick one: atheist, agnostic, arational or acognitive?
First time I read the OP, I jumped to the same conclusion you seem to stick at. After a quick re-reading (which I usually do if I disagree with something) it stuck out that no such thing was going on. To quote the OP:
50% (more, actually, because there are many at the center of the curve) of Americans have an IQ of 100 or under.
Notice the presence of the word 'curve' and 'center', making quite clear that he indeed exactly means, what you so tirelessly try to correct. This curve of his might be the bell curve? Pretty sure it is. You actually quote this in the same post and STILL make the topmost remark. Tsk, careless.
Just to be completely clear, I think the OP's reasoning is not quite spotless as he seems to assume blatently that below average means inability to understand scientific thought. This might very well be the case in the US or anywhere else, but it does not follow from the definition of IQ. You can have a country with 100% practicing (and good) scientist and still 50% will have an IQ lower than 100, per definition.