The video conferencing and internet voice programs back in the 90s didn't really take off (remember ICU?). This was not because it was a bad idea, but simply that bandwidth and communications technology still had some time to go before VoIP became feasible.
Anonymity software suffers from the same problems. There's a large bandwidth and latency overhead, and the technology is currently in a premature state. We're seeing a lull in anonymity networks, just like there was a lull in VoIP.
It might seem presumptious of me, but I have some solid reasons for believing this. Firstly, there are a number of online applications that have a theoretical upper limit on how much network resource are needed. Taking VoIP as an example, you could continue increasing the quality of the voice line, but beyond a certain point this gets less and less important. You don't need audiophile quality on your phoneline.
As bandwidth outstrips need, and VoIP technology becomes more widely available, anonymous VoIP networks will become more and more feasible. And, indeed, you can apply the same line of reasoning to any service limited by the resolution of human senses. This doesn't guarentee a rosy anonymous future, but it does make it more likely.
Whilst this appears to be a common claim from the Premier League, it's debatable whether this tactic holds water. As far as I'm aware, it has not yet been tested in court.
How do we know ? If the new photon is identical to the old, and the absorption/readmission has no observable effect, how do we know it took place at all ?
A number of reasons, not all of which I know enough about to comment on. The photoelectric effect demonstrates that light can liberate electrons from atoms; high enough frequencies of light create small amounts of static electricity in metals. We also know the opposite can occur; that an electric current can produce photons, which is how LEDs work.
So from these two examples, we know that atoms can absorb and readmit photons. We also know that photons, as the carriers of light, cannot be slowed down by a force, according to Relativity. If the photons themselves are not slowing down, then something else needs to explain this activity. And though the patch of light within a solid sometimes isn't a straight line, this change in direction isn't enough to account for the decrease in speed. Further, most transparent mediums don't bend light at all, and yet we still see a decrease in speed.
If we rule out all that, the only thing left is absorption/readmission, and coincidentally enough, we know that atoms can do just this.
There are likely a lot more reasons, but that's beyond the scope of my knowledge. Suffice to say that no scientist seems to be questioning this idea, suggesting that it has some solid grounding and evidence.
Whilst the GP is a little confused, most of your rebuttals are worse, because they're completely incorrect.
Current physics says that photons are massless particles that travel at a constant speed c. This speed is independant of the motion of the observer, and independant of the forces acting upon the photons. Incidentally, we have pretty good evidence for all this.
Light waves slow down in a solid medium, but the individual photons do not. The GP is correct in asserting that the slowdown of a light wave is caused by a process of absorption/readmission of photons. This is due to the quantum mechanical processes of excitation and de-excitation. If you've pursued physics past high school level, you'll certainly have done some experiments on this phenomenon.
You assert that photons don't always travel at c, but think about this. If this were true, then the photons are being decelerated by a force. This force could equally be applied to photons in empty space, which would mean that the speed of light in a vacuum was variable. Whilst this may be what occurs, current experimental evidence suggests otherwise.
As for the GP's muddle over distance and time, I can only assume he refers to relativistic time dilation.
Co-routines are supposed to be implemented in the next major Python update. I believe it's going to be just an extention of the yield keyword:
def coroutine(x):
while True:
x = yield 2 * x
Whilst the loss of map is no great loss, since list comprehensions handle it pretty well:
def map(f, l):
return [f(i) for i in l]
Though I must say that I agree with your point in general. I use Python a lot, and my biggest gripe is along the same lines as yours. Namely, why can't I modify the methods and values of built-in types like str and int?
That doesn't seem that much shorter than plain old Java, and if you're going to be loading up properties files, why not use the Property class instead of trying to manually read it in?
StringBuffer buffer = new StringBuffer();
buffer.append("<html>"); buffe r.append("<head><title>All your Property Files!</title></head>"); buffer.append("<body>");
for (File file : new File(context.getRealPath("/WEB-INF")).listFiles()) {
if (file.getName().endsWith(".properties")) {
Properties props = new Properties();
props.load(new FileInputStream(file));
We might actually be on the same wavelength here - maybe not. Hard to tell since it is impossible to be clear without qualifying every statement with who is moving where relative to what and who is taking the measurements...
It might help to repeat the question I was originally replying to. n8k99 asked:
So if I'm in an elevator, falling at the speed of light, and I turn on the light switch in the elevator, will I be able to see the electrons as they get stuck in the wires between the switch and the light, because they can not move at any speed but c?
So n8k99 is asking what he would observe if he were in an elevator E, falling at speed c with respect to the elevator shaft S. I am pointing out that if one were travelling at c relative to another object S, no time would pass for you relative to the time that has passed for S.
Of course, this thought experience is not possible in reality, at least according to relativity, as nothing with mass can accelerate to c relative to another object. But just because something is impossible, does not prevent one from thinking about it. Indeed, some of Einstein's most telling revelations in Special Realivity came from him imagining what would happen to an observer if they could ride upon a beam of light.
If you were on an elevator travelling at the speed of light, you wouldn't observe anything different at all inside your frame of reference - it is only when you look at outside that things get really wierd.
Except that if you were on an elevator E travelling at the speed of light realtive to a object A, you'd have to travel an infinite distance relative to A in order for any time to pass in E. In short, if I were on an elevator, which accelerated to c, then travelled 200 billion lightyears, and then decelerated, from my reference point zero time will have passed in those 200 billion lightyears. So I can't observe anything at a speed of c, because no time passes in my reference frame between when I start, and when I stop. The very moment I start travelling at c away from an object A, is also the exact moment I stop travelling at c.
Ignoring the fact that relativity says that accelerating to c is impossible, of course;)
If it were any different than there would be an absolute frame of reference that is truly motionless. If you could tell your velocity without looking out the window by strange effects inside the elevator then you'd be able to figure out how fast you're going against some outside frame of reference that you can't even see. If that were true we could closely observe our own world and figure out how fast the earth is moving compared to some absolute frame of reference. There are no absolute frames of reference though, so there is no way to say that an elevator is moving at any speed at all if you consider it in isolation...
But I'm not considering it in isolation. I'm considering it in respect to another object.
Right now, the Earth is actually moving at the speed of light compared to some object at the other side of the expanding univerise - the further apart two objects in the universe are, the faster they receede. At some point the speed equals the speed of light (as measured by an observer halfway in-between).
The key point here is the third party observer. To a third party observer, an object may be receeding from the Earth at the speed of light, but to us, that same object is receeding at less than the speed of light. With the elevator example, the elevator is moving at a velocity of c, relative to another reference frame. This is the different from your far-off object, which is moving at c away from the Earth from the perspective of a third reference frame.
Whilst the elevator is in motion it would take an infinitely long period of time in our reference frame for a single instance to pass in the elevator's reference frame. Or, to put it another way, no time will ever pass within the elevator whilst it is moving. Thus, there is no time to observe any effects within the elevator, as from the passenger's point of view, they'll always spend zero time travelling at lightspeed.
So if I'm in an elevator, falling at the speed of light, and I turn on the light switch in the elevator, will I be able to see the electrons as they get stuck in the wires between the switch and the light, because they can not move at any speed but c?
If you were falling at the speed of light, time would be stopped for you, so you wouldn't see anything.
Er... Did you read my post? Specifically, the bit where I point out that no scientific theory can be proved? Evolution is no less valid than theories on relativity, quantum entanglment, gravity or electromagnetism, none of which can be proven, either.
Evolution spans too great a period for observation.
One can observe it through the fossil record. This is no less valid than astronomy, where scientists observe the radiation from events that occurred in the far distant past.
Although it is possible in some circumstances to show evidence of Natural Selection, this does not prove Evolution. It merely proves a fact that is well-known; that is, a fact that is acknowledged by ID theorists and Darwinist theorists both. Natural Selection is merely a reduction of genes, not an expansion of genes in the organism.
I'm sorry, you've lost me. Natural selection a reduction of genes? Why would less genes result in animals more adept at surviving?
It could be argued that Darwinism does not make any experimental predictions.
Er, with respect, what the hell are you talking about? Evolution has been predicting things ever since Darwin proposed that humans evolved from apes. This led scientists to propose that, according to the theory of evolution, there should be fossils of our ape-like ancestors lying around. Years later, this prediction was borne out by the discovery of Lucy and similar fossil hominids.
As Darwinism cannot be conclusively proved (nor, at this point, have major parts of many of the theories on which many scientists today base their findings)
No scientific theory can be, or has ever been, proved. Theories are disproved. Those theories that have survived a significant period of time without being disproved are treated as likely to be correct, and these are the theories that are taught in science classrooms.
ID is not science, because it does not meet the minimum requirements of a scientific theory. It is not disprovable by observation, and makes no experimental predictions. Because it is not science, it makes no more sense to teach it in a science class, than it would be to study Shakespeare in a metalworking class.
Once again, I'm not advocating ID as an alternative to the fairly well established theory of evolution. In fact, I'm not advocating it at all; I don't think it happened. At best it's a weak explanation for the appearance of life millions of years ago, and it still begs the question of the origins of the designer.
It's not that at all. ID does not meet the definition of a scientific theory. Therefore, it's not science. Therefore it should not be taught in a science classroom. That's all there is to it.
if by "metaclass-like abilities" you mean " a way to iterate over a class's members" Java already got it, it's called reflection and I used it before to traverse a generated parse tre e, which sounds similar than what you were doing:)
Close, but no cigar. Metaclasses are to classes what classes are to objects. Python and Ruby have metaclasses because they're dynamically typed. Java is statically typed, and I don't believe it's possible for a statically typed language to have complete metaclass functionality without compromising type safety.
Python and Ruby have mutable objects; it's possible to alter the behaviour, methods and variables held in an object at runtime. In the example I gave, I needed to create several classes that reflected certain attributes and descendants of an XML DOM Element. In Java, I had to create the getters and setters and the DOM parsing logic for each class. In Ruby, I could automatically create the getters and setters and DOM logic from a metaclass template, given certain arguments.
Thus, 50 lines of code could be reduced to 4 through appropriate use of metaclasses. Metaclasses are useful for reducing types of redundancy that functions and inheritance can't eliminate on their own.
Java's objects are immutable, so this level of abstraction is beyond the scope of the language. It has reflection, which can be useful, but to be frank, Java's reflection is pretty damn awful when compared to other languages:)
People expect games to take lots of horsepower. On the other hand, no one expects an IM application to take a 100MB of memory and 100% of 1GHz Athlon...
And if Ruby or Python needed that much memory and CPU power to run an IM, then I'd agree with you. But they wouldn't, because for IMs and other similar network applications, the bottleneck is most often not in the processor, or the RAM, but in the bandwidth and latency of the network connection. Bittorrent runs perfectly happily on my old machines, and what do you think that's programmed in? If my hacked NSLU2 with a 133MHz processor and 32M of RAM can run Bittorrent without trouble, then a 1GHz Intel processor isn't going to have any problems with it.
Remember also that Python and Ruby farm out a lot to binary libraries. The GUI, socket handling and algoritms like SHA1 aren't implemented in Ruby or Python, they're accessed through libraries programmed in C and C++.
Seconded. Took them long enough to put it in, though:(
To be honest, I find that code generation is actually best for more complex problems - the more that is automatically handled by the IDE the better, as the IDE can keep track of so much. Java code generation is usually not subject to the limitation of systems like Rails - it is not one-shot - it can be two way and adaptable. I agree it is not that elegant, as it is not a feature of the language itself.
Agreed to an extent, but there are limitations to what code generation to achieve. Simple templates are trivial to accomplish via code generation, but code generation doesn't offer the power of the macros in Lisp, nor the dynamicness of Python and Ruby's metaprogramming functionality. It's also somewhat more unwieldly, though I do suppose a good IDE can make code generation usage transparent to the user (just a shame I've got used to using Vim; the text editors of IDEs always seem too basic in comparison).
For most problems, such power isn't needed. But for complicated situations, it can prove to be quite a boon. I suspect it rather depends on what you're developing; certainly there are situations where Java is the preferred language (though I'd prefer to create my class files in Nice, myself), but I'd argue that there are also a lot of situations where Ruby or Python would be ideal for the job in hand.
Absolutely. All I get concerned about is the idea that because some projects are far faster with Ruby alone or with Rails, then this is a general advantage that this sort of development technique will have over Java in all circumstances for all scales of project.
Ah, well, we're in agreement there! I'm a firm believer in using the right tool for the right job, and as you say, sometimes Ruby isn't the right tool for the job. Java does have some neat libraries and APIs, and alternative languages for the JVM like Nice, Groovy or Scala, can make one's life quite a bit simpler. You also get the performance advantage, which is always nice.
You can say that your experience is different, but it doesn't invalidate my evidence. My evidence is based on the study of a large number of projects from many people.
But if I find that a project done in Rails is N times faster than a Java project of a similar nature I've done in the past, I'm hardly going to discount it based on the unseen evidence of someone on Slashdot. If, in my experience, Ruby proves to be a far faster development language than Java, I'm not going to hum and say, well, what about those project managers who decided language wasn't a deciding factor.
Add to this the fact that there are many experienced developers who take the opposite of your position; Paul Graham, as I've already mentioned, and quite a few of the chaps at Google. I'd dig up more examples, but it's Christmas Eve and decidedly late.
In my opinion, people should try out both languages and decide for themselves based on the results, rather than rely upon the experience of others. Wouldn't you agree?
Good example; and in this case I would use code generation. I almost never write getters or setters in Java - my IDE does it (and then manages them) for me. If I look at the class properties in NetBeans, I only see the variables ('bean properties') - the code is all hidden and managed for me.
But that still doesn't solve the problem of repetition when parsing DOM elements. Java's introspection is too unwieldly to be used often, and I'm unfortunately constrained by Java 1.4 - no generics for me! Perhaps I should look for, or design, a program that will generate Java code from templates.
Don't get me wrong - I think Ruby is beautiful and I use it a lot. I just don't think that with the right tools Java is that much less productive for substantial projects.
You are right - it may be 'getting around' limitations in Java, but if it gets the job done in a maintainable way - why does this matter?
True; for simple problems code generation can be a solution, but it's a solution that does have limitations, and one that strikes me as horribly inelgant. Perhaps, though, it warrents some further investigation on my part.
Both my experience and the experience of many others whose projects I have had to review - how using different languages and technologies have worked for them. They have used a range of technologies, including.NET, JSF, PHP, PERL etc.
But again it comes down to personal experience, not just of yourself, but of the people you have met and worked with. With all due respect, my own personal experience contradicts your assertions.
With the right tools and a good IDE, Java web development can be fast. Not as fast as getting the initial pages up with Rails scaffolding, sure (although projects like Trails come close), but still fast.
I'm doubtful. I bump up against the limitations of Java every other day, and it seems like the only way you could get around such things is with an awful lot of code generation.
For instance, I was recently writing a Java class to convert an XML DOM into a custom object tree. This largely involved writing getters and setters, and for loops to iterate over NodeLists to pull out descendant elements. I couldn't help thinking that with Ruby, I could have written "has_attributes" and "has_descendants" methods, and generated the getters and setters and DOM handling automatically. Instead of my classes being 50 lines apiece, they could have just been 4. It would have taken me far less time in Ruby than I did in Java, because Java hasn't got metaclass-like abilities like Ruby or Python.
I am not basing on personal experience - part of my job is to understand and review web (and other) development processes, and I have seen projects at a range of scales.
Cypherpunk isn't dead - it just smells that way.
The video conferencing and internet voice programs back in the 90s didn't really take off (remember ICU?). This was not because it was a bad idea, but simply that bandwidth and communications technology still had some time to go before VoIP became feasible.
Anonymity software suffers from the same problems. There's a large bandwidth and latency overhead, and the technology is currently in a premature state. We're seeing a lull in anonymity networks, just like there was a lull in VoIP.
It might seem presumptious of me, but I have some solid reasons for believing this. Firstly, there are a number of online applications that have a theoretical upper limit on how much network resource are needed. Taking VoIP as an example, you could continue increasing the quality of the voice line, but beyond a certain point this gets less and less important. You don't need audiophile quality on your phoneline.
As bandwidth outstrips need, and VoIP technology becomes more widely available, anonymous VoIP networks will become more and more feasible. And, indeed, you can apply the same line of reasoning to any service limited by the resolution of human senses. This doesn't guarentee a rosy anonymous future, but it does make it more likely.
Whilst this appears to be a common claim from the Premier League, it's debatable whether this tactic holds water. As far as I'm aware, it has not yet been tested in court.
A number of reasons, not all of which I know enough about to comment on. The photoelectric effect demonstrates that light can liberate electrons from atoms; high enough frequencies of light create small amounts of static electricity in metals. We also know the opposite can occur; that an electric current can produce photons, which is how LEDs work.
So from these two examples, we know that atoms can absorb and readmit photons. We also know that photons, as the carriers of light, cannot be slowed down by a force, according to Relativity. If the photons themselves are not slowing down, then something else needs to explain this activity. And though the patch of light within a solid sometimes isn't a straight line, this change in direction isn't enough to account for the decrease in speed. Further, most transparent mediums don't bend light at all, and yet we still see a decrease in speed.
If we rule out all that, the only thing left is absorption/readmission, and coincidentally enough, we know that atoms can do just this.
There are likely a lot more reasons, but that's beyond the scope of my knowledge. Suffice to say that no scientist seems to be questioning this idea, suggesting that it has some solid grounding and evidence.
Whilst the GP is a little confused, most of your rebuttals are worse, because they're completely incorrect.
Current physics says that photons are massless particles that travel at a constant speed c. This speed is independant of the motion of the observer, and independant of the forces acting upon the photons. Incidentally, we have pretty good evidence for all this.
Light waves slow down in a solid medium, but the individual photons do not. The GP is correct in asserting that the slowdown of a light wave is caused by a process of absorption/readmission of photons. This is due to the quantum mechanical processes of excitation and de-excitation. If you've pursued physics past high school level, you'll certainly have done some experiments on this phenomenon.
You assert that photons don't always travel at c, but think about this. If this were true, then the photons are being decelerated by a force. This force could equally be applied to photons in empty space, which would mean that the speed of light in a vacuum was variable. Whilst this may be what occurs, current experimental evidence suggests otherwise.
As for the GP's muddle over distance and time, I can only assume he refers to relativistic time dilation.
I believe the GP post was merely noting that photons have a constant speed of c.
It might help to repeat the question I was originally replying to. n8k99 asked:
So n8k99 is asking what he would observe if he were in an elevator E, falling at speed c with respect to the elevator shaft S. I am pointing out that if one were travelling at c relative to another object S, no time would pass for you relative to the time that has passed for S.
Of course, this thought experience is not possible in reality, at least according to relativity, as nothing with mass can accelerate to c relative to another object. But just because something is impossible, does not prevent one from thinking about it. Indeed, some of Einstein's most telling revelations in Special Realivity came from him imagining what would happen to an observer if they could ride upon a beam of light.
Except that if you were on an elevator E travelling at the speed of light realtive to a object A, you'd have to travel an infinite distance relative to A in order for any time to pass in E. In short, if I were on an elevator, which accelerated to c, then travelled 200 billion lightyears, and then decelerated, from my reference point zero time will have passed in those 200 billion lightyears. So I can't observe anything at a speed of c, because no time passes in my reference frame between when I start, and when I stop. The very moment I start travelling at c away from an object A, is also the exact moment I stop travelling at c.
Ignoring the fact that relativity says that accelerating to c is impossible, of course ;)
But I'm not considering it in isolation. I'm considering it in respect to another object.
The key point here is the third party observer. To a third party observer, an object may be receeding from the Earth at the speed of light, but to us, that same object is receeding at less than the speed of light. With the elevator example, the elevator is moving at a velocity of c, relative to another reference frame. This is the different from your far-off object, which is moving at c away from the Earth from the perspective of a third reference frame.
Whilst the elevator is in motion it would take an infinitely long period of time in our reference frame for a single instance to pass in the elevator's reference frame. Or, to put it another way, no time will ever pass within the elevator whilst it is moving. Thus, there is no time to observe any effects within the elevator, as from the passenger's point of view, they'll always spend zero time travelling at lightspeed.
If you were falling at the speed of light, time would be stopped for you, so you wouldn't see anything.
The same way you can hear planes that travel faster than the speed of sound.
Er... Did you read my post? Specifically, the bit where I point out that no scientific theory can be proved? Evolution is no less valid than theories on relativity, quantum entanglment, gravity or electromagnetism, none of which can be proven, either.
One can observe it through the fossil record. This is no less valid than astronomy, where scientists observe the radiation from events that occurred in the far distant past.
I'm sorry, you've lost me. Natural selection a reduction of genes? Why would less genes result in animals more adept at surviving?
Er, with respect, what the hell are you talking about? Evolution has been predicting things ever since Darwin proposed that humans evolved from apes. This led scientists to propose that, according to the theory of evolution, there should be fossils of our ape-like ancestors lying around. Years later, this prediction was borne out by the discovery of Lucy and similar fossil hominids.
No scientific theory can be, or has ever been, proved. Theories are disproved. Those theories that have survived a significant period of time without being disproved are treated as likely to be correct, and these are the theories that are taught in science classrooms.
ID is not science, because it does not meet the minimum requirements of a scientific theory. It is not disprovable by observation, and makes no experimental predictions. Because it is not science, it makes no more sense to teach it in a science class, than it would be to study Shakespeare in a metalworking class.
It's not that at all. ID does not meet the definition of a scientific theory. Therefore, it's not science. Therefore it should not be taught in a science classroom. That's all there is to it.
Close, but no cigar. Metaclasses are to classes what classes are to objects. Python and Ruby have metaclasses because they're dynamically typed. Java is statically typed, and I don't believe it's possible for a statically typed language to have complete metaclass functionality without compromising type safety.
Python and Ruby have mutable objects; it's possible to alter the behaviour, methods and variables held in an object at runtime. In the example I gave, I needed to create several classes that reflected certain attributes and descendants of an XML DOM Element. In Java, I had to create the getters and setters and the DOM parsing logic for each class. In Ruby, I could automatically create the getters and setters and DOM logic from a metaclass template, given certain arguments.
Thus, 50 lines of code could be reduced to 4 through appropriate use of metaclasses. Metaclasses are useful for reducing types of redundancy that functions and inheritance can't eliminate on their own.
Java's objects are immutable, so this level of abstraction is beyond the scope of the language. It has reflection, which can be useful, but to be frank, Java's reflection is pretty damn awful when compared to other languages :)
The nearest thing to Haskell in Java that I've heard of is Scala.
And if Ruby or Python needed that much memory and CPU power to run an IM, then I'd agree with you. But they wouldn't, because for IMs and other similar network applications, the bottleneck is most often not in the processor, or the RAM, but in the bandwidth and latency of the network connection. Bittorrent runs perfectly happily on my old machines, and what do you think that's programmed in? If my hacked NSLU2 with a 133MHz processor and 32M of RAM can run Bittorrent without trouble, then a 1GHz Intel processor isn't going to have any problems with it.
Remember also that Python and Ruby farm out a lot to binary libraries. The GUI, socket handling and algoritms like SHA1 aren't implemented in Ruby or Python, they're accessed through libraries programmed in C and C++.
Seconded. Took them long enough to put it in, though :(
Agreed to an extent, but there are limitations to what code generation to achieve. Simple templates are trivial to accomplish via code generation, but code generation doesn't offer the power of the macros in Lisp, nor the dynamicness of Python and Ruby's metaprogramming functionality. It's also somewhat more unwieldly, though I do suppose a good IDE can make code generation usage transparent to the user (just a shame I've got used to using Vim; the text editors of IDEs always seem too basic in comparison).
For most problems, such power isn't needed. But for complicated situations, it can prove to be quite a boon. I suspect it rather depends on what you're developing; certainly there are situations where Java is the preferred language (though I'd prefer to create my class files in Nice, myself), but I'd argue that there are also a lot of situations where Ruby or Python would be ideal for the job in hand.
Ah, well, we're in agreement there! I'm a firm believer in using the right tool for the right job, and as you say, sometimes Ruby isn't the right tool for the job. Java does have some neat libraries and APIs, and alternative languages for the JVM like Nice, Groovy or Scala, can make one's life quite a bit simpler. You also get the performance advantage, which is always nice.
Here too. Merry Christmas! :)
But if I find that a project done in Rails is N times faster than a Java project of a similar nature I've done in the past, I'm hardly going to discount it based on the unseen evidence of someone on Slashdot. If, in my experience, Ruby proves to be a far faster development language than Java, I'm not going to hum and say, well, what about those project managers who decided language wasn't a deciding factor.
Add to this the fact that there are many experienced developers who take the opposite of your position; Paul Graham, as I've already mentioned, and quite a few of the chaps at Google. I'd dig up more examples, but it's Christmas Eve and decidedly late.
In my opinion, people should try out both languages and decide for themselves based on the results, rather than rely upon the experience of others. Wouldn't you agree?
But that still doesn't solve the problem of repetition when parsing DOM elements. Java's introspection is too unwieldly to be used often, and I'm unfortunately constrained by Java 1.4 - no generics for me! Perhaps I should look for, or design, a program that will generate Java code from templates.
True; for simple problems code generation can be a solution, but it's a solution that does have limitations, and one that strikes me as horribly inelgant. Perhaps, though, it warrents some further investigation on my part.
But again it comes down to personal experience, not just of yourself, but of the people you have met and worked with. With all due respect, my own personal experience contradicts your assertions.
I'm doubtful. I bump up against the limitations of Java every other day, and it seems like the only way you could get around such things is with an awful lot of code generation.
For instance, I was recently writing a Java class to convert an XML DOM into a custom object tree. This largely involved writing getters and setters, and for loops to iterate over NodeLists to pull out descendant elements. I couldn't help thinking that with Ruby, I could have written "has_attributes" and "has_descendants" methods, and generated the getters and setters and DOM handling automatically. Instead of my classes being 50 lines apiece, they could have just been 4. It would have taken me far less time in Ruby than I did in Java, because Java hasn't got metaclass-like abilities like Ruby or Python.
I said insisting, not insulting :)
Then whose experience are you basing this upon?