This month we welcome back Chuck Allison as a CUJ columnist. His new bimonthly column, "import java.*," is designed for CUJ readers who want to learn more about Java. Chuck will forego the breathless sales pitches that seem to be an integral part of most introductions to Java. Instead, he'll be giving us a look at Java, warts and all, from a C/C++ programmer's perspective.
It goes without saying that we are tickled to have Chuck back as a columnist. It may not be so obvious why we are running a column on Java. You can bet it is not a decision we made lightly. We have all witnessed the phenomenon of vaporware, in which a product or technology gains a foothold in the market by virtue of pie-in-the-sky promises. This phenomenon is especially pernicious when it preempts consideration of better, already implemented, solutions. Of course, for a vaporware product to survive, it must eventually make good on its promises, or at least show some technical merit. But by then the damage has already been done we have favored creative marketing over creative engineering. Image over substance.
I have always been loath to have CUJ participate in such a process. That is why I have not been in a hurry to catch the so-called Java wave. After all, if there are waves to be ridden, I want to ride them, not help manufacture them. I think Java is safely beyond that point, however. It appears to be turning into a real programming language, and perhaps not in the way most of us would have expected. That is, Java is coming to be appreciated not as the ultimate cross-platform tool but as a clean and safe OO language.
As evidence I cite embedded compiler vendors like Cygnus Solutions and Diab Data, who are developing Java front ends to their compilers. Users will be able to compile Java source down to native code. Several such implementations are becoming available. Most offer garbage collection but completely eliminate the JVM (Java Virtual Machine). Certainly this is not Java As Sun Intended. In fact, I'm not sure what we ought to call it. Maybe something like "NativeJava" would be more appropriate. (And please don't tell Sun where you heard that.)
Meanwhile, "regular" Java continues to prove itself the language of choice for certain kinds of distributed applications. With all these different ways being developed to use Java, it is becoming rather hard for C and C++ developers to ignore. What Java offers us is a relatively hassle-free way to do object-oriented programming, with a syntax that is already familiar. It may make sense to use Java on projects that don't require all the gee-whiz features of C++, or the efficiency of C.
Java will never replace C or C++, but it is making developers' jobs a little harder in one important respect. It is making the choice of a programming language less than obvious. As the counselors like to say, that's a good problem to have. With any luck, it is a problem CUJ will be able to help you solve.
Marc Briand
Editor-in-Chief