So why haven't we made faster and better progress? In my opinion, it is because we have had separate communities of computer engineers focused on distinct, proprietary efforts.
Consider the analogy of the International Space Station (ISS). The enormous effort of building it involves 15 countries because despite their differences, these countries realized that their cooperation was required to make fast and effective progress and collectively focus on a single environment -- the space station -- rather than duplicate one another's efforts with several different space stations.
Note that the scientists from all these countries were able to communicate with each other -- and thus effectively collaborate and work toward a common goal -- because they spoke a common language. Before Java, software developers lacked a common language worthy of universal use. And even among, say, C programmers, different dialects required for different hardware platforms and operating systems meant that the sharing of code often still required some translation. With Java, however, developers now have a viable common language that has enormous potential for the computer and appliances industry.
Why settle on Java as the standard and not some other technology? Well, as far as I'm concerned, it could have been any language or technology introduced by any company. But Java is here today -- it arrived at the right time with the right mix of features.
Java is an elegant and absolutely wonderful language to work with; in some respects it is an entire platform in itself. Java provides a common ground across several different environments, including key operating systems such as Windows, Solaris, MacOS, OS/2, AIX, Linux, and several others. While each of these major operating system has its strengths and weaknesses, I see them as devices that simply provide developers an environment to work in to get the real work done -- creating applications for our users.
In other words, Java transcends all operating systems and should be viewed as a technology that provides commonality across heterogeneous client and server environments.
Most people appreciate Java's cross-platform nature only in terms of client-side portability and fail to recognize the benefits of server-side portability. Imagine developing a Web server or a custom application server that you write once, but it runs on any Java-enabled OS. On the client side, imagine running your applets on a screen-based phone, WebTV, or PDA. Well, this will all happen shortly as several companies introduce new devices with Java virtual machines (JVMs). For example, Nortel will soon release a screen telephone that will run the same applets that run in your Web browser; Visa International is working with JavaSoft on the Java SmartCard API, which will run Java programs embedded in chips on credit cards; and there are several other companies working on other special devices with a JVM. (See Resources below for a list of JavaOS endorsers.) Who would have thought that the mass of desktop developers would be able to develop programs in a single language for smart cards, screen telephones, PDAs -- virtually any software platform -- without having to learn several different languages or deal with porting issues! With Java, the possibilities are endless.