What Java is Saying
Tuesday, May 28, 1996 by Dave Winer.
Hey -- I just had a revelation about Java.
I've been confused. I've even said so a few times in DaveNet.
I've asked what Java is about, and I've even gotten responses.
Check out http://www.scripting.com/davenet/mail/.
But last night a lightbulb went off.
And of course I wanted to share it...
When I was a computer science grad student, in the late 1970s, we were ga-ga about an idea called Remote Procedure Calls or RPC. An application is distributed across a network, with pieces residing on different servers, presumably with different access privileges, allowing multiple authors to work on the same piece of software. RPC allows parts to be updated at will; and hopefully because of agreed-to interfaces, everything would keep working.
Before this dream was realized, I left for the world of microcomputer software where we were playing with user interfaces, and the network was something you connected to thru a slow phone line. There weren't any software interfaces to this network. It was something a person could use, thru CompuServe or AOL, but software couldn't build on it.
By the time LANs came about, I was already on the Mac. It had networking built-in, but the APIs were horrendous and the platform vendor was hogging the fast lane, so very little of its potential was developed.
We tried again, we had a scriptable AppleLink client, but Apple wouldn't let it out. Oy. We couldn't work together. No nirvana! Wait one more generation...
Now, with the addition of the Internet to personal computing, and its clean low-tech well-understood APIs, it's time to think about RPC again. The Internet is the vendorless platform. It's a groupware system. Let's try again. We can work together!
That's what Java is saying.
A programmer can specify that a procedure lives on another server so it can be close to some resource, like a database or an email server. The procedure does queries or searches, compute-intensive things that would be too slow with a network connection inbetween. It delivers results to other parts that are running closer to the user, providing the responsiveness that users insist on.
When someone wants to run an app, it collects the parts it needs from the net, and runs.
Software is an evolutionary process. RPC allows pieces of a problem to evolve separately. It allows responsibility to be allocated. The time between development and deployment is shorter. Seen this way, Java will be a software distribution system with a very short pipe.
This has been the panacea of software as long as I've been involved in software. It's nirvana -- people communicating and getting along with each other; happily making each other richer, and more powerful. What more could you want from a computer? Hey -- what more could you want from life!
So Java is attempting to address the ideal. The computer is a network. The resources available to users go beyond hard disks and screens and mice and keyboards; they include people. Other users become attached to our computers.
Of course this is just the promise of the Internet. It's a dazzling opportunity. But it's still a familiar problem. It's what everyone has been working on since we first started playing with computers. No wonder everyone is so excited. It's not about a language, it's about a decision to work with each other. Now we just have to learn how to do it!
No single developer gets to do it all. That's the new idea! That's precious and it must be guarded. It's not about embracing and extending or fear uncertainty and doubt. Been there, done that.
Apps written in Java will fall into two classes -- internal apps, running within a single organization, providing new access to internal information resources. Intranet apps. (Who came up with that term? It deserves a prize!)
The other class is groupware communication apps: chatrooms and bulletin boards. They will be used to connect the Java community together. As the services evolve, they will open up to people who aren't writing in Java, but are using tools that written in and connect to Java.
These two areas are consistent with what I see happening in the Java development community. And of course they meet up at a single place, where organizations internally use the same tools that are developed for public use.
In the software industry, we will all make our software bases relevent to the Java mission. That's what it's going to take to stay interesting. And being interesting has always been key to growth in the software business.
The first round of new relevence is in the area of development tools. Integrated development environments from companies like Symantec, Microsoft, Borland, Metrowerks and Natural Intelligence.
But you can see Java plugging into every type of software. It'll be interesting to see what people come up with.
In the last piece I said "The power to bundle doesn't mean as much as it used to. People who use the net like to download software. It's fresher stuff!"
It struck a nerve! With the net, software cycles are shorter. This is good and not good. Netscape has bloated. We expect crashy software.
But we're seeing unprecedented progress in the software world. The pipe got shorter, that made a huge difference. With Java, the pipe moves to runtime. It'll be the shortest pipe ever.
Can we handle this power?
PS: I'm attending the JavaOne conference in San Francisco later this week. Please let me know if you're showing a product there. I'd love to see what's up.
PPS: Nirvana is a state of perfect blessedness achieved by the extinction of individual existence. It's groupware!
PPPS: Panacea is a medicine that cures all diseases. No need for a panacea when you're in nirvana. We'll see...
PPPPS: I want a great scriptable dictionary program for the Mac. Are they any out there? I'm not in nirvana. I'm still using a printed dictionary. Not cool!
PPPPPS: An API is an Application Program Interface. It specifies how apps connect to services provided by lower-level software and now the Internet.
PPPPPPS: We're working on a low-tech object database server, written for Frontier parts. When Frontier is adapted to run Java apps, it will be a distribution system for Java parts too.