James Gosling on Java
prostoalex writes "It's been ten years since the official introduction of Java - a programming language combined with virtual machine and a class library. ZDNet published an interview with James Gosling, the creator of Java, who talks about the project's past, present and future."
If anyone is interested in conversing with James Gosling one-on-one, he (amazingly) hangs out at DevShed.com in the forums, likes to aswer questions, and my guess is he knows what he's talking about when it comes to Java. Even more amazing is that as smart a guy as he is, his social skills leave a lot to be desired (read some of his posts in the Lounge).
"Who are in control, they are not in control of anything - they don't even control themselves!" - Glen Beck
Why the hell did the interviewer decide to turn it into a "how did/does/will Java work with MS technologies" diatribe?
I mean, theyre so disparate in ideaology, while I can understand some of the relationships, why on earth bring them up with the creator of a language that MS has deliberately shunned when they couldnt get it to work "their way"?
Very puzzling. Poor journalism in my opinion.
...both interiorlly, and exteriorlly.
Also, why does Sun waste all the effort on NetBeans? I'm sure it's a very capable IDE, but isn't nearly everyone else using Eclipse? Where would Java or Eclipse be if Sun put all the engineering time from NetBeans into a more useful project? I guess here I don't see the value of the competition as much...
Agile Artisans
> (Sun CEO) McNealy: We absolutely underhyped [Java].
Uh, Scott; that's not the way the rest of us remember it.
Yep, it's been 10 years since Java was officially introduced. It should come as no surprise that I was being turned down for jobs 2 years ago because the jobs in question required 10 years of Java experience. (And 5 years of C#/.NET experience as well. And I think at least one required post-doctoral work in Physics, Astrology, and Film.)
FYi, parent is trolling. There's no such quote in the article.
1. Kudos to the Groovy authors. They've even garnered James Gosling's attention. If you write Java code and consider yourself even a little bit of a forward thinker, look up Groovy. It's a very important JSR (JSR-241 specifically).
2. He talks about Javascript solely from the point of view of the browser. Yes, I agree that Javascript is predominently implemented in a browser, but it's reach can be felt everywhere. Javascript == ActionScript (Flash scripting language). Javascript == CFScript (ColdFusion scripting language). Javascript object notation == Python object notation.
But what about Javascript and Rhino's inclusion in Java 6? I've been using Rhino as a server side language for a while now because Struts is way too verbose for my taste. I just want a thin glue layer between the web interface and my java components. I'm sick and tired of endless xml configuration (that means you, too, EJB!). A Rhino script on the server (with embedded Request, Response, Application, and Session objects) is the perfect glue that does not need xml configuration. (See also Groovy's Groovlets for a thin glue layer).
3. Javascript has been called Lisp in C's clothing. Javascript (via Rhino) will be included in Java 6. I also read that Java 6 will allow access to the parse trees created by the javac compiler (same link as Java 6 above).
Java is now Lisp? Paul Graham writes about 9 features that made Lisp unique when it debuted in the 50s. Access to the parse trees is one of the most advanced features of Lisp. He argues that when a language has all 9 features (and Java today is at about #5), you've not created a new language but a dialect of Lisp.
I am a Very Big Fan of dynamic languages that can flex like a pretzel to fit my problem domain. Is Java evolving to be that pretzel?
FYI, grandparent should have been modded informative and parent modded funny.
If my grammar and spelling are off, I am [distracted/tired/careless] (take your pick)
"I knew it was slow, but I figured computer power would eventually catch-up and run things at a reasonable speed. It appears I was wrong."
On the 10th anniversary of Java - a joke that was out of date 5 years ago. (And, I remember the same thing being said about C++ 20 years ago).
Psssst.... "James", not "Josh".
tard.
See my journal for slashdot ID's by year. Mine created in 2005. http://slashdot.org/journal/289875/slashdot-ids-by-year
From TFA:
This is nit-picking, I know, but I was under the impression that scripting languages were actually defined by the presence of an actively-running interpreter during execution, making it possible to, e.g., construct and execute statements at runtime with things like PHP's exec() or Lua's do(file|string) functions (see: http://www.lua.org/pil/8.html for discussion on dofile and Lua's status as a scripting language). I wasn't aware that capability for rapid prototyping or language speed had anything to do with it.
Taking that into consideration, then, would Java with JIT qualify as an interpreted or compiled language? I'm not sure, myself---any thoughts?
That aside, a solid interview. Java looks to be pretty interesting; though in its current form it does bug the hell out of me (System.out.println()? Yeah, yeah, OO, but come on, three nested levels of scope just to get to a command line?), its progress has been impressive, and it's an innovative idea.
Unfortuately things can happen like a GC cycle at a bad time that can cause annoying slowdowns at the worst moment.
As Java is now used in real-time control applications, that is certainly avoidable.
bloated: the java class libraries are huge and so deploying a java environment (and you can't assume a decent java system will already be installed by default) is a huge undertaking
Not really. Java can be installed as a single rpm or tgz. Its over 10 mb, but given the size of a CD-ROM, or broadband download speeds, that is hardly a 'huge undertaking'.
and who would seriously wan't to release thier software as java bytecode when jad is arround?
There are plenty of bytecode obfuscators around.
It's been ten years since the official introduction of Java
And the damn thing still hasn't finished loading.
Nobody writes Java with Vim or even Emacs JDE for very long. The productivity increase a real IDE like Eclipse provides is phenomenal. System.out.println is 6 or so characters of typing with code completion. (But the real win is being able to do things like say "show me all the places my constructor is invoked." Text searching isn't good enough when you have a million-line project.)
Yes, Java is slower to run than C++. However Java is faster to write than C++; and I think that's the real issue.
In terms of power of expressivity, I think they're about the same, but I find Java easier to read than C++, and I find that mid-level programmers make far fewer subtle "shoot yourself in the foot" mistakes in Java than they do in C++. The run-time array bounds checking, lack of pointers, checked exceptions, and the lovely NullPointerException serve to keep a lot of people out of trouble. The embarrassing wealth of pre-written, tested, free, source-available modules Java has, over the reinvent-the-wheel approach of C++ goes a long way in improved programmer productivity. Here's a test for you: have one of your middle-skilled programmers do some network communication in Java and C++ and see which program takes less time to write and works better.
No folly is more costly than the folly of intolerant idealism. - Winston Churchill
Don't worry. Binary XML will soak up far more compute cycles that CPU developers can possibly invent over the next 10 years.
There is a slight problem with your logic. 20 years ago C++ was barely a toddler. Nobody used it and it was not generally known to the public.
Nonsense. I was using C++ for development in 1985, as were many others. The c-front translator for C to C++ was released in 1983.
Since when has widespread use of a language been any measure of its performance?
Java on the other hand is 14 years old and people are still talking about its slowness.
Yes, because those who object to it not being open-source have a political agenda to rubbish it. Those of us who actually use it realise this talk is meaningless.
C++ was 14 around 1997 and was widely used and known for its high performance.
Doesn't that say something to you?
Yes, it shows that a lot of developers have a reactionary attitude, and it takes them a long time to adopt new technologies.
It took a long time before developers realised that this 'new-fangled' object oriented C++ could match the speed of C. Meanwhile, some of us had been using it for years.
We considered Jython and Groovy when we were adding scripting to an app, since they were the only two scripting languages that came with licenses that were found to be acceptable by our legal department. We went with Groovy. Although the Jython guys angrily insist that they are still working on the project, it's been 3 years since the last stable version of Jython was released. Since then the only release has been in July 2003, and it was an early alpha. Groovy OTOH has a lot of people working on it who have been putting out a new release every few months. Jython has not been updated in years. Which is a shame, because I was rooting for Jython.
C++ was 14 around 1997 and was widely used and known for its high performance.
That's not how I remember it. I remember in 1996-1997 people were scoffing at C++ because it was "slower than C".
There are other attacks, but most of the "exploits" are due to a buffer overflow (90% of all exploits? 95%?). Heck, if I'm am not mistaken it was a buffer overflow that put an end to the "x years without a hole in the default OpenBSD install" slogan :(
Now how many buffer overflow did happen in the JVM in the last 10 years?
I think the answer is zero. And if it's not zero, it's only some implementation of the JVM that was at fault.
For me it's all about the sandbox. Java, Jython, Groovy, you-name-it... I don't care. As long as it targets the JVM. It's tried, lean, mean, rock solid technology. You just ain't escaping it.
In TFA (yup, I did read it), Gosling says that "The only serious divide is they (C# / .Net) have this unsafe mode which they use a lot. One of the principles I believe in is there shouldn't be an unsafe mode."
That's a good principle to believe in.
Eclipse has 2,425,709 lines of Java code and runs on any J2SE 1.4 (or newer) compliant JRE from any vendor on many platforms (the essential parts of it will run even on PDAs). I don't think any scripting language would have been up to this task.
My opinion is that Java is the best thing that could have possibly happened in the software development field in the last 20 years. The fact that it is an openly specified object-oriented runtime suitable for a *huge* variety of configurations (desktop, middleware, embedded, etc) is a blessing. Developers have been able to learn one language and develop any kind of applications on any platforms (while reusing many of the skills). Also, vendors can target a much wider market when they do not have to focus on a single platform. Not mentioning that Linux owes a lot of its success to Java.
slow: slow to start definately, slow in actual code speed no. Unfortuately things can happen like a GC cycle at a bad time that can cause annoying slowdowns at the worst moment
Sure its slow to start because ther is a 2nd process. But Java 1.5 addresses this to some degree. As for inconvient GC cycles, that is the programmers fault. You have to do your own GC when you think you have time. The JVM will only GC when its full...
bloated: the java class libraries are huge and so deploying a java environment (and you can't assume a decent java system will already be installed by default) is a huge undertaking
False.
NOT FREE: well there are free jvms but there is still catching up to do and as they get better they will undoubtablly suffer the same issue as wine, most stuff will work but there will be slight differences that fuck over some apps.
You mean like Microsoft tried?
the fact that languages like java allow poor coders to produce code that kind of works rather than total failures probablly doesn't help the languages reputation either.
Troll.
Unfortunately, it's like trying to run C++ programs through an interpreter on a machine at 3/4 of the power of the one you're using instead of actually compiling and tweaking it for maximum speed and efficiency.
If you ran some actual benchmarks (with modern Java) you will find you are mistaken. Modern Java VMs include an optimiser that tweaks the machine code for speed and efficiency just as you describe. Last year, a set of benchmarks for numerical computation showed Java within 4-5% of optimised C code.
I use Java apps at work and they are often slow and ponderous compared to similar apps written the normal way in C++
The reason for this is usually that some organisations are very slow at upgrading their Java. Java 1.5 was released last year and is generally acknowledged to be fast, both in terms of general performance and GUI speed. Many companies are still using Java 1.3, which is very old.
I can write java software that has a GUI, networking, database connectivity and port it between different OS's with ease. I know this because I have done it with several products.
Your post is FUD.
Everytime java is discussed on slashdot, I'm amazed at how some junior leaguers try to dismiss it because they can point out one application where java is a poor choice.
There are some applications where it does not make sense to implement in java. However, I say that java is a great choice for the top layer of a web application server stack. There are a lot of web apps that take the form of:
1. Gather data from one or more databases.
2. Perform some consolidation and express the output in html.
In this example, java is a consolidator of data from disparate data sources. It needs to hang on to several network connections and do some simple IO but it does not need to burn the CPU at 100% because it spends most of it's time blocked on IO. Java is a great choice for applications like this because there is a very large and active community working to make java dynamic web serving better and better. Every year your organization can, for free, upgrade to a new version of java and simple app server like Tomcat and reap the rewards of the communities improvements. Also, in my experience with server applications, the promise of portability is real. I've ported from windows to solaris and then to linux without changing the java application.
The "barfing runtime exceptions" was exactly my point. It's not only a red flag for badly written code, it's a built-in QC test. I'm TIRED of reading other people's code and having to go back to them and say "O.K., this (really arcane thing that you never will understand) might/probably will happen, and so therefore I can't put you code into production". All them "barfed runtime exceptions" make my argument for me. I can simply fiat "no unhandled exceptions" and leave it at that.
No folly is more costly than the folly of intolerant idealism. - Winston Churchill
Java is very important in the research community. I have been a grad student for past 3-4-5 yrs (..have lost count by now :) but I have never used any language other than Java for my projects/experiments . Be it simulation requiring a Knowledgebase of million RDF triples or be it a Medical Imaging Software to be used by Physicians.. it does it all.
Somehow 'application researchers' like me are fascinated by the extent of its use.. (drawing nice GUIs or plotting graph with existing Jars)
With regards to question of scaling..lately companies like IBM have been working towards creating optimized JIT compilers for Java.. I had benchmarked one during my internship at IBM Research.. and it gave nearly similar performance to native C/C++ apps.
As I was searching for some info about JBuilder, I stumbled across this juicy bit that I had not seen before.
a d_id=34246
Borland announces JBuilder Roadmap; future will be Eclipse-based
The jist of the story is that in the first half of 2006, JBuilder will ship a new version, code-named "Peloton", which will be completely Eclipse-based !!!
http://www.theserverside.com/news/thread.tss?thre
below is much of the article text in case it gets swamped.
Borland has announced their technical roadmap for JBuilder. Later this year Borland will ship JBuilder 2006 which will add shared code and shared debugging features. In the first half of 2006, JBuilder will ship a new version, code-named "Peloton", which will be completely Eclipse-based and add better dependency analysis features.
The shared code and debugging will allow developers in different locations to participate in shared coding and debugging, as though they were sitting down together in the same room.
The Eclipse news follows up from their February announcement of joining the Eclipse board and their intention to re-build their entire application life cycle management product suite on top of Eclipse. Borland sees Eclipse as an integration framework upon which they will be building JBuilder as well as their other products. By leveraging Eclipse, they can realize the cost savings of not having to worry about maintaining IDE functionality, and integration with other Borland tools, as well as gaining a larger audiece via Eclipse and benefitting from the large ecosystem of Eclipse tools.
According to Rob Cheng, director of developer solutions at Borland, the major new addition planned for Peloton will be a dependency analysis feature. It will be able to understand the dependencies between different artifacts in the project, such as the link between JSP's and struts controllers, EJB's and the persistence tier, without the user needing to configure these explicitly or switch views. Debugging will be improved - stepping into different tiers will be easier without end users needing to manually set additional breakpoints.
Code-name Peloton comes from a cycling metaphor, which is used to describe a group of cyclists who can ride faster together than they could individually, reflecting Borland's emphasis on team collabortation features in JBuilder.
Borland has not announced any pricing information, but they are looking into offering a separate 'distribution' of JBuilder on Eclipse all integrated to make it easy for corporate clients to deploy.
Borland chose Eclipse over Netbeans after watching industry momentum and listening to customers who think Eclipse will be their next major platform.
When asked about what their differentiators for JBuilder-Eclipse over Websphere Studio will be, Borland responded that WS Studio is focused on Websphere, whereas JBuilder supports multiple application server platforms.
Luis De La Rosa in his 2005 predictions suggested that Eclipse will become the Java community's answer to Visual Studio.NET, as a de facto IDE; this being a good thing for the Java community, as Eclipse will help build a market/ecosystem for development tools much like Visual Basic, which is the real goal that Sun wants to reach: 10 million developers using Java.
Borland's decision to join IBM in basing their IDE on Eclipse is certainly bringing us closer to that prediction! What do you think?
They entirely overhyped it in areas where it's relatively useless (the desktop) and entirely underhyped it in areas where it's extremely useful (backend and embedded areas).
Now ten years later you talk about "java" and all anyone remembers are those horrible, sluggish AWT applets, running on netscape 4.0's broken JVM, which they used during the initial Java hype push. But almost nobody these days knows about the success Java met in unglamorous areas after the hype push had died off.
Irritable, left-wing and possibly humorous bumper stickers and t-shirts
Ahem, I once delivered a program for an RS6000 and got the first access to that architecture at deployment time. It ran instantly, all I did before was to develop the program on windows with a Sun JDK, test it on a IBM JDK on Linux which caused me to alter one line of code in about half a million LOCs this program had including all the libs I used and them Deploy it on a Power based multiprocessor RS6000 which I could not get access to.
Java should be great, but it isn't. For all the 'writeonce, run anywhere' gumpf that the marketing department came up with it failed in the most important test: usability. I can code pretty well in most languages, but as I work with Java, and was trained in Java at Uni, its the language I think most clearly in... unfortunately.
The fact is I can code a quick app in Java on my Mac, compile and send it my Dad on his Wintel and he won't have a clue what to do with it. I then have to spend 5 minutes on the phone explaining either how to install the JRE, or how to run it from the CLI. Whats worse is that once its running, it looks like I can't code, as Java, by default runs noticably slower as you wait for the JRE to bootstrap and then for the JIT to get all the important bits compiled. Why would I do that to myself?
Java is a great concept. But it has systematically failed on the desktop. What I want is a write once, compile anywhere. Same scenario, I want to have a compiler that I can target a Wintel platform from my mac and just send my dad the executable or installer, so all he has to do is double click - like he would any other app, and it run as well as a VB app (ie a little slower than native is fine). I would keep a few things from Java. I love GC for quick hack apps, fine grained memeory management has its place, but you can often feel like you reinventing the wheel, and its a gapping whole for the script kiddies to drive their payload through. I also love the central API. I can see the purists arguing against exceptions, but they do make debugging very easy, and they're not that expensive really. I also like the ease you can do threads. I don't like the GUI performance or the end user experience.
If MS isn't going to play ball, and support various runtime environments from a fresh install, or if Java continue on insisting on a 20MB JRE download I can't see anyway around the byte code problem except to distribute binaries. Qt is a good start. Mono and C# are good candidates, but to be honest I'd be tempted to take Java, bolt Qt onto it, and use GCC to create targeted binaries. Is that out of the question?
Scared of flying, pointy things snce 1979!
Indeed a problem for garbage collectors, luckily Java ships with several different algorithms. The one used by default (full halt for a step in generational GC) has the best throughput.
If you are more worried about short pauses you have two other alternatives however. The concurrent low pause pause collector will halt the application threads only in some phases of the collection, it is activated with the -XX:+UseConcMarkSweepGC flag (or system property). It does work in a different thread, so it is a good bet if you have multiple processors especially. The other option is the incremenetal collector, -Xincgc, which will do minor collections in parts with application threads getting to run between the steps (causing the pause to be spread out).
Another notable option in these multicore days is -XX:+UseParallelGC, which will launch several GC threads and do some of the work in parallel.
Overall there is a lot of opportunity to tune the Java garbage collector, google about on it a bit, it has been shown quite feasible to make nice interactive experience with Java (Jake2 anyone?). If even better guarantees are needed however it is probably best to look at one of the realtime JVM's. There are a variety available.
Unsafe mode was added to C# to allow the grandfathering of massive volumes of ill-behaved code into .NET systems. Microsoft does not like giving up old code bases.
And Sun, instead, creates millions of lines of untested, immature C code and adds it to their Sun Java implementation (just look at the Java2D code). Frankly, I trust even Microsoft's libraries more than that.
Microsoft's claim that sprinkling "unmanaged code" everywhere in your system is superior to linking to external libraries is very strange.
Unsafe statements are explicitly marked in C#, and they are limited to unsafe modules. C# is exactly the same as JNI in that regard, but C# provides you with a much better language to write JNI-like modules in, a language that is far safer than C/C++ even in unsafe mode, and a language that actually works across systems.
What does the phrase "tightly limit unsafe code to just the statements where it is needed, often just a single statement" mean? How can you limit something that can be everywhere?
It means that as a programmer developing a piece of code that needs to do something unsafe, it's better for me if I can compile almost all of my code in safe mode and only have a single line of unsafe code, than being forced to write an entire JNI module in C/C++.
Now they're claiming it's okay to put buffer overflow vulnerabilities in your code because it's convenient for the programmer. They just don't seem to understand security.
You keep confusing safety and security; safety is neither necessary nor sufficient for security. Most Java applications are, in fact, not secure at all.
C# supports runtime safety in a well-designed and time-tested framework, which is helpful for building secure systems. But forcing people to use only safe constructs does not improve security any further, it actually makes it worse.
I never really bought the "social skills" bunk. I think chitchat and small talk is useless and stupid so I usually don't engage in it. Does this mean I don't have "social skills"? As long as you are articulate, and unless you are in public relations, fuck "social skills".
Stereotypical pseudo-rational geek attitude.
The inconsequential "chitchat and small talk" are the manner in which we find out more about the person we're dealing with before things get more serious, allowing us to "feel our way round" when we are unsure. This may apply to both strangers and people we're currently unsure of; don't bring on the heavy stuff first. They're the manner in which we show respect by asking questions about the other person that may not *directly* involve the business we have with them; of course, this may open up opportunities we hadn't considered, possibly leading to friendship and/or greater business involvement.
Not everyone is equally good at this. Not everyone places equal importance on it. That's part of the healthy mix of personalities that push some people to work in public-facing jobs, and others to work in more "human-phobic" areas (such as the more technical aspects of computer hardware). It's okay to not be a "small talk" person, as you are.
On the other hand, to criticise it for being "useless" (because it doesn't serve any obvious purpose) smacks of blinkered short-sightedness and the kind of (phoney) rationalisation of their own behaviour that geeks like to indulge in.
Frankly, the kind of people who come out with this kind of stuff probably consider themselves "rational". Actually, that displays a laughable (and verging-on-the-autistic) lack of self-awareness. Geeks are no more "rational" than a lot of other people; they have their own neuroses and obsessions that are obvious when you take a step back. For example, to use the same surface "rationalisation", what purpose does being fanatical about "Star Trek", an entirely fictitious TV show serve? None. Surely it's more rational or logical (*) to live in the real world.
Of course, the fan will explain how it represents the problems of today's world in a semi-abstract manner, blah blah... the more insightful will mention that it provides an outlet for the geek personality type. Point is; if they are forced to explain it in depth, they'll put the effort into considering their own behaviour that they won't even waste considering anyone else's. (Although they won't explain it as an excuse to escape the real world or dress in fantasy costumes; that would be too close to the bone).
So, to get back to the point, your failure to even recognise the purpose of small talk (whether you like it or not) smacks of the most arrogant and deluded abuse of rationality to justify your own shortcomings and behaviour.
(*) Reminds me of a friend I had in my early teens who was into sci-fi, had a crap geeky sense-of-humour and an obsession with Spock and "logic". He was no more logical than anyone else; in fact, sometimes he was downright weird. In retrospect, I reckon he was (slightly) autistic in some form.
"Slashdot - News and Chat Sites Deviant". (Click "homepage" link above for details).
An updated Eclipse plug-in and a new Idea plug-in for Groovy were just released. They aren't perfect yet, but there is progress.
We considered Jython and Groovy when we were adding scripting to an app, since they were the only two scripting languages that came with licenses that were found to be acceptable by our legal department.
Why choose at all? Why not use the Bean Scripting Framework (originally from IBM's Alpha Works, IIRC) and let the customer choose whichever language they prefer? BSF lets you embed any scripting language that has a conforming wrapper. BSF wrappers are available for Groovy, Jython, BeanShell, Rhino, JRuby, Tcl, NetRexx, XSLT, and perl among others (although it's been my experience that some of these aren't all there yet).
FreeSpeech.org