So I guess I see why you would want a debugger, but for me if you need one, then you're already in trouble.
I guess I am:)
Actually, I do see your point - that debugging can be a bad habit to fall into if you use it as a substitute for good design.
The reason is that I am almost always working in a different way from you - I very rarely work on new code. Most of what I do is Java ports of existing projects. In that case, much of the logic was designed by someone else, and is often not that clear or well documented. Running debuggers in parallel - in the original language and in Java - is an invaluable way to follow through the logic and to check for inconsistencies and problems.
Another occasion when debuggers can be invaluable is when you are having problems with open source libraries and products. Being able to trace from your code into the library to investigate things - without having to insert your own statements into that code (which may in itself cause further problems, especially in multi-threaded situations) is incredibly useful.
There is another circumstance I have found where debuggers can be hugely useful. Occasionally I have some phenomenally complex algorithms to set up - some horror of business logic, or large mathematical model. The business logic or model itself may be speculative - it may be being retro-fitted to existing working practises and data. In this case, you have to develop in an iterative way, exploring the model and seeing how it reacts to changes and how it does or does not fit the required data. In this situation having 'print statement' and 'logger' debugging is great at telling you what is going wrong, but sometimes there is no substitute for a debugger to find out why.
But anyway - I have been using interactive debugging for over 30 years, and it has been part of the best development systems ever written - Smalltalk IDEs. I believe that for some development processes a good debugger is invaluable.
Sorry, but it is my understanding that an accessor function provides an interface which conceptually is identical to a public attribute, only with the option to override with a method in a subclass. If you add behaviour to an accessor function, it should not be of any concern to the user of the class, and therefore whether you use it as foobar.setFoo(42) or foobar.foo = 42 shouldn't matter at all. OTOH, if your accessor has publicly known side-effects then it's not really just an accessor, and it is IMO wrong to write it as an accessor.
This is a good point. Java does not have accessor functions - it has bean properties which is a far more powerful concept.
Write a real method, with an appropriate name indicating the intended behaviour and side-effects.
This breaks the use of bean properties where those properties aren't simple variable accessors.
In my view, this is the appropriate way to indicate additional behaviour:/**
* Retrieve the value of X from the database
* @return x
*/ public Object getX() {...}
Not
public Object getXFromDatabase() {...}
If you use the latter, you can't do useful things like have all sorts of tools handle the property.
And.. this breaks encapsulation - the the user of the class should neither know or care whether or not X comes from a database! The method that implemements that sort of functionality should be private.
Good OOP design implies that classes should be 'black boxes' with as little as possible of the internal mechanisms and states visible. Expressing the details of what goes on in terms of public method names is a bad idea.
I believe that is a case of language design being ruined by bad and wrong priorities. And I think this should be fixed in the Java language itself rather than swept under the carpet by a "helpful" IDE.
I think it is a step forward, showing how a language can encourage good coding practise and encapsulation. 'Fixing' it would make Java phenomenally less useful - in almost every Java project I develop, I use encapsulated bean properties like this in so many ways.
Yeah, like all those Java projects (Wordperfect? Sun's ports of the Lighthouse apps? Etc?) that were stillborn when the development teams ran into the quirk of Java that it couldn't be used for such applications.
The only issue (not a 'quirk') was speed. That issue has gone.
Those identifiers are evidence of the vast bureaucratic morass that Java has become. It's distinctly unsexy.
No - they are simply project labels. Python has similar labels for projects: PEPs. There are hundreds of them. Does this indicate that Python has become an 'unsexy bureaucratic morass'?
Which is probably part of the reason why people are seeking other platforms that are younger and haven't become weighed down by bureaucracy and committees.
What bureacracy and committees? These projects often involve just a few people. (For example, the BeanShell JSR has just one person on the expert group!)
I'm afraid this post looks like nothing more than an ill-informed rant against Java rather than a sensible criticism.
Creation is one approach at explaining the source of life in this universe.
I think there are problems with this idea. Life is just a particularly complicated set of chemical and physical reactions, and such complexity can arise spontaneously (some wonderful examples of life-like behaviour - including evolution with selection - has been recently seen in very simple molecules (short RNA strands) in the 'test tube').
I really think that Creationists (at least as I understand the term) are thinking on too narrow a scale. There are far broader mysteries to be solved, and these mysteries are recognised as such by most of the scientific community. These include the existence of conciousness, the nature of physical law and the existence of the Universe itself. My view is that these are valid areas for religious/philosophical investigation and debate. There are many respected scientists (such as the physicist John Polkingthorne) who share this view.
What troubles me is the sheer narrow-minded pettiness of the current Creationist/ID debate - where some are trying to battle with science on relatively small matters of how species change. There are far, far bigger (and more philosophically valid) things to think about.
To my mind, hampering scientists in their studies is revealing of a lack of faith; someone who feels that evolution cannot possibly exist should not worry about proof to the contrary ever emerging.
I think that is an extremely enlightened point of view. The problem is when those who have faith that evolution can't exist are faced with what is, to be honest, pretty much undeniable evidence that it does. The reaction seems to create 'fairy stories' about intelligent design, and to deny common descent etc. This seems to me to be the current tragicomic state of things.
But anyway - thanks for the discussion - I am enjoying it.
I tried to make a humorous comparison interesting at the same time!
Creationists are indeed free to accept speciation without accepting universal common descent.
Not really, as it makes no sense. It is about as sensible as imagining that, for example, the Earth does not orbit the Sun, but simply happens to find itself in a series of positions on certain days. It is about as sensible as not believing that your motor car has an engine and the 'magic gas' you put in moves it from place to place. The pattern of species over time reveals the 'engine' of evolution'.
You can, I suppose, accept it, but to expect other not to consider your point of view laughable is too much.
It seems you accept that recognition of the process evolution need not conflict with or compromise religious belief.
My view is that it is irrelevant whether or not it conflicts with or compromises religious belief. Science is about trying to find explanations for things and to discover what happens. There should be no barrier to this. Scientific investigation into evolution should no more be hampered by religious considerations that should any other aspect of science. Blocking or ignoring investigations in these areas is simply a way of trying to censor the truth.
It is up to religious people to cope with the findings of science in a mature way, and not to try and pretend that science has not made certain discoveries. It simply makes religious people look foolish. This is a point of view which is well-taken even by most religious people - I believe St Augustine backed this approach centuries ago.
Not only that, but their use could damage the reputation of the scientific community in the same way that their use destroyed the reputation of the religious community
The other options for the scientific community haven't worked - you can't debate rationally with creationists as they simply won't accept your arguments. You can't ignore them as they try to promote their imagined pseudo-science as equal to real science. What is left but ridicule?
However, if it seems to a creationist that the entire scientific community is laughing at them for a personal belief, they may be discouraged from interest in that community's findings.
This seems too optimistic to me - my impression is that someone who labels themselves as creationist has already decided that they aren't interested in scientific findings. Perhaps I am too cynical.
Creationists don't need to view the scientific community as an enemy, there should be no cause to do so.
I'm afraid that they do need to view the scientific community as an enemy, as they have good cause - the findings of the scientific community clearly and unquestionably threaten their core belief - that life needs a creator and that all species need some intelligence for their existence.
BTW, do you have any links to material re. the 'complex eye' debate? Perhaps an essay? Much obliged.
One of the most amusing discussions about eye evolution was from Richard Dawkins, regarding his mentor, John Maynard-Smith. "Anyone who thinks that only half an eye would not work should consider Maynard-Smith, who has not cleaned his glasses for a long time". Having met Maynard-Smith, I saw his point:)
Straw. You can just not develop something that's hundreds of thousands of lines of coupled nonsense. You modularize it and keep the code in smaller sections with clear interfaces which are graspable. Debugging should be a total last resort.
I disagree. Part of development should be the construction of tests. Quite regularly those tests will reveal wrong assumptions or bad code. One of the most useful ways to find out why the assumptions are wrong is to single step through the code and see what happens.
And I simply can't imagine trying to debug a multi-threaded web application passing information between many levels of user interface, business logic and database interface simply using print statements and logs. Being able to trace this with an IDE can save a phenomenal amount of time, in my experience.
Note that the first thing you said you needed in the language was a debugger: not a good standard library, not a flexible runtime engine, not a runtime shell like irb or clisp, not closures or good OO or fast reflection, but a debugger. I guess it just set me off.
No, what I meant was the first extra thing I needed! After all, Ruby (and lots of scripting languages) already has a shell, and a good library, closures etc. I can see how you reacted like that if you did not understand this, or if I was unclear.
Trust me, I know. I've been maintaining this shit.
GC causes all kinds of load spikes that can bog down end user apps and blow server apps clean out of the water. GC makes things "easier" for the developer at the expense of overall performance.
This used to be the case, but the performance of modern Java VMs shows this is definitely not the case these days. Java VMS don't get blown up and don't suffer load spikes, and the garbage collection is so efficient that Java can be (and is) used effectively for real-time and time-critical applications.
The moon/cheese theory has been disproved, as have many other silly theories. Neither evolution nor creation can be disproved, and evidence of one does not disprove the other.
Nonsense. They are very similar situations!
No matter how much evidence there is for evolution (and there is a phenomenal amount), the creationists can always say 'well, we don't know how that happened, so God or Aliens must have designed it'.
No matter how much evidence there is for the moon being rock (and there is a phenomenal amount), the cheese-believiers can always say 'well, we haven't actually sampled that part of the moon, so it could still be cheese'.
Whether or not creationism is scientific, there is no good cause for proponents of evolution to ridicule or persecute creationists.
Oh there is, believe me! Creationists come up with so much that is begging to be ridiculed! Statements like 'the eye is too complex to have evolved', or 'mutation can only degrate information, not add new stuff', or 'no-one has even seen a new species evolve'. Anyone with any knowledge would laugh at the 'cheese moon' theory - and this stuff is equivalent - almost deliberate stubborn ignorance of facts.
OK, but one important point here: you can't afford (time,memory) to let runtime compiler optimize java bytecode as long as you can with C++-like compiler.
Oh yes you can. The Java Hotspot optimiser starts to work effectively within a few seconds of the application working, and it can run in very little memory - it is available even for Java Micro Edition running in a few 100 KB.
Besides there's garbage collector, boundary checking, while you don't usually have that with C++ apps.
Garbage collection can be finely tuned, and run as a background thread that does not significantly affect either performance or time-critical operations. Boundary checking can very often be removed by the run-time code analysis of the Hotspo t optimiser on modern JVMs.
Without meaning to sound harsh, there seems to be an awful lot of posts in which statements are made about what Java can't do which directly contradict what Java is actually being used for these days.
I'm not bashing Java and similar platforms/languages, they are very nice solution for many areas, but not performance critical applications where every bit of speed is important.
Strangely, performance-critical applications is the area where Java is showing a lot of growth currently - real time systems, aeronautics etc. It is becoming a serious alternative to Ada in these areas.
Seriously, though, half the problem with some of these new environments is over-complexity for a task (I'm looking at you, Java). The fact that you think you need an IDE and eg., multithreaded debugging to make the environment work show that you're in that over-complex world.
Sorry, but this is nonsense. There is absolutely no substitute for being able to stop code and inspect variables and debug things. The most powerful development environments of the past decades (Smalltalk, LISP etc) have had this, and anything else is inadequate.
When you see an old-timer validate his code because it itself allows for inspection and dumping state, *and* has such a simple internal structure that you can understand the working parts, you realize that the IDE crowd missed something.
More nonsense. I am an old-timer - I have been developing for 30 years. The idea that you can develop multi-threaded applications of hundreds of thousands of lines of code simply using 'print statement' debugging and looking a code by eye is sheer wishful thinking.
The so-called 'IDE Crowd' have been leading the way in the way in software development techniques for over 30 years. The idea that we should put up with less is ridiculous.
The word "dare" implies boldness. To "dare" is to face any persecution, including ridicule.
The true definition of "daring" usually implies that someone is courageous and is facing danger. To equate such ridicule with the true danger that has often been faced by those to truly dare to challenge religious institutions is truly to invite ridicule.....Sounds awfully like persecution to me.
Your definition of 'persecution' is obviously not mine.
Let me repeat - anyone can challenge the scientific consensus. But in order to do it you have to be prepared to put up a logical and reasoned argument with evidence. Why should ID proponents expect special treatment and expect anything else but ridicule when they fail to do this, any more than someone who was trying to challenge the cosmologist with a theory that God made the moon out of cheese?
The idea that Creationists/IDer are somehow being 'persecuted' by the scientific comunity simply because many are laughing at them and their ideas is very silly indeed, and cheapens whatever debate their might be.
It is not unusual that a strong personality who has had publications rejected will put forward accusations of some sort of 'conspiracy' against them. This happens in all sorts of areas of science.
You may wish to note that there was serious debate about the Steinberg matter; at no time did he risk excommunication, banishment or various forms of execution - punishments for questioning religious institutions that still happen today.
What would you need to add to "elevate" it from a "scripting language" to whatever you consider Java?
For me, the first thing I would want is a decent open source IDE that would allow multi-threaded debugging of Ruby apps.
Re:Loving complexity for complexity's sake
on
Ruby Off the Rails
·
· Score: 1
Only crappy developers. The better ones understand that software development (not just coding, but analysis, architecture, and design) is actually a process of documenting, managing, and reducing complexity, to the greatest extent possible.
That is not good software development. Good software development is about putting the appropriate amount of complexity.
The debate seems to be between those who support the 'get something simple up and running as soon as possible' (reduce all complexity to a minimum) approach and those who support the 'make sure that all applications have the potential to be extended and scaled up and high-performance if required' approach.
In my experience, the first approach can often lead to huge problems later.
Funny. C++ is native language with very good performance, while Java and friends are here only because of simplicity of deployment and standard platform.
Java is certainly native language, and has been for years. The only difference is that the compilation is done at run time.
In some ways Java is MORE native language than C++, as the VM can produce tailored and optimised machine code for the specific processor you are running on, whereas C++ has to be compiled in advance for the processor the developer assumes you are running on. As development moves to 64-bit processors on popular platforms, this can be an enormous advantage.
If we take the perspective of somebody reading the Javadocs, on the other hand, having the comment does convey some information.
Exactly - I think you are finally starting to get the point.
No, you've failed to understand the feature here. There's no limitation at all. In the case of Ruby, for example, there are no publicly accessible instance fields at all. All interaction with an object must be through method invocations. If you need trivial getters and setters, there's a class method that uses the language's dynamic features to define them for you on the fly--you just say attr_accessor:foo,:bar, and voilà, you've got yourself getters and setters for foo and bar. If you need non-trivial getters or setters, you just write them by hand.
Of course I understand the feature. I use it.
If the point of getters and setters is to encapsulate access to conceptual "properties" of objects, then whether a particular getter/setter pair is trivial is exactly the sort of thing we're trying to hide from the clients, and thus, it's not relevant information for the comment.
You are missing the point. The information does not need to be hidden from the client - it needs to be hidden from tools and APIs that use the 'accessor' methods. There is no harm in letting a client (or other developer who uses your code) know that a getXXX method does something more complex; that is the point of comments.
As to proxies: I've had to write proxy implementations of the JDBC interfaces. Ugh, that is hell.
You may want to take a look at Spring (www.springframework.org) - it provides libraries that can hugely simplify JDBC use.
Anyhow... considering that you posted about 20 posts on this one topic and all of them (well, all that I read) were talking about how Java was good and Ruby (and Rails) was bad I don't think we'll ever agree.
I really, really like Ruby. It is a beautiful language and I use it a lot, often along with Java. But this does mean that I don't recognise it's disadvantage. Lack of speed is one of them.
One theme I noticed was an apparent misunderstanding of what Rails is. It isn't just ActiveRecord... it's a whole MVC architecture.
I know that - I have used it, and I have been using MVC architectures since the 80s (in Smalltalk).
If you think that MVC is a bad idea you might want to let a whole list of popular / sucessful projects know that they can stop waisting their time.
Of course it is not a bad idea! When did I ever say that? I use MVC all the time these days - both in Swing and in JSF.
Thing is, all those advancements are easy to break, fine natural or not, but if it keeps going like this it'll be the equivalent of not being able to breath unless you're hooked to the Internet... You wouldn't want the router to go down, would you.
It is hardly like that for most people most of the time. But so what if it is, as long as we have backup systems? After all, look at the number of people who fly - and that is certainly a fragile situation (it certainly scares me).
Oh. It occurs to me that you may have missed that we are talking about automatically generated accessor functions
No, I hadn't.
Please explain to me how an automatically generated (thus presumably trivial) accessor function can have automatically generated comments that are not absolutely trivial.
It can't, but that is not the point. The trival comments indicate that the method is doing something trivial, as against something non-trivial (see below).
I agree that an accessor function could be bestowed with additional functionality, but then: - It might cross the border where it ceases to be just an accessor function, and should be named according to its behaviour, rather than getFoo/setFoo.
I don't like this idea, as it breaks encapsulation - it is perfectly acceptable for a Java class 'bean property' (indicated by the presence of setXXX or getXXX methods) to not actually exist as an instance variable in the class. What may look like a simple accessor is actually getting a value by some other mechanism. However, to the code that uses this class (or looks at its properties by introspection) this is nicely hidden. This allows things like proxy instances to work neatly - the apparent accessor functions actually divert to another instance to retrieve or store values.
Perhaps in Java 6 we'll see something like:
class Foobar { public Foo foo;... }
being taken as shorthand for:
class Foobar { private Foo foo; public Foo getFoo() { return foo; }; public void setFoo(Foo newfoo) { foo = newfoo; }... }
I really hope not, as it would prevent things like I have mentioned above working.
If I remember correctly, Dylan does accessor functions more or less like this. Probably other languages do too. Ruby is arguably one of them. +1 for Ruby.
This is potentially limiting, as it tries to make accessor functions limited and special in what they do.
Using accessor functions only as ways to access instance variables in this way is far too restrictive. I think Java's more general use of these functions is more powerful, and this explains why you do need comments - to explain that this really is only a simple variable accessor!
Which is a very arrogant thing to say. It assumes we are somehow 'not natural'. We are not the only animals to use medication - many others know which plants to eat or what to do to help cure illnesses.
Humans using their natural brains to help ill people is entirely natural.
More and more, creationists are becoming the underdogs, ridiculed and chastised for daring to challenge the scientific community.
Where does the 'daring' come from? Anyone can challenge the scientific community - science thrives on challenge. I don't see why it is daring - after all, challenging science does not lead to persecution, excommunication or physical punishment, in the way that challenges to the 'religious community' did in the past.
Creationists aren't being 'daring', unlike Galileo and Copernicus who suffered for their science. They are simply being ridiculed for either being ignorant or subbornly refusing to accept evidence.
So I guess I see why you would want a debugger, but for me if you need one, then you're already in trouble.
:)
I guess I am
Actually, I do see your point - that debugging can be a bad habit to fall into if you use it as a substitute for good design.
The reason is that I am almost always working in a different way from you - I very rarely work on new code. Most of what I do is Java ports of existing projects. In that case, much of the logic was designed by someone else, and is often not that clear or well documented. Running debuggers in parallel - in the original language and in Java - is an invaluable way to follow through the logic and to check for inconsistencies and problems.
Another occasion when debuggers can be invaluable is when you are having problems with open source libraries and products. Being able to trace from your code into the library to investigate things - without having to insert your own statements into that code (which may in itself cause further problems, especially in multi-threaded situations) is incredibly useful.
There is another circumstance I have found where debuggers can be hugely useful. Occasionally I have some phenomenally complex algorithms to set up - some horror of business logic, or large mathematical model. The business logic or model itself may be speculative - it may be being retro-fitted to existing working practises and data. In this case, you have to develop in an iterative way, exploring the model and seeing how it reacts to changes and how it does or does not fit the required data. In this situation having 'print statement' and 'logger' debugging is great at telling you what is going wrong, but sometimes there is no substitute for a debugger to find out why.
But anyway - I have been using interactive debugging for over 30 years, and it has been part of the best development systems ever written - Smalltalk IDEs. I believe that for some development processes a good debugger is invaluable.
Sorry, but it is my understanding that an accessor function provides an interface which conceptually is identical to a public attribute, only with the option to override with a method in a subclass. If you add behaviour to an accessor function, it should not be of any concern to the user of the class, and therefore whether you use it as foobar.setFoo(42) or foobar.foo = 42 shouldn't matter at all. OTOH, if your accessor has publicly known side-effects then it's not really just an accessor, and it is IMO wrong to write it as an accessor.
/**
This is a good point. Java does not have accessor functions - it has bean properties which is a far more powerful concept.
Write a real method, with an appropriate name indicating the intended behaviour and side-effects.
This breaks the use of bean properties where those properties aren't simple variable accessors.
In my view, this is the appropriate way to indicate additional behaviour:
* Retrieve the value of X from the database
* @return x
*/
public Object getX() {...}
Not
public Object getXFromDatabase() {...}
If you use the latter, you can't do useful things like have all sorts of tools handle the property.
And.. this breaks encapsulation - the the user of the class should neither know or care whether or not X comes from a database! The method that implemements that sort of functionality should be private.
Good OOP design implies that classes should be 'black boxes' with as little as possible of the internal mechanisms and states visible. Expressing the details of what goes on in terms of public method names is a bad idea.
I believe that is a case of language design being ruined by bad and wrong priorities. And I think this should be fixed in the Java language itself rather than swept under the carpet by a "helpful" IDE.
I think it is a step forward, showing how a language can encourage good coding practise and encapsulation. 'Fixing' it would make Java phenomenally less useful - in almost every Java project I develop, I use encapsulated bean properties like this in so many ways.
Yeah, like all those Java projects (Wordperfect? Sun's ports of the Lighthouse apps? Etc?) that were stillborn when the development teams ran into the quirk of Java that it couldn't be used for such applications.
The only issue (not a 'quirk') was speed. That issue has gone.
Those identifiers are evidence of the vast bureaucratic morass that Java has become. It's distinctly unsexy.
No - they are simply project labels. Python has similar labels for projects: PEPs. There are hundreds of them. Does this indicate that Python has become an 'unsexy bureaucratic morass'?
Which is probably part of the reason why people are seeking other platforms that are younger and haven't become weighed down by bureaucracy and committees.
What bureacracy and committees? These projects often involve just a few people. (For example, the BeanShell JSR has just one person on the expert group!)
I'm afraid this post looks like nothing more than an ill-informed rant against Java rather than a sensible criticism.
And we havent even figured out how to get enough energy into a single stage ship to get to orbit.
e pt_and_its_unique_operations.shtml
Yes we have. Remember the Roton project?
http://www.spacefuture.com/archive/the_roton_conc
Creation is one approach at explaining the source of life in this universe.
I think there are problems with this idea. Life is just a particularly complicated set of chemical and physical reactions, and such complexity can arise spontaneously (some wonderful examples of life-like behaviour - including evolution with selection - has been recently seen in very simple molecules (short RNA strands) in the 'test tube').
I really think that Creationists (at least as I understand the term) are thinking on too narrow a scale. There are far broader mysteries to be solved, and these mysteries are recognised as such by most of the scientific community. These include the existence of conciousness, the nature of physical law and the existence of the Universe itself. My view is that these are valid areas for religious/philosophical investigation and debate. There are many respected scientists (such as the physicist John Polkingthorne) who share this view.
What troubles me is the sheer narrow-minded pettiness of the current Creationist/ID debate - where some are trying to battle with science on relatively small matters of how species change. There are far, far bigger (and more philosophically valid) things to think about.
To my mind, hampering scientists in their studies is revealing of a lack of faith; someone who feels that evolution cannot possibly exist should not worry about proof to the contrary ever emerging.
I think that is an extremely enlightened point of view. The problem is when those who have faith that evolution can't exist are faced with what is, to be honest, pretty much undeniable evidence that it does. The reaction seems to create 'fairy stories' about intelligent design, and to deny common descent etc. This seems to me to be the current tragicomic state of things.
But anyway - thanks for the discussion - I am enjoying it.
Yes, but how many lines of genetic code would it take to do this:
print "Hello world!"
Assuming you are a human poster... about 3 billion
Interesting comparison to mooncheese.
0 11_01.html
:)
I tried to make a humorous comparison interesting at the same time!
Creationists are indeed free to accept speciation without accepting universal common descent.
Not really, as it makes no sense. It is about as sensible as imagining that, for example, the Earth does not orbit the Sun, but simply happens to find itself in a series of positions on certain days. It is about as sensible as not believing that your motor car has an engine and the 'magic gas' you put in moves it from place to place. The pattern of species over time reveals the 'engine' of evolution'.
You can, I suppose, accept it, but to expect other not to consider your point of view laughable is too much.
It seems you accept that recognition of the process evolution need not conflict with or compromise religious belief.
My view is that it is irrelevant whether or not it conflicts with or compromises religious belief. Science is about trying to find explanations for things and to discover what happens. There should be no barrier to this. Scientific investigation into evolution should no more be hampered by religious considerations that should any other aspect of science. Blocking or ignoring investigations in these areas is simply a way of trying to censor the truth.
It is up to religious people to cope with the findings of science in a mature way, and not to try and pretend that science has not made certain discoveries. It simply makes religious people look foolish. This is a point of view which is well-taken even by most religious people - I believe St Augustine backed this approach centuries ago.
Not only that, but their use could damage the reputation of the scientific community in the same way that their use destroyed the reputation of the religious community
The other options for the scientific community haven't worked - you can't debate rationally with creationists as they simply won't accept your arguments. You can't ignore them as they try to promote their imagined pseudo-science as equal to real science. What is left but ridicule?
However, if it seems to a creationist that the entire scientific community is laughing at them for a personal belief, they may be discouraged from interest in that community's findings.
This seems too optimistic to me - my impression is that someone who labels themselves as creationist has already decided that they aren't interested in scientific findings. Perhaps I am too cynical.
Creationists don't need to view the scientific community as an enemy, there should be no cause to do so.
I'm afraid that they do need to view the scientific community as an enemy, as they have good cause - the findings of the scientific community clearly and unquestionably threaten their core belief - that life needs a creator and that all species need some intelligence for their existence.
BTW, do you have any links to material re. the 'complex eye' debate? Perhaps an essay? Much obliged.
Yes, of course:
http://www.pbs.org/wgbh/evolution/library/01/1/l_
One of the most amusing discussions about eye evolution was from Richard Dawkins, regarding his mentor, John Maynard-Smith. "Anyone who thinks that only half an eye would not work should consider Maynard-Smith, who has not cleaned his glasses for a long time". Having met Maynard-Smith, I saw his point
Straw. You can just not develop something that's hundreds of thousands of lines of coupled nonsense. You modularize it and keep the code in smaller sections with clear interfaces which are graspable. Debugging should be a total last resort.
I disagree. Part of development should be the construction of tests. Quite regularly those tests will reveal wrong assumptions or bad code. One of the most useful ways to find out why the assumptions are wrong is to single step through the code and see what happens.
And I simply can't imagine trying to debug a multi-threaded web application passing information between many levels of user interface, business logic and database interface simply using print statements and logs. Being able to trace this with an IDE can save a phenomenal amount of time, in my experience.
Note that the first thing you said you needed in the language was a debugger: not a good standard library, not a flexible runtime engine, not a runtime shell like irb or clisp, not closures or good OO or fast reflection, but a debugger. I guess it just set me off.
No, what I meant was the first extra thing I needed! After all, Ruby (and lots of scripting languages) already has a shell, and a good library, closures etc. I can see how you reacted like that if you did not understand this, or if I was unclear.
Trust me, I know. I've been maintaining this shit.
Me too - since the 70s.
GC causes all kinds of load spikes that can bog down end user apps and blow server apps clean out of the water. GC makes things "easier" for the developer at the expense of overall performance.
This used to be the case, but the performance of modern Java VMs shows this is definitely not the case these days. Java VMS don't get blown up and don't suffer load spikes, and the garbage collection is so efficient that Java can be (and is) used effectively for real-time and time-critical applications.
The moon/cheese theory has been disproved, as have many other silly theories. Neither evolution nor creation can be disproved, and evidence of one does not disprove the other.
Nonsense. They are very similar situations!
No matter how much evidence there is for evolution (and there is a phenomenal amount), the creationists can always say 'well, we don't know how that happened, so God or Aliens must have designed it'.
No matter how much evidence there is for the moon being rock (and there is a phenomenal amount), the cheese-believiers can always say 'well, we haven't actually sampled that part of the moon, so it could still be cheese'.
Whether or not creationism is scientific, there is no good cause for proponents of evolution to ridicule or persecute creationists.
Oh there is, believe me! Creationists come up with so much that is begging to be ridiculed! Statements like 'the eye is too complex to have evolved', or 'mutation can only degrate information, not add new stuff', or 'no-one has even seen a new species evolve'. Anyone with any knowledge would laugh at the 'cheese moon' theory - and this stuff is equivalent - almost deliberate stubborn ignorance of facts.
OK, but one important point here: you can't afford (time,memory) to let runtime compiler optimize java bytecode as long as you can with C++-like compiler.
Oh yes you can. The Java Hotspot optimiser starts to work effectively within a few seconds of the application working, and it can run in very little memory - it is available even for Java Micro Edition running in a few 100 KB.
Besides there's garbage collector, boundary checking, while you don't usually have that with C++ apps.
Garbage collection can be finely tuned, and run as a background thread that does not significantly affect either performance or time-critical operations. Boundary checking can very often be removed by the run-time code analysis of the Hotspo t optimiser on modern JVMs.
Without meaning to sound harsh, there seems to be an awful lot of posts in which statements are made about what Java can't do which directly contradict what Java is actually being used for these days.
I'm not bashing Java and similar platforms/languages, they are very nice solution for many areas, but not performance critical applications where every bit of speed is important.
Strangely, performance-critical applications is the area where Java is showing a lot of growth currently - real time systems, aeronautics etc. It is becoming a serious alternative to Ada in these areas.
Seriously, though, half the problem with some of these new environments is over-complexity for a task (I'm looking at you, Java). The fact that you think you need an IDE and eg., multithreaded debugging to make the environment work show that you're in that over-complex world.
Sorry, but this is nonsense. There is absolutely no substitute for being able to stop code and inspect variables and debug things. The most powerful development environments of the past decades (Smalltalk, LISP etc) have had this, and anything else is inadequate.
When you see an old-timer validate his code because it itself allows for inspection and dumping state, *and* has such a simple internal structure that you can understand the working parts, you realize that the IDE crowd missed something.
More nonsense. I am an old-timer - I have been developing for 30 years. The idea that you can develop multi-threaded applications of hundreds of thousands of lines of code simply using 'print statement' debugging and looking a code by eye is sheer wishful thinking.
The so-called 'IDE Crowd' have been leading the way in the way in software development techniques for over 30 years. The idea that we should put up with less is ridiculous.
The word "dare" implies boldness. To "dare" is to face any persecution, including ridicule.
....Sounds awfully like persecution to me.
The true definition of "daring" usually implies that someone is courageous and is facing danger. To equate such ridicule with the true danger that has often been faced by those to truly dare to challenge religious institutions is truly to invite ridicule.
Your definition of 'persecution' is obviously not mine.
Let me repeat - anyone can challenge the scientific consensus. But in order to do it you have to be prepared to put up a logical and reasoned argument with evidence. Why should ID proponents expect special treatment and expect anything else but ridicule when they fail to do this, any more than someone who was trying to challenge the cosmologist with a theory that God made the moon out of cheese?
The idea that Creationists/IDer are somehow being 'persecuted' by the scientific comunity simply because many are laughing at them and their ideas is very silly indeed, and cheapens whatever debate their might be.
It is not unusual that a strong personality who has had publications rejected will put forward accusations of some sort of 'conspiracy' against them. This happens in all sorts of areas of science.
You may wish to note that there was serious debate about the Steinberg matter; at no time did he risk excommunication, banishment or various forms of execution - punishments for questioning religious institutions that still happen today.
What would you need to add to "elevate" it from a "scripting language" to whatever you consider Java?
For me, the first thing I would want is a decent open source IDE that would allow multi-threaded debugging of Ruby apps.
Only crappy developers. The better ones understand that software development (not just coding, but analysis, architecture, and design) is actually a process of documenting, managing, and reducing complexity, to the greatest extent possible.
That is not good software development. Good software development is about putting the appropriate amount of complexity.
The debate seems to be between those who support the 'get something simple up and running as soon as possible' (reduce all complexity to a minimum) approach and those who support the 'make sure that all applications have the potential to be extended and scaled up and high-performance if required' approach.
In my experience, the first approach can often lead to huge problems later.
Funny. C++ is native language with very good performance, while Java and friends are here only because of simplicity of deployment and standard platform.
Java is certainly native language, and has been for years. The only difference is that the compilation is done at run time.
In some ways Java is MORE native language than C++, as the VM can produce tailored and optimised machine code for the specific processor you are running on, whereas C++ has to be compiled in advance for the processor the developer assumes you are running on. As development moves to 64-bit processors on popular platforms, this can be an enormous advantage.
If we take the perspective of somebody reading the Javadocs, on the other hand, having the comment does convey some information.
:foo, :bar, and voilà, you've got yourself getters and setters for foo and bar. If you need non-trivial getters or setters, you just write them by hand.
Exactly - I think you are finally starting to get the point.
No, you've failed to understand the feature here. There's no limitation at all. In the case of Ruby, for example, there are no publicly accessible instance fields at all. All interaction with an object must be through method invocations. If you need trivial getters and setters, there's a class method that uses the language's dynamic features to define them for you on the fly--you just say attr_accessor
Of course I understand the feature. I use it.
If the point of getters and setters is to encapsulate access to conceptual "properties" of objects, then whether a particular getter/setter pair is trivial is exactly the sort of thing we're trying to hide from the clients, and thus, it's not relevant information for the comment.
You are missing the point. The information does not need to be hidden from the client - it needs to be hidden from tools and APIs that use the 'accessor' methods. There is no harm in letting a client (or other developer who uses your code) know that a getXXX method does something more complex; that is the point of comments.
As to proxies: I've had to write proxy implementations of the JDBC interfaces. Ugh, that is hell.
You may want to take a look at Spring (www.springframework.org) - it provides libraries that can hugely simplify JDBC use.
Anyhow... considering that you posted about 20 posts on this one topic and all of them (well, all that I read) were talking about how Java was good and Ruby (and Rails) was bad I don't think we'll ever agree.
I really, really like Ruby. It is a beautiful language and I use it a lot, often along with Java. But this does mean that I don't recognise it's disadvantage. Lack of speed is one of them.
One theme I noticed was an apparent misunderstanding of what Rails is. It isn't just ActiveRecord... it's a whole MVC architecture.
I know that - I have used it, and I have been using MVC architectures since the 80s (in Smalltalk).
If you think that MVC is a bad idea you might want to let a whole list of popular / sucessful projects know that they can stop waisting their time.
Of course it is not a bad idea! When did I ever say that? I use MVC all the time these days - both in Swing and in JSF.
What I dislike is Rails' implementation of it.
Thing is, all those advancements are easy to break, fine natural or not, but if it keeps going like this it'll be the equivalent of not being able to breath unless you're hooked to the Internet... You wouldn't want the router to go down, would you.
It is hardly like that for most people most of the time. But so what if it is, as long as we have backup systems? After all, look at the number of people who fly - and that is certainly a fragile situation (it certainly scares me).
Oh. It occurs to me that you may have missed that we are talking about automatically generated accessor functions
... }
... }
No, I hadn't.
Please explain to me how an automatically generated (thus presumably trivial) accessor function can have automatically generated comments that are not absolutely trivial.
It can't, but that is not the point. The trival comments indicate that the method is doing something trivial, as against something non-trivial (see below).
I agree that an accessor function could be bestowed with additional functionality, but then:
- It might cross the border where it ceases to be just an accessor function, and should be named according to its behaviour, rather than getFoo/setFoo.
I don't like this idea, as it breaks encapsulation - it is perfectly acceptable for a Java class 'bean property' (indicated by the presence of setXXX or getXXX methods) to not actually exist as an instance variable in the class. What may look like a simple accessor is actually getting a value by some other mechanism. However, to the code that uses this class (or looks at its properties by introspection) this is nicely hidden. This allows things like proxy instances to work neatly - the apparent accessor functions actually divert to another instance to retrieve or store values.
Perhaps in Java 6 we'll see something like:
class Foobar { public Foo foo;
being taken as shorthand for:
class Foobar { private Foo foo; public Foo getFoo() { return foo; }; public void setFoo(Foo newfoo) { foo = newfoo; }
I really hope not, as it would prevent things like I have mentioned above working.
If I remember correctly, Dylan does accessor functions more or less like this. Probably other languages do too. Ruby is arguably one of them. +1 for Ruby.
This is potentially limiting, as it tries to make accessor functions limited and special in what they do.
Using accessor functions only as ways to access instance variables in this way is far too restrictive. I think Java's more general use of these functions is more powerful, and this explains why you do need comments - to explain that this really is only a simple variable accessor!
Breaking the natural selection.
Which is a very arrogant thing to say. It assumes we are somehow 'not natural'. We are not the only animals to use medication - many others know which plants to eat or what to do to help cure illnesses.
Humans using their natural brains to help ill people is entirely natural.
More and more, creationists are becoming the underdogs, ridiculed and chastised for daring to challenge the scientific community.
Where does the 'daring' come from? Anyone can challenge the scientific community - science thrives on challenge. I don't see why it is daring - after all, challenging science does not lead to persecution, excommunication or physical punishment, in the way that challenges to the 'religious community' did in the past.
Creationists aren't being 'daring', unlike Galileo and Copernicus who suffered for their science. They are simply being ridiculed for either being ignorant or subbornly refusing to accept evidence.
I must conclude that you don't think
/* increment i */ is silly either.
i++;
Let's just leave it there, then.
Why conclude that? That statement (at least in a language which does not have operator overloading) is self-evident.
However, in the example of a setter or getter, what happens is not self-evident, as the method may end up doing more than just setting or getting.
So, simple comments at a method level, even if they indicate that somethings is just a setter or getter, are certainly not redundant.
When will they realize that just because it's blurred out in the picture, doesn't mean the building disappeared?
It just means someone was taking it away real fast.