Trouble Ahead for Java
Jeremy Geelan writes "The editor-in-chief of the world's largest journal devoted to Java wonders whether, with the arrival of Microsoft's C# programming language on the scene, Java perhaps has only 5 years or so left to live. Javaland has erupted! This is a little like Bill Gates wondering out loud whether to send Scott McNealy a Christmas card. But is Alan Williamson right? Read this short article and decide for yourself."
All pages on one page here
mp3's are only for those with bad memories
Take a look here, it's new in JDK 1.4
There May Be Trouble Ahead
by Alan Williamson
As Nat King Cole famously sang, we have to "face the music and dance..." This month's editorial is coming to you with a reader beware warning!
I've been engaged in some great debates over the last month on a variety of topics, but the one that has caught my interest is the old chestnut regarding the longevity of Java. Is it here to stay? If not, how long do we have? Quite rightly, it's being talked about and I've had the good fortune to brush shoulders with a number of big names in our industry who have given me their perspectives on the whole debate. I have my own feelings about where Java is headed and I do believe that if, as a community, we don't get our act together, we may have only five years left at the most. After talking to my counterparts, it would appear I'm being overly generous with five years.
What's happening? Well, it's our old friend C# and its relentless march toward the development community. Setting aside the old argument that due to Microsoft's dominance it may well win the day, it's interesting to look at other reasons why C# may win the battle. Let's blow away some misconceptions that you may or may not be aware of regarding this new kid.
Myth #1: C# is a Windows-only technology. .NET services alongside Apache on a Redhat box, seamlessly integrating into the rest of the network. This alone would be a major blow to server-side Java. It's also a subtle way for Microsoft to unofficially support the growing number of Linux seats without losing face (read www.halcyonsoft.com/news/iNET_PR.asp).
You could be excused for believing that, but did you know there's a major movement in the open source world to port the CLR (Common Language Runtime, i.e., their JVM!) to operating systems other than MS Windows? Linux, to name one. Imagine for a moment being able to run your
Myth #2: C# is an inferior Java clone.
This is the most dangerous one and the one you probably tell yourself in order to keep the scales tipped in Java's favor. The truth is, it's not an inferior clone; it's a different clone, with many arguing that the differences are minute to the majority of the developer community. It will be frighteningly easy for Java developers to move over to C# with no real headaches to contend with. I suspect this was always on Microsoft's mind when developing the language (read www.prism.gatech.edu/~gte855q/CsharpVsJava.html).
Myth #3: C# is for developing Web services only.
Most definitely not, and I have heard this one retorted back to me on a number of occasions. Ironically, this is the one area that could really hurt Java Ð on the client. As you know, Java has not made any significant headway in this space due mainly to its awfully slow Swing implementation. While the recent release of JDK1.4 has brought significant performance gains, it's still nowhere near the speed of its native Windows applications with respect to fast, snappy responses (although it must be said, the speed of a Swing application on a Mac OS-X does show what could be achieved). C# is the new building block for Windows applications, the next VB! And we know how many applications popped up when VB hit the market (read www.c-sharpcorner.com/WinForms.asp).
Okay, how many of you think I've abandoned all hope for Java and have gone to the dark side? I suspect some of you are questioning my loyalties at this precise moment, wondering if I'm fit to occupy my role as EIC. Well, don't panic, I'm merely being a realist and looking at it from all angles. You'd be the first ones to complain if I buried my head in the sand and just ignored the threat. We have to look at this together and come up with a strategy that will enable us to effectively take on C#. We'll be getting a lot of heat from all over and we need to be armed with the information and prepared to go back to the drawing board and reeducate the masses. Sadly, they are being led a merry dance by Pied Piper Gates.
Allow me to cite you an example of such blind ignorance and if this doesn't scare you, then I don't know what will. I was recently involved with the Scottish government, discussing technology and what have you, where naturally the topic of Microsoft was high on the agenda. Excusing the fact that these people took a certain pride in believing they knew what was going on and loved name-dropping, the phrase that caught me off guard was the following: "Java? No one is doing that now. Microsoft is no longer supporting it."
Wow! Talk about a major miscommunication. And this from someone who controls budgets for the technology sector in Scotland. Ironically, I believe he really thinks he has his finger on the pulse of technology. It's sheer ignorance like this that scares me the most. Microsoft has successfully planted and nurtured the seed in people's heads that just because it isn't supporting Java in Windows XP, Java is dead. I have to admit I was taken aback and quite flabbergasted when I heard that retort. I really didn't know where to go with that. So much background information was obviously missing that I wasn't too sure if I would come over as patronizing and whether, ultimately, they would understand.
Sadly, this is not an isolated incident. Ever since I started writing about this topic in my editorials, I've been hearing stories from you regarding similar misconceptions and it scares me. We have a beautiful language here in Java; it has achieved industry-wide support and is pushing forward with great velocity. What can we do to support it?
You do realize we need an anthem. All great causes have an anthem. Something for us to get behind and sing!!! Suggestions gratefully received. We need a Java song!
Until next month...
Author Bio
Alan Williamson is editor-in-chief of Java Developer's Journal. During the day he holds the post of chief technical officer at n-ary (consulting) Ltd, one of the first companies in the UK to specialize in Java at the server side. Rumor has it he welcomes all suggestions and comments.
:cough: Dumbass :cough:
eBay uses latest Websphere which uses Java
Looks like the site is starting to bog down, so here's a mirror if need be.
--It's Pimptastic!--
You can get a copy of the source to a CLI implementation which also includes a C# compiler that can run on XP and FreeBSD, here.
From the link:
-c
I have discovered a truly remarkable proof which this margin is too small to contain.
Quality, performance, value; you get only two, and you don't always get to pick.
Myth #9 - .NET doesn't support pointers
Try looking at the language spec for C# before you make comments like this. If you mark your code as unsafe, you can use all the pointers you like...you can create stack-arrays...just about anything you want.
Karma: Non-existant. Due mostly to the fact that you smell funny and nobody likes you.
Java is not an open standard
Then what do you call this?
IIRC, Java Developers Journal has very close ties to it's older sister publication Windows Developer Journal, and receives much of it's funding from none other than....
<drumroll/>
Microsoft
<cymbal type="crash"/>
With that in mind, it's not surprising that the editor has such dire predictions since you can guess who signs the checks.
Note, I'm not bashing C#. The language is so similar to Java that you can certainly find good things in it, but predicting that MS will port their runtime over to a large number of other platfoms might not be the smartest bet.
I'm not sure there is a "pure OO", since there are so many variations of OO over such a long history. There are general information-modeling languages, such as EXPRESS, middle-of-the-road programming languages, such as C++, limited but useful programming languages, such as Java, and very limited languages, such as C, Pascal, etc. All of these languages exhibit OO-ness, but there isn't a clear time when OO suddenly sprang into being.
There may be a paper somewhere that began the OO buzz, but OO really started when philosophers began classifying reality (this may even have occurred before the 1970s!).
Healthcare article at Kuro5hin
(emphasis added by me)
Egads, I hope not! That's the sickest, most incorrect thing I've ever heard. That is extremely fragile. What happens if you or someone else adds a virtual/abstract method somewhere up the inheritence tree? You now have to either implement a default (thus making it no longer abstract) in the class where the new method is added, or at least in any classes directly derived from that one. Worst-case scenario is that all inherited classes will need to implement that new method. This is bad. Not to mention that it's simply poor design (don't believe me? go read Design Patterns and see for yourself -- you're making arbitrary relationships that have no reason to exist).
The only reason I can see to justify the "everything derived from a single base type" methodology would be for implementing things like generic containers. Obviously, Java must work this way because it doesn't have any concept of generic programming (C++ templates, for instance -- there are other ways to implement generic programming concepts without requiring everything to derive from a single class, but I'm not going to go into all of that now). In other words, I wouldn't really call Java "Pure OO" (whatever that means).
By Way Of Example: This article, the strangely prophesied Unix Isn't Dead, and this booster for the next version of Windows.
Although I might be paranoid to wonder about this, it would be a pretty impressive use of grassroots resources. It seems like what they're doing is writing articles that cast doubt on the official Microsoft position. These articles naturally become (in a free spirited discussion site) a thread with some people defending MS and some people attacking it, which provides an excellent position for posting Microsoft's stronger arguments which then reach open-minded developers.
Anyways, it's an amusing thought. :)
Lisp OO systems are even more different, as they have no methods, but they deal with base types just fine. Instead of methods they have functions, with overloading similar to C++ -- except, unlike C++, all type checking and dispatching is done at runtime, not compiletime. In fact, this isn't that much different from other OO systems -- they all boil down to calling a normal function, where that function is determined by the type of one or more of the arguments.
The problem with Java is that it is statically typed. Whether dynamicism beyond static typing is necessary for OO is less clear, but Smalltalk is more dynamic than Java in more ways than just typing -- it also makes things like proxy classes very easy (also used heavily in Objective C). But that's just cool, I don't know if it's necessarily OO.
Java does not belong anywhere near a Windows desktop when actually running programs (not just coding/testing). Java belongs on a server. plain and simple. On the desktop, Java is slow - no, Java is *really* slow. Other programming languages (i.e. VB) are slow, but they provide an easy way for people to make simple applications that can look professional. Java does not provide this. Therefore Java's slightly higher knowledge requirements and slowness make it unsuitable for the desktop. However, Java's strength is running on a server in a JSP environment. This is because Java has so many tools built in for networking (no more C style sockets, yay!!) that a (relatively) few lines of code can produce a very powerful Internet program that is fairly safe to run. I believe it is only hurting Java's image to even pretend that it can function as an application base for desktop applications. Sun should drop all of that - including Swing - and focus on enabling network technologies such as database interfaces and web services where the end user never even knows that they are being fed by Java.
The .NET framework SDK is free, just like the Java 2 SDK.
Anything you can do in Visual Studio.NET, you can do from the command-line and Emacs.
This is an exaggeration. Thousands of developers use JBuilder all day, and that is built on Swing. I switched to Eclipse, which uses SWT, and noticed no difference in GUI performance at all - they're both perfectly OK.