On May 7, 2:23 pm, Josh Suereth <[email protected]> wrote:
> Regardless of what API was chosen, the resulting for-expression is much
> easier to read and has higher SNR.

If API doesn't matter to show off how much scala is better, then why
did you pick an API that throws off the entire experiment? I presume
your attempt in these posts is either to change people's opinion in
regards to the need for more elegant structures in java, OR to change
people's inclination towards giving scala a try.

You failed.

By using the DOM API, every java programmer who reads it goes: Well,
duh, DOM sucks. I know that. This doesn't convince me in the
slightest.


If what you say is true, back up your words, and use real, java-
designed, APIs, on both sides. DOM isn't a real java API - DOM is
language agnostic, and a DOM implementation needs to follow many
rules, even if they are awkward and result in confusing and wordy end-
user code in the target language. That's the strength, and mostly the
disadvantage, of the DOM API. You can NOT use it to prove a thing
about java. You can talk all you want, but without a single actual
example that can be used to compare java and scala properly, I stick
to my point: you're all vastly exaggerating, and java is no more than
~20 to 30% more wordy in 95% of the code you'd want to write out
there, presuming sufficiently skilled java and scala programmers
(remember that scala has new car smell bias: Scala programmers tend to
be both programming experts and programming hobbyists, and took some
effort to really learn the language properly. Therefore, you cannot
pick a random sample of java and a random sample of scala and compare
them; doing this proves only that all new languages have a grace
period in the beginning where code quality is artificially inflated.
This is true; I'm not sure anyone here needs proof of this concept).



> [Swing]

Nice, pick another API where we've all already agreed that java is a
bad fit. That's why JavaFX exists, which is a great fit. Better than
scala, even.

> [Java is the assembly language of the JVM]

No, it isn't. You can't throw checked exceptions without declaring
them, you can't create invokedynamic, and there are a host of other
perfectly valid byte code concepts which you can't write in java.
Also, many JVM-based languages out there have primitives for
everything you could possibly do in java. If you program without using
much of the scala libraries in scala, instead using the java
libraries, your class files will be very similar.

If the java developer team, or those supporting it, think that java
gets some sort of free pass because it's the C of the JVM world,
they're Getting It Wrong. Java, the language, needs to stand on its
own. If scala, fan, clojure, or groovy beats java consistently and
with a large margin (on average), in all areas where one might want to
use the JVM and taking into account all the circumstances (such as
editors, debuggers, tools, documentation, yadayada), then java should
die and we should all switch.

> [Use the right tool for the job]

Sort of. To get familiar with a language syntax, you need anywhere
from 2 weeks to 3 months depending on how novel the language is and
how experienced you are. To get familiar with the libraries (and so
far, most JVM languages bring along their own library, including
clojure, scala, and fan, and bucking this trend and using the java
core libs just produces a bastard child that is ugly and
unmaintainable), you need a year. To really become a 'guru' in a
language, that takes many years, and a dedication to keeping up to
date, which includes using it, often.

(Note: Some languages are so similar that you can pick one up very
quickly if you know the other. However, these languages almost always
overlap in function so much that knowing both is useless; the amount
of jobs out there where one language is a good fit but the other
isn't, is nearly zero. Therefore, it's not fair to claim: "But
learning python if you already know ruby is so easy!" - That's true,
but the very aspect that makes that easy also makes knowing both
virtually pointless. A fair comparison is learning clojure when you
know java, or erlang if you know python, for example).

Considering the phenomenal cost of maintaining knowledge of 2 or more
languages, it is perfectly reasonable to consider every problem a nail
for your one hammer. Bashing a screw into the wall with a hammer is
just easier all around if a screwdriver takes 5 years to learn how to
operate.

You should still endeavour to learn new languages, for a few reasons:

 1) It usually improves your understanding of your 'main' programming
language, and

 2) If you stubbornly stick to your hammer no matter what, eventually
the world just moves on and you're stuck holding the bag. If the time
is ripe to switch horses, it helps if you at least have a rough
understanding of what's out there.

However, both of those reasons are for personal development, and
getting either benefit does not require you to hit guru level.

> [More interviews on Fan, Clojure, Scala, Groovy, JRuby]

Amen!

On May 7, 2:23 pm, Josh Suereth <[email protected]> wrote:
>  No matter what API you use in java,
> building up a list of items from some other datastructure usually requires
> insantiating the list, then iterating over all elements, testing various
> conditions, then placing them in the list.  Finally, you return the list.
> Using for expressions, you have a lot less noise to accomplish the same task
> without losing readability.
>
> Should I also show examples of:
>
> 1) Parsing text files
> 2) Resource Management
> 3) Tree/Model Manipulation
> 4) Declaring Class Hierarchies
>
> Don't get me wrong.  I like the Java language.  However, I see its days as
> the general purpose language of choice being numbered.  I actually like the
> Swing framework for being amazingly powerful.  I had to write a
> high-performance graphing library (live interactions/updates) and the Swing
> API really saved us a few times by allowing us to be crazy flexible.
> However, the other 80% of the time, I wish there was some simpler way of
> defining my app (or at least, better databinding).  I don't see Java
> disappearing, I see java being the "if you want high-performance on the JVM,
> you write it in java" vs. "if you need to get this done quickly and its
> execution time isn't critical" being other languages.
>
> If you look at what is being done on top of the JVM nowadays, it's pretty
> phenomenal.  I really think this is crucial to JVM success.  Not every
> language is suited to every task.  You should choose languages
> appropriately.  JavaFX appears to be a really great language for UI
> development.  As it speaks to "native java", you could mix this with a
> Scala middle-tier, some groovy glue code and some java
> highly-performance-tuned areas and you have a nice app, all cohesive running
> on the JVM.   This is where I'd liek to see java go, and with the Posse
> covering topics from alternative languages on the JVM, I see them as helping
> lead the community towards that vision.
>
> Please, more interviews on languages like, Fan, Clojure, Scala, Groovy,
> JRuby, Ioke (preferably from people using them in production applications).
> I'd really like to hear thoughts on Fan's "baked-in" module system vs. OSGi
> vs. Jigsaw, etc.
>
> -Josh
>
> On Thu, May 7, 2009 at 7:41 AM, Reinier Zwitserloot <[email protected]>wrote:
>
>
>
> > Trying to prove java sucks by showing code that uses the DOM library
> > is stupid.
>
> > The DOM library sucks. That's what its designed to do; utter bilge for
> > manifestly typed languages. Fortunately, there's XOM, JAXB, XPath, and
> > many other alternatives. Not a valid example, unless you want to
> > highlight that java tends to suck when attempting to use it as some
> > sort of DSL, in which case: Absolutely right, but coin isn't going to
> > change this, and there's plenty of resistance to expanding language
> > flexibility to address such an issue, because it also has many
> > disadvantages. So, that's a completely different argument.
>
> > On May 7, 4:48 am, Josh Suereth <[email protected]> wrote:
> > > Perhaps a better example of scala making life easier.  Here I'm use "for
> > > expressions" along with "operator syntax" and "lambda expresisons" on the
> > > Scala XML dom to parse out all link URLs from a web document that end
> > with
> > > rpm
>
> > > val urls = for {  link <-   webpageDom \\ "a"
> > >                      location <-  link.attribute("href").map(_.text)
> > >                      if location.text.endsWith("rpm")
> > >                } yield location.text
>
> > > Here's similar java (but using a different path)...
>
> > > List<String> urls = new ArrayList<String>();
> > > NodeList links = webpageDom.getElementsByTagName("a");
> > > for(int i =0; i < links.getLength(); i++) {
> > >     Node link = links.item(i);
> > >     if(link instanceof Element) {
> > >           Element linkAsElement = (Element)link;
> > >           if(linkAsElement.hasAttribute("href") &&
> > > linkAsElement.getAttribute("href").endsWith("rpm")) {
> > >               urls.add(linkAsElement.getAttribute("href");
> > >           }
> > >     }
>
> > > }
>
> > > Groovy provides an "XmlParser" for nicer syntax as well....  However,
> > I'll
> > > let a Groovy expert show the simplified code for this (I'm pretty sure
> > it's
> > > close to a one liner using a depthFirst call with a closure filter.
>
> > > Lastly, here's a JavaScript example (using jQuery):
>
> > > var links = [];
> > > $('a').each( function(idx, link) {
> > >                  if(link.href && link.href.match(/.*rpm/)) {
> > >                       links.push(link.href);
> > >                  }});
>
> > > //Note we are not using map because we want to filter based on link
> > ending!
>
> > > Anyway, on to the point:   Which of these has the least signal to noise
> > > ratio?  Which one is the clearest?  I leave that for you to decide.
>
> > > I also want to point out that this expressiveness (of other languages vs.
> > > java langauges) is not limited to XML parsing.  I would also be remiss if
> > > not mentioning that I neglect to include a C version of the XML code
> > because
> > > I just didn't feel like taking the time to write one, and then make sure
> > it
> > > compiled/ran.  I'd love to see a JavaFX script version of this code, as I
> > > have a sinking suspicision it will still have higher SNR than Java.
>
> > > -Josh
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to