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.
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]
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 ...
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.
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.
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?
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.
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.
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.
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.
- developerWorks' Java technology zone
- Java forums
- New to Java technology
- "Mastering Grails" article series by Scott Davis
- "Busy Java developers guide to Scala by Ted Neward
- "Securing Java applications with Acegi" article series by Bilal Siddiqui