Dr. James Gosling designed the original Java programming language and implemented its original compiler and virtual machine. He is a vice president and Fellow at Sun Microsystems, in addition to being a researcher on software development tools. He also has contributed to the Real-Time Specification for Java. He has a bachelor’s degree in computer science from the University of Calgary and a doctorate in computer science from Carnegie-Mellon University in Pittsburgh, Pa.What is there about Java that most developers don’t?but should?know?
Well, the closest thing I can think of that would fit that line is that…the marketing language Sun uses all the time is “Write once, run anywhere.” This is remarkably close to truth. One thing that people don’t stop to think about is kind of the flip side of that, which is “Learn once, work anywhere.” Which has turned out to be a remarkably important thing, especially with people building these large distributed systems that are spread over all kinds of machines, from Solaris boxes to AIX boxes to NT boxes, to cell phones and point of sale terminals, all the way up and down the food chain. The same person could work all over the place, and that gives you both kind of a career-mode mobility within the project. People get to see the whole project. You can actually get a systemic view to what goes on.
So you’re saying one of the key strengths of Java is that it is a transparent language, thanks to its architecture?
One of the phrases I like to use is that it gives you a ‘homogeneous view of a heterogeneous reality.’ This is sort of a way for you to line up in front of you a cell phone, a desktop, and a Big Hunk server, and they all kind of look the same.
Six years ago, what was your vision for what you hoped Java would become? Was this just another project? Did you ever expect this would take on a life of its own?
No expectations of such a life. In fact, at the time that we were rolling it out, I had this discussion with my boss, Eric Schmidt, and he asked me, “So, James, what would you define as success?” I’ve even got the e-mail somewhere. And my answer was like, “Well, the Tcl guys claim they’ve got 50,000 people who’ve written Tcl programs, so that’s kind of far out. I think maybe if I could get 10,000 people to try it out and write a program, I’d call it a success.” And Eric’s answer was, “Boy, I think that’d be pretty tough.” We blew by that one really fast.
|My definition of success was pretty modest at the time.|
What were the most difficult hurdles your team had to overcome in order to make it work they way you wanted it to work?
It’s not clear it does [work the way it’s supposed to work] today.
You don’t think it works today the way it should be working?
It’s pretty close. You can generate a to-do list a mile long. Early on, there were all kinds of issues, like, so what is our goal, anyway? Very early on, we had a very crystal-clean goal, when we were the Green Project. But then as we went out and turned into the FirstPerson Project, our basic goal was to figure out some way to apply this technology in a business sense, and of course, the first thing we focused on and tried was basically a miserable failure (Java on television). We learned a lot, but there are lots of learning experiences that are not entirely pleasant…we basically learned that cable companies are control freaks, and telephone companies are monopolies that move on sort of geologic time scales. Getting anything done was pretty much impossible.
How much luck was involved in getting all the right nuances into the structure of the language?
I don’t think there was much luck involved in that, really. In some sense, the language designed itself. Because if you take this priority list, we came up with this model what we thought would be big issues in the consumer network world. And they were loosely liability, security, culpability…and my piece of the whole puzzle is going, “Gee, there are issues with a lot of these that are right down in the programming language, that are right down in C and C++.
I originally started saying, “Well, why don’t I just build this C++ component that would fix these problems?” In some sense, you take the different context, which is for a very highly distributed, consumer-oriented universe, and how does that affect these things? You format with a lot of experience, using every last programming language they’ve been using for the last 45 years, and the answer is actually pretty obvious. That part didn’t require a whole lot of luck.
Where luck came in was that set of issues we identified around it being a distributed consumer network?that turned out to actually be right. Consumer-oriented networks turned out to be important. Ten years ago, if you had tried to float a business plan around computer-and-consumer-oriented networking, you would have been laughed out of town. Can you argue that Java was the enabler, if not the creator, of this consumer-oriented market you’re talking about?
I don’t know that it created it. In some sense, it was certainly a major force in creating it, but it certainly did not stand alone. In our incarnation as FirstPerson, we were trying to get the film companies and the cable companies?the companies that had all the consumer-oriented skills?to build it; to us, that seemed like the hard part. Just getting the networking felt like it ought to be easy. So we were trying to get them to build the consumer-oriented networks. While we were off on that little charge, there was this thing happening with the Internet itself, in that the networking technologies that we were pushing (were being used by a larger number of people).
We had been doing the Internet technology from the very beginning, long before we knew how to spell the word. And so the Internet itself (at that time) was the network for universities and research labs. It evolved into something that was much more consumer-friendly. In some sense, it turned into the seed of the thing we’d been trying to get these other guys to do. So, in a sense, the launch of Java for us was about picking up our toys from one place and moving them to another. They were very compatible in the sense that they were both Internet technologies, but one was the original Internet, the geek-nirvana kind of place, and where we were coming from was this place that was supposedly consumer-oriented.
What other languages do you use on a daily basis? Do you write everything in Java?
I use it all the time. Look, here is a screen full of Java right now. Yeah, pretty much that’s all I ever use.
What shouldn’t you use Java for?
You can actually find people doing anything really good in software using Java, and often remarkably effectively. So, for example, one of the standard answers for “What shouldn’t you do in Java?” is things like device drivers. It turns out that there are a bunch of people in real time doing this very successfully. Their company, Ajile Systems, is one whose business is doing the gnarliest kind of device drivers. They do them all in Java because they get a lot of benefits, in terms of productivity, reliability, modularity; the thing works really well for lots of folks. We find people using it in smart cards; one of the things I dabbled in for a couple of years was some of the smart card stuff.
Did you know that military dog tags are Java-based smart cards now? It is pretty amazing. Then you go all the way upstream, to these people building these amazingly large systems, super computers. Java gets used well, all over the spectrum.
I have to say that one thing it doesn’t do really well?it doesn’t do small programs very well. It’s really more oriented towards building large complex systems. I’ve done a lot of scripting languages in the past, and every time I start, I say, “Well, this would be great for those little five-liners,” but the problem is that people never stop at the five-liners. They always grow into these huge monstrosities. This time around I decided to optimize the design towards things that were large rather than things that were small. In some sense, that’s paid off really well.
What would you advise a young developer to learn, looking toward the future?
|I’m kind of flabbergasted that so many people get into this without taking an analysis of algorithms course.|
One of the things Java has going for it these days is that it has a huge library of componentry to do just about anything. That is a really driving force. That, and understanding how all that stuff fits together is really important. Understand all that basic theory stuff. I’m kind of flabbergasted that so many people get into this without taking an analysis of algorithms course.
A lot of people do this?
Yeah, they just get in and start hacking. They take some fairly simple courses, but they never get into the real science part of it. And that kind of shows up in the systems that are built; they consume way more memory than they ought to, they have to limp along on really bad design.
|…there are very few good tools at the high end of the scale.|
I’ve always been a tool builder. The problem I’ve been worried about lately is that there are very few good tools at the high end of the scale. A lot of the best developers I know use simple tools like Notebook, EMACS, and something called ACE. If you go into code to make a change in the name of a class, for example, you don’t go just into the application, but you have to go into every place that uses it?in every context. So doing something like making a change in the name of a class is not a very local thing; it’s a global thing. Also, substituting one API for another API, or moving something around in the hierarchy, or forming some kind of an optimization module. There are all kinds of things you can’t do well with current tools. I’m working on tools for really large systems.
One last question: How did Java get its name?
It got named by the lawyers. Before you ship any kind of product, you have to do a trademark search, of course. Well, we got to the point that we were ready to launch, and only the name was holding us up. We had none, officially. We had been calling it “Oak” within the company, but when they did a search, about 50 or 60 uses of that name came up, so that was out the window.
Then, we didn’t know what to call it, so we did what a lot of companies do?we brought in a meeting facilitator. He spent like six hours with us, asking us questions, like, “Well, what name feels good to you?” He wrote a lot on a big whiteboard?we gave him goofy words, made-up words. At the end of the day, we had a list of about 20 names, ranked in the order we liked them. We handed the list off to the lawyers and said, “Just start at the top and go down the list, and the first one that comes clean, that’ll be it.
The No. 1 name on the list, which everybody else seemed to like except me, was Silk. It made me think of spiders. Actually, I liked name No. 3 the best: “Lyric.” But during the search, we found that some military defense operation in the UK was using something called Lyric in an app, so that was off limits.
Our first three names didn’t pass. But Java, which was No. 4, came back clean. By that time, everybody was sick of the whole process. I don’t think anybody at that time was particularly excited about the name. You could have called it “Mud” and we would have gone for it!