 | Level: Introductory Scott Laningham (scottla@us.ibm.com), Podcast Editor, IBM developerWorks
06 May 2008 Check out Scott Davis and Ted Neward, two popular speakers from the No Fluff Just Stuff Tour, jamming as much
quality stuff a possible into a dynamic 45 minutes on whether Java™ technology is on
its way out.
developerWorks: I'm Scott Laningham for developerWorks. We're going to talk
about the Java programming language with a couple of cool dudes who have a lot to say
on the subject. Scott Davis is editor-in-chief of AboutGroovy.com and author of
Groovy Recipes: Greasing the Wheels of Java. Scott is also author of the
developerWorks series "Mastering Grails." We also have Ted Neward, author of
Effective Enterprise Java and Server-Based Java Programming, as well as
co-author of C# in a Nutshell. Ted's contributions on developerWorks include
the series "The Busy Java Developer's Guide to Scala." Both are featured speakers on
the No Fluff Just Stuff Software Symposium series. Thanks for doing this, guys.
Davis: Hey, Scott, good morning. Thanks for having me.
Neward: Good to be here.
developerWorks: Now we know that you two guys come at this topic of Java from different perspectives so let's keep it friendly. Let's stay in our separate corners and not get physical here.
 |
Guest: Scott Davis
Scott Davis is an internationally recognized author and speaker, and editor-in-chief of
AboutGroovy.com. He is passionate about open
source solutions and agile development. He has worked on a variety of Java platforms,
from J2EE to J2SE to J2ME (sometimes all on the same project). His books include
Groovy Recipes: Greasing the Wheels of Java.
GIS for Web Developers: Adding
Where to Your Web Applications,
The Google Maps API, and JBoss At Work.
|
|
Neward: We're in Vegas right now for the ServerSide Java Symposium 2008, where
I'm going to be talking about a couple of things, and Scott's going to be talking about
a couple of things, and we'll be probably drinking a lot of alcohol.
Davis: There you go. There you go. All punches will be verbal. No physical
... you know, no programmers will be, you know, hurt in the process of this podcast. [LAUGHTER]
 |
Guest: Ted Neward
Ted Neward is an independent consultant specializing in high-scale enterprise systems,
working with clients ranging in size from Fortune 500 corporations to small 20-person
shops. He speaks on the conference circuit, including the No Fluff Just Stuff Symposium
tour, discussing Java, .NET and XML service technologies, focusing on Java/.NET
interoperability. He has written several widely recognized books in both the Java and
.NET space, including the recently released Effective Enterprise Java.
|
|
developerWorks: Obviously it's kind of a one-question
topic with maybe some layers underneath that. But really, the reason we wanted to get
together with you all is to talk about if there's any concern about Java getting
diminished in importance here or getting long in the tooth. I mean, how does that question hit you right off the bat?
Neward: Patently false. I mean, I think you know there's .... Wow, there's so
many different ways to respond to this, I just don't know where to begin. I think
there's a couple of things that are at work at the same time, right. No. 1, there is
— and this is the unfortunate side effect of having both the platform and
the language be called Java — because I think there is some very fair
concern, discussion, what have you, over, some of the enhancements that
people have been making recently to the Java language and that people have been
proposing for the Java programming language itself.
But the Java platform — you know, the JVM, the surrounding libraries, the
ecosystem, etc. — I mean, that's going to be here forever. And that has
reached a level of ubiquity that rivals that of C++ or C or, you know, even dare I say it, COBOL.
Davis: You beat me to the punch, Ted. I was going to say Java is the COBOL of
21st century. And I mean that with great affection. I think that Java the platform
and what Ted hit on there, the notion of Java the language vs. Java the platform is, I
think, something you're going to hear Ted and I riff on a lot in this talk.
But Java the platform, the JVM itself, I think that's going to go down, and this is not
just hyperbole, but I think this is going to go down as one of the major software
achievements in the late 20th, early 21st century. No question.
Neward: Yes, I mean even to the point, talking to one of Java's great
competitors, which is to say the .NET platform, the other one that I know very well.
You know, I was recently at a very small conference held on the Redmond campus.
Microsoft® threw this conference and invited a whole bunch of non-Microsoft
ubergeeks, including several guys from Sun who were invited to stand up and basically
present on, you know, essentially what they were working on and specifically, in this
particular case, one guy was talking about the Java Virtual Machine. And as the
conference went on and other people talked about, you know, what the CLR does and more
importantly what it doesn't do, this gentleman was just flabbergasted at certain
optimizations that the CLR doesn't take advantage of, that doesn't do, that the JVM
has been doing for five years. And he actually came away with a very sort of
reinvigorated sense of energy because up until this point, what he'd been hearing is
basically the same message: gloom and doom, "Java is old, it's creeky, it's bound to
die, .NET is brand new and exciting and has all these nifty features. And woe is us,
woe is us, woe is us, we're all going to be," you know, "writing C# somewhere in the
near future." And that's just not the case. That's just not gonna happen.
developerWorks: Let me ask you something, and I know you guys have a lot more
to say on that, but let me jump in here just for context and say, is there something
going on in the developer community around all of this that makes what we're talking
about a hot topic right now? Or is there some other reason for this concern about Java coming up?
Davis: Well, what your question is really hinging on now is more Java the
language. We've gotten that kind of great low-level geekery out of the way. Yes, the
JVM cures cancer and everything else. But Java the language is 13 years old,
as well, and that is eternity in terms of languages. There have been so many brand new
sexy languages that are coming up that are exploring different features. I mean, we
could go down the list.
Ruby is something that everyone has heard of. Ruby and Ruby on Rails is really a
profoundly influential language, so much so that Bruce Tate a couple years back wrote a
book called Beyond Java. And I have an immense amount of respect for Bruce. You
know, Bruce, Ted and I all spoke together on the No Fluff tour. Bruce wrote one of the
two most influential books that I read as a young Java programmer growing up and that
was ....
Neward: Bitter Java.
Davis: Bitter Java, exactly. Yes. It was about the anti-patterns in
server-side development. And so Bruce is someone I've got an immense amount of respect
for. Been reading all his books, and then he comes out with this book called Beyond
Java, where he's discovering, you know, new languages. And one of the languages
he discovered was Ruby. And he said quite truthfully that, hey, there are things you can
do in Ruby that you can't — you just plain out can't do on the JVM. And
so his solution at the time, which was appropriate at the time, I guess, is that, hey,
there are things you can't do on the JVM, so abandon the JVM and come on over and check
out this new language.
The reason that you're talking to Ted and I right now is both of us are fans of
different languages on the JVM that give you many of the benefits of Ruby and a lot of
the new language developments, but don't force you to abandon the stable JVM platform.
Neward: Right. The other thing I think that's going on here I think, too, is
there's been a ... I mean, just a slew of new stuff that Microsoft has released over
the last five years that, realistically speaking, if you look at what's been coming in
terms of ... you know, the official JCP-blessed standard specs, tools, suites, whatever
you want to call them in the Java space, it, you know, just doesn't measure up.
There's just, you know, you just kind of go, oh my God, we're getting outpaced, we're
getting outclassed. For example, Microsoft has released Windows® Presentation
Foundation, which is a completely new user-interface framework for doing lots of nifty
UI kinds of things, which shouldn't come as a surprise to anybody because at the end of
the day, what Microsoft wants to do is to encourage people to take advantage of the
power of the Windows platform. And Java, of course, is geared almost 180 degrees the
other way, which is to say no, no, no, no — platform shouldn't matter.
You can write this code and run it anywhere.
There's Windows Communication Foundation, which says, "Let's take all of our
communication stuff and bundle it up under one API," right? So imagine taking the JMS
API, the RMI API, EJB, JAX WS, all of that, and bringing it under one umbrella, making
for a unified programming model, meaning the poor programmer doesn't have to learn 27
different libraries just to be able to do all the different kinds of communications he
wants to do.
There's Windows Workflow, which really has no peer right now in the Java space in
terms of doing — no, I take that back. There's a couple. I think Quartz is one and
so forth — for doing things like workflow, and it's really a very flexible framework.
So I mean, you know, the Java guy, for whatever reason, he and his .NET buddy go to
Java One, and the .NET guy kind of looks around and goes, "Wow, this is rather
uninspiring." And then the Java guy goes to Tech-Ed and sees all this stuff. I mean,
I saw presentation just recently by Jim Hugenin, where he used an Xbox controller to
send signals to his PC, to his laptop, which then transmitted signals to a Lego
Mindstorms robot on the floor, which then executed, you know, the up, down, left, right
commands that he had sent via the Xbox controller. And this took him a day to write in
.NET.
And people in the Java space look at that, I mean, very frankly, particularly if you
look at the Java platform from when Bruce was talking about abandoning it and moving
over to Ruby, we look at the Java platform back then, you know, we'd still be arguing
over which Web framework should we use to try to capture the Xbox controller command
and so forth. It just sets a very, very negative tone to a lot of the Java community.
Davis: But that negative tone especially, I mean, the notion that there's one
true language to rule them all is an absolute fallacy. Programming languages are not a
zero-sum game. And the conventional arguments, and Ted touched on this earlier, that
Java used to be one language that would run anywhere, run on many platforms and the
.NET platform used to be many languages, be it C# or VB .NET, or, was there a COBOL
.NET that on ....
Neward: There's two of them. Actually three of them.
Davis: Excellent. But many languages, but it would only run on one platform,
obviously, the Windows platform. That was the historical argument. But it's just not
true anymore.
Very early on, I opened up a door, and I was expecting Ted to walk through it, and he
didn't walk through it, so I'm going to make it a little more explicit. I'm a Groovy
guy, that's my new language of choice on the JVM, and Ted's new language of choice on
the JVM is ...
Neward: Scala.
Davis: There we go. And what you'll find is those languages each have
different characteristics. They are not drop-in replacements for Java. They are
languages that are highly optimized for different purposes. Why would I, you know,
why would I even care about Scala, Mr. Neward?
Neward: Well, you know, Scala, unlike you heathen dynamically typed programmers
.... [LAUGHTER] you know, those believe that the compilers shouldn't try to help you
write better code, Scala is a fully type-safe language. I mean, it uses type inference
to reduce the amount of explicit type commands that we have to give to the
compiler, the environment, whatever you want to call it. Plus, I mean to be very honest
about it, Scala is a combination of a functional and an object language, so we get some
of the benefits of functional programming in terms of hurrying, in terms of the
encouragement of immutable state and so forth.
But very frankly, Scala also takes advantage of the fact that they're effectively
reinventing an object language 10 years, 15 years if you count C++, after the popular
object languages were created. Because C# at the end of the day is really sort of a
Java++ up until we get to C# 3, and we'll leave that alone for the moment. It's really
just a Java++. And Scala came in and said, "All right. Look. We're going
to take some of these functional syntax elements. We're going to apply it to an object
environment." And that has some really, really interesting and powerful effects, many
of which the dynamic language space á la Groovy.
Davis: Well, yes. And so Ted has focused on this language .... Your thought
exclusively. I mean, you're a real polyglot programmer. You've got a lot of languages in
your tool belt.
But Scala is one language that's evolved on the JVM that is highly focused on that kind
of object functional space, very strongly type some would argue, even more so than
Java, but at the end of the day, it runs on the JVM. It compiles down to classes and
byte code that will run.
Now, what I'm all geeked about these days about Groovy is taking that
idea in what could not be a more different direction, and that's the notion of dynamic
languages on the JVM. So often we say, "Oh, if only I had this method I could call on
string," whether it's, you know, capitalized or whether it's converting that string into
a URL or something along those lines. But unfortunately, string is a final class. It's
strongly typed down to the point when we can't extend it, we can't implement the
stringable interface. And so in Java, you end up with these kind of string libraries that are off in the woods somewhere.
Neward: And to be fair, the Sun engineers made that decision back in JDK 1.1
for very good reasons at the time because string has some very, very deep incestuous
relationship with the JVM itself ....
Davis: Oh, sure.
Neward: ... , and they were afraid if people extend it, this would create problems and break their contract. I mean, this has been the traditional problem with inheritance as a tactic. If I
inherent from you, and I override a method and I change the behavior of that method, I
could really break the expectations that other things like the JVM in this case.
Davis: Oh, Ted, I'm in violent agreement with you. I am certainly not looking
at 1995, you know, code, with 2008 eyes and judging them harshly. But the point I was
trying to make ....
Neward: I know you're not, but it's everybody else I'm trying ....
Davis: Oh, well, there you go. [LAUGHTER]
Well, the point I was trying to make is I can use Groovy now to turn around and
dynamically at runtime bolt new methods on to string. I can dynamically at runtime
change core methods of string and have them do something completely different. Now,
some people that give hives to. They're breaking out into cold sweats right now, and
they've shut off this podcast. Apologies.
But for other people they said, "Oh, finally. I don't need to be beyond Java, I don't
need to leave the JVM to give me some of these dynamic language characteristics." So in
just three languages, we've identified here — Java, Scala and Groovy
— we've identified three very different use cases.
Neal Ford, another speaker on the No Fluff tour and a prominent member of
ThoughtWorks ... I'm sorry, not ThoughtWorks.
Neward: Yes, you're right. ThoughtWorks.
Davis: Yes, ThoughtWorks, absolutely. He's coined this phrase "polyglot
programming," which is just being multilingual having different languages available to
you that serve different purposes and solve different problems. And having all of these
different languages available to you on a common platform, the JVM, is why I don't
think Java is diminishing in importance. I would argue quite the opposite: Java is
becoming quite an attractive platform, a nice stable platform for all of these
different languages to explore their different use cases.
Neward: Well, and the fact that these languages are all different. I mean,
Neil and I have a bit of a discussion, quote unquote, going on as to exactly who
coined it first, did he coin polyglot programming first or did I coin my infamous
Marxian adaptation, which says, form each language according to its abilities, to each
project according to its needs. [LAUGHTER] Because I'm pretty sure I did that before he
talked about polyglot programming. But at the end of the day, it doesn't matter
because realistically speaking, you know, we've already been living in that world for
years now, which is to say the Java programmer already knows at least a half dozen
different languages to get his day job done, which is to say he knows Java, he knows
HTML, he knows CSS, he knows SQL, he knows XML.
Davis: Exactly.
Neward: There's probably a standard properties file syntax he also has to know,
depending upon which open source libraries he's using. I mean, realistically speaking,
you already have a half a dozen of these differently syntaxes, and by using some of
these languages, you know, James Gosling once said that every configuration file
ultimately turns into a programming language.
This is one of the things that, you know, some of the dynamic languages, Groovy and
some of the other ones, J Ruby and so forth, if you look at their syntax and you look
at the syntax of your average Java dot properties file, you realize that the dot
properties file is nothing more than a series of assignment statements without the
trailing semi colon. And that's basically ... that's drop-in replacement Groovy code
right there.
Once you do that, then all of a sudden, your configuration file isn't just a
configuration static data file. This is actually executable code that could be used to
do more than just set what the background color of the Web page should be. I mean, this
is one of the ways to start thinking about how do we change the nature of
the game, rather than just bemoaning the fact that the rules are somehow stacked
against us? Because this is one area that Java has definitely explored to much greater
depth than the .NET ecosystem has, which is to say all of these different languages,
specifically the dynamic languages, you know, we have a standard API for scripting
languages on the Java platform that we do not have as of yet on the CLR.
There is work being done to try to create sort of that standard library framework, API,
whatever you want to call it and that's the dynamic language run time, the DLR. But
that's still being worked on. That's still being developed, and those are still very,
very much alpha-scale releases. That's not going to really be available in
any sort of production capacity for probably another year or two at least.
Davis: And yet it's right here right now on the JVM.
Neward: Exactly.
Davis: That's the wonderful irony of Bruce Tate's Beyond Java is that
now J Ruby is one of the prominent alternate languages on the JVM. And so things
have kind of come full circle, that if you are a Ruby programmer or a Rails developer
and you want to deploy Ruby on Rails on Tomcat, you know, or you want to throw Ruby on
Rails inside a JBoss or something like that, you've got J Ruby which is a great implementation of Ruby that runs on the JVM. Sun just hired the two Jython developers. So now if you're a Python developer, Sun just hired the two primaries on the Jython project so you can now take your Python code and run it on the JVM.
developerWorks: Is there some misunderstanding somewhere about the value and the importance of the JVM that you're talking about to be the arena for all this interaction? Or is there something else behind that?
Neward: I think a lot of Java programmers just sort of miss what's important
here to be very blunt about it. I mean, for years, you know, way, way, way, back when,
you know, early '90s, I was a C++ programmer, C++ Windows programmer to be precise about
it. And I knew MFC and I knew Borland's owl libraries pretty well and so forth. And
Java came out, and I looked at the language and I said "You've got to be kidding me.
This is a toy compared to what I can do at the language level with C++," even back then.
Davis: I had a good friend who called Java "C with training wheels."
Neward: Yes, there you go. And it wasn't until I actually got hired into a
Java programming job doing some stuff on the server, this is going to take a few people
back. This was being done with NetDynamics. Anybody remember them? And
essentially building what we would later come to call servlets and the Web framework
and so on and so forth. But the thing that amazed me as I dug deeper into this environment
was that the really interesting story of Java was never the language, it's never been
the language, ever. The really interesting story of Java has always been the Java
Virtual Machine and what's available there. You know, serialization is there only
because we have a virtual machine, the whole automatic memory management, garbage
collection and so forth. All of that is possible because we have a VM. That is really
the enabler in this whole ecosystem.
But because so many Java programmers, their daily interaction is with the language, the
compiler, the APIs, et cetera, the focus tends to get shifted to that. And so they
start to think, "Well, if the Java language is somehow getting old, it's somehow breaking down, what have you, well that must mean the whole thing, we have to throw it all away and start over."
And that was true if you were working with a language that compiled directly to native
code because there was no adaptation there. There was no platform beyond the language.
That was true of C++ and Delphi and objective C and so forth.
That is very much not the case with the JVM. That is very much not the case with the
CLR, while we're at it, because they just basically define an abstract execution
engine to say as long as you speak my language and my language in this case consists of
JVM byte code or CIL byte code, then I'm very happy to execute you.
And so we get Groovy compiling class files, Scala complying the class files, J Ruby
compiling the class files. At the end of the day, as long as you speak Jar, I'm cool
with you, and that's a very, very powerful statement. And so, yes, I think a lot of guys lost sight of that particular state of affairs.
Davis: Now, as passionate as I am about the Java platform, I do have to tell
you that it's been a long time, probably a couple of years since I've written
production Java code, and now I'm flipping to Java the language. I'm not poking Java
in the eye as a language, it's a very capable language. You can do anything you want
to do, you can do it in Java. But what's killed me over the past couple years is the
verbosity of it. You know, doing something as simple as opening up a file in Java,
walking through it line by line and printing out a simple text file, something like
that, is 35 lines of code in Java, whereas in Groovy it's a new file dot each line.
You know, there are these kinds of examples where language improvements are really
important for you to pay attention to. And if you're a Java developer that hasn't been
looking at new languages like Ruby, like Groovy, like Scala, at things like that, I'm
sure you can come up with Java idioms as well that are compressed down to one liners or less than Scala.
developerWorks: I've got to ask something at this point, because
this is really interesting, what you guys are talking about. And one of the things that
we've discussed some on the podcast lately is some concern about Java being overemphasized in computer science programs and that kind of stuff at the expense of more core languages. I'd like to hear
your concerns on that, how valid that concern is, but also it sounds like Java is kind
of experiencing some of that same thing that, you know, the earlier, the more core
languages were experiencing in terms of how Java was being maybe over emphasized
because of issues of simplicity and things like that. So what about both of those
issues, you guys want to comment on that?
Neward: Well, I think, you know, in terms of a computer science curriculum, in
terms of a computer science education, generally speaking academia is there
more to teach people to think, not necessarily how to think, but just to
think, right, to be able to analyze, to be able to look at a problem and look at it
from different angles and so on and so forth.
And so I think certainly there was some downside in all of the universities
of the world saying, "Oh, we're going to teach people Java because there's sort of a
corollary to this, as well, which is to say ... really 90 percent of the people who
graduate from university are going to go out and get a programming job. And one of the
fundamental truisms that I have seen in all the various places I've worked
— and I think Scott would agree with this — is you get a guy
fresh from college and the first thing you have to tell him to do is forget everything
he learned in college and train him from the ground up, right?
Because he's going to come out of college, filled with energy and enthusiasm, but
whether he realizes it or not, he doesn't know squat. And that's a hard transition for
many people coming out of college to make particularly because a lot of the colleges
have been teaching Java, so they're using a language that they're familiar with. Well, I
mean I was taught C++ when I was in college. I crashed a couple of CS courses on my
way to my international relations degree. And they were teaching C++ at the time and
then graduated, went out and go the a job as a programmer.
And it turns out that the C++ that you would be using in the field in some cases was
not the same C++ that you were using in your day job because of differences in C++
language support, differences in the operating system, just in some cases differences
of, you know, what it is you're trying to build. There's a large difference between a
five day computer science project and a
five-month production project. You have to approach these things in very, very
different manners.
The other thing, though, that I think happens here is we lost sight of the fact that
really what academia is trying to do is sort of broaden students' minds and
give them a collection of approaches to approach a problem. And this became very
apparent when Ruby came out because for the first time Java developers were presented
with this idea of being able to modify a class that's already loaded into the system,
right, Ruby's open-classes feature. That's just like "Oh, my God —
you can do that?" That's because they had been raised on a steady diet of C++ and Java
for so many years they didn't even think this was possible.
Davis: So getting back to Scott's question — I think Ted and I
are in violent agreement here that is Java over emphasized in the university. I don't
think it can be as long as it's taught in context. My professor, I had two semesters
of COBOL and I think two semesters of Pascal, and I'm not using a lick of it right now.
Neward: You're old.
Davis: I know it. Can you believe it? I wish I would have had a couple
semesters of Smalltalk and then I could be some smug gray-haired guy with suspenders
saying "I told you young whippersnappers that I was right back in the day."
Neward: You're already smug and you already have gray hair. You just don't
have the Smalltalk experience. [LAUGHTER]
Davis: Or the suspenders. I need Smalltalk and suspenders. But I had a
college prof say, "You know what? I'm teaching you this language, and you probably
won't use it when you graduate. What I'm teaching you here is not a language but it's a
process and a way of thinking."
So in that sense, Java is a just fine language to teach you. You can't go wrong
learning Java. It is going to be broadly applicable to anything you're dealing with.
It's a tiny step from Java to Groovy. It's a tiny step from Java back down to C or C++.
I think Java's going to be kind of the assembly language of the JVM. I think you can't
go wrong learning that language as long as you don't expect to have that be the only language you use.
developerWorks: You know, your point is well made, too. Ted, I think you made
it, about when you come out of the university no matter what your experience, and I
think it's true across disciplines and fields of study, that no matter what you were
taught, the real learning begins once you get on the job. And that what you were given
is maybe an introduction to and mostly you were being taught how to learn and how to
relearn and relearn and relearn. Am I right?
Davis: Exactly.
Neward: I think it's also, you know, very, very indicative when you look at a
lot of the industries that stress as much, mental cogitation as we go
through — and I'm thinking specifically of the legal industry, the
medical industry, the financial industry. You graduate from college and you are not
immediately welcomed into the bar, right? You have to take this exam, you have
post-college work you must do. The same thing is true of the medical industry. You
must intern for a while and then you become a doctor. There's
definitely that hands-on fieldwork component that has to be applied before you can
really claim journeyman status in your particular industry of choice. And really computer
science is one of the last industries that sort of held for a long time and I believe
they still do, and I believe they do so erroneously ... they still hold that once you
graduate college with a CS degree, you're good to go. You know everything you need to
know to be a productive member of the programming society. And I just don't think
that's true. I mean, certainly I had a different opinion when I was one of those
snot-nosed, wet-behind-the-ears kind of college kid. [LAUGHTER]
But you know, one of the things that you really learn with time and experience is the
value of experience. And I don't know exactly what the solution is,
but I think computer science as a whole is going to get to a point where we're going to
have some sort of post-college work that's necessary before you're really considered a
productive member of the programming society.
Davis: Sure.
Neward: In terms of Java's role in all of this, I don't think Java created the
situation by any stretch of the imagination. This has been in place long before this
language and this platform existed. But I think Java does represent a very good
teaching ground in terms of "All right — you want to learn basic OO;
here's the Java language. You want to learn a functional type-inference language;
here's Scala. You want to play around more with the dynamic language crowd; here's
Groovy, here's J Ruby. You want to write your own language," which is something that I
think we're going to see a lot more of in the next coming decade, "Well, here you can.
All you have to produce JVM byte code and you're off and running." I mean, you don't
have to worry about all of the very, very low-level grungy details the compiler
writers used to have to worry about.
And so it really offers an opportunity for the computer science student to see a
variety of different things. "You want to talk to a database; here's JDBC." You know,
a variety of different areas that he will run into in the field.
And I mean, this very frankly, just to sort of put this in the
context, Microsoft would love to have the kind of academic penetration that Java has
enjoyed. This is entirely the reason behind [the] Microsoft shared source common-language infrastructure release. They basically released the source code to the CLR, they ripped out the garbage-collection piece, they
ripped out the JIT compiler piece because they considered that was proprietary keys
to the kingdom kind of code. They replaced it with simpler versions, but they've
released the source code to the CLR specifically so that if you want to work on a new
kind of garbage-collection algorithm, if you want to work on a new style of JIT
compilation, if you want to work on any language you had a open source, academically
viable platform on which to operate.
And this was back in 2002. They wanted so much to get into the university space as far
back as six years ago because, there is the very, very real pragmatic effect
of "Hey, if I'm taught Java in university, guess what I'm going to be looking for when I
graduate? Guess what I'm going to encourage my new employer to use if we're looking to
make a platform shift?" That carries a significant amount of weight. So, you know.
Davis: But what you hit on, Ted, there, the open source component of it, I'm a
big open source, a big flag-waver for that. And I think that is the other factor that
you can't deny in terms of the success of the Java platform. I don't think any other
platform in the history of programming has embraced open source more than Java.
And that's where you get to see these innovations that don't come from Sun, you know
— be it Spring or be it Hibernate or be it JBoss or be it Groovy. You get
to see these innovations on the JVM that are literally changing the way we write code these days.
Neward: And the interesting thing is people have asked me this over the years:
Will we see the same kind of open source ecosystem in the .NET space? And I believe
that it's possible, except there' s one very interesting dynamic that is taking place in
the Microsoft space that we didn't see in the Sun space. And I think it's hurting the
open source .NET space, and that's the basic fact that if somebody creates a really
interesting project in the Java space, other Java developers go to them and say "Wow,
you're interesting," and third-party companies who want to use that project will sort of
come to this guy, you know, I'm thinking of Rod Johnson here, I'm thinking of Gavin King
and so forth. In the .NET space, if you create a really interesting project and release the source to it, Microsoft hires you.
Davis: Or sues you. [LAUGHTER]
Neward: No, no, no. Be very fair here. They do not sue nearly as much.
There's one guy that they had an issue with, and I won't go into that story, but that
wasn't even the .... I mean, technically, the dude was in violation of his license.
Davis: Anyway.
Neward: Anyway, the point is we look at, for example, Lutz Roder, whom you
don't know, Scott, but he wrote a very, very cool tool called Reflector and Reflector
basically says .... You're familiar with JAD, right, the Java Decompiler? So picture
that, but number one, it's a nice graphical tool so you can click around it, all of the
methods are hyperlinked so when JAD would emit a method signature, you could click on
that hyperlink and it takes you off to the definition of that method. It's a very,
very useful environment for spelunking compiled code. Then, build it in a plug-in style
architecture so not only can it be decompiled to C# but it can also be decompiled to
Visual Basic, or manage C++ or you can see it in the raw IL. I mean, he literally
spawned a small subculture of people building Reflector plug ins and Microsoft hired
him. And that was the very last release of Reflector that he ever put out. [LAUGHTER]
Davis: He was assimilated.
Neward: He was assimilated, right. There's been some work, Jim Hugenin worked
on Iron Python. What happened? He got hired. There's been some work on Phalanger,
which is a PHP language compiler for .NET. Microsoft just hired the two lead
developers there.
You know, so we've seen this sort of assimilation. Microsoft is basically
using the open source community as a way to find the top talent and absorb them, which
is great for Microsoft and it's great to the people who have basically banked their
industrial future on that company. But even if ....
Davis: But it's kind of a closed loop, it's kind of a closed ecosystem whereas
something like the Java platform is an open ecosystem and we're seeing multiplier effects based on open source.
Neward: Sure.
Davis: It, you know, traditional economics are "Hey, if you give it away," you
know, "You're taking ... you're pulling value out of a system." But what we're seeing in
practice in reality is that as you give away the source code, that source code has this
multiplier effect that are making Rod Johnson and Gavin King and Mark Flurry and
company very, very rich people that are crazy like a fox for giving away their code for free.
Neward: And the interesting thing here is aside from that multiplier effect,
there's a certain effect, I mean, number one, we cannot ignore the fact that
for every Rod Johnson, there are 99 Java programmers who wrote their own craptaculous
version of a dependency-injected framework that some poor company is now saddled with,
right? I mean let's be honest. There are winners and there are losers in this open
source game. But the interesting thing is, you know, Microsoft is ... it's going to
be interesting to see how this plays out over time.
Davis: But what you hit on there is the Darwinian principle of software, there
need to be, and you're being generous at 99. I would say there are 99,000
craptaculous Web frameworks out there, but we need to go through those exercises to
winnow out the sick and weak and elderly of the herd so we can have this really
strong vibrant polyculture of a Java ecosystem.
Neward: See, and Microsoft is basically saying we're doing the same thing.
It's just we're doing it inside the halls of building 41 where a lot of the CRL work
takes place. You know, we're not doing it out there in the open, where companies can
make a bad decision and choose wrong.
And at the end of the day, I'll be very honest here, it may sound like I'm sort of
talking out of both sides of my mouth and I kind of am because on the one hand I kind
of like the open source ecosystem that we see in the Java space but on the other hand,
I can't deny the benefits of having a benevolent dictator who basically says "This is
the way we're going" and, you know, companies just follow. I mean, you look at some of
the changes that have occurred in C#, right. C# Version 3 is a very different creature
from C# Version 1, and certainly, we have not seen anywhere near that degree of radical
language change in the Java language. And this is because Microsoft is a benevolent
dictator, specifically, Andrew Salzberg is a benevolent dictator and he says"This is
the way it goes" and boom, off we go, right? "Like it or not, that's the way we're
going." There's no ambiguity as to the direction of the language. Like we're seeing
right now in the Java language discussions around, do we add closures, do we want to
add some kind of open classes facility. I mean, you know, this is going to be decided
by committee, which is in and of itself a pretty dangerous concept and, you know, I
think a lot of people are looking at that specifically and going "Oh, Lord
— what have we gotten ourselves into?"
And that I think is a fair concern, right? I mean, when you get into that sort of
design by committee space, which the open source community holds as a guiding principle
rather than as criticism. It's just different. It's interesting. It's going to be
fun to watch these two environments play out against one another.
Davis: But it's amazing how we got all this discussion out of a simple
question, is Java diminishing in importance? I think that, you know, Ted and I have
rambled on now for it seems like 18 hours ... [LAUGHTER] But I think that both of us
have given that a very definitive "No, Java is not diminishing in importance." But Ted
and I feel very strongly about this for very different reasons. And I think that's the
beauty of this is that it's definitely a vibrant, thriving platform. News of
its death has been greatly exaggerated.
Neward: And very honestly, I think anybody who suggests otherwise either has
an agenda or they're trying to sell you something or they just really don't know
what's going on in this platform, to be very blunt about it.
developerWorks: This has been great. You guys are enormously entertaining and
informative, and we're really grateful you took some time to visit with us today. Scott
Davis and Ted Neward, thank you both so much.
Neward: Thank you.
Davis: Thank you. It's been a real pleasure.
Resources
About the author  | |  | Scott Laningham, host of developerWorks podcasts, was previously editor of developerWorks newsletters. Prior to IBM, he was an award-winning reporter and director for news programming featured on Public Radio International, a freelance writer for the American Communications Foundation and CBS Radio, and a songwriter/musician. |
Rate this page
|  |