Sponsored Link •
Bill Venners: So, maybe the art of programming just makes things easier for people.
James Gosling: Absolutely. It's like what's happened to cars over the last 40 or 50 years. In the past, you could open a car's hood and understand what went on inside. Now, you open a car's hood, and it's completely hopeless.
Bill Venners: That's because it has so much software in it. You can't tinker with software with a wrench.
James Gosling: Some of it's software. There's a lot of little tubes that go from here to there, that do things like manage the engine efficiency, manage the air quality, manage things people didn't worry about before. Plus, today's cars work for people who just want to get in, turn it on, and go. As opposed to saying, "Well, gee, it's about 40 degrees out, so I need to preheat the engine, and the choke needs to be here, and if you pump on it like that, and it's a little humid, so you don't want to get too much gas in there."
Most people aren't concerned about what goes on under the hood. They want to go wherever they're going. Likewise, their business is their business; it's not fussing with the guts of software.
Bill Venners: You've said Java was intended for distributed, reliable, interacting-with-people software. I understand Java's architecture helps us build reliable, distributed software, but how does it help us build software that interacts with people?
James Gosling: Much of it ends up in the APIs, but you see most of it in the low-level language. Many of the other things you mentioned affect ease of use. For example, software that frequently breaks is harder to use. Software where you worry about what kind of CPU you're loading the software into is harder to use. The fact that your local software store has a Macintosh aisle and a PC aisle indicates a flaw in the whole market's structure. In Japan, a dozen manufacturers or so make Java phones, each with a different CPU and operating system. Yet they all interoperate. So, if you want a Tetris game, you just get a Tetris game. That's deeply an ease-of-use issue for people.
Bill Venners: You once said that building very flexible and very programmable systems had been a theme in your life. When I'm building a system, issues frequently arise among the team members concerning flexibility. Something may add flexibility, but it also adds complexity. How do you decide how flexible to make a particular piece of software?
James Gosling: It's the art of computer programming. So, there might be a certain complexity in adding to a piece of software, but if you don't add it, for the people who are using it, it introduces complexity because they must do things in a stilted way. It's an end-to-end energy sum thing, where you must examine how much energy to put into adding complexity to a program versus how much complexity it removes from people's lives. You're balancing complexity here, complexity there.
Bill Venners: Somebody once asked what you like about developing software. You said you most like fighting with complexity. So, what do you like about complexity?
James Gosling: Beats me. If you buy a watch, it's just a watch; it's got hands. But several companies recently introduced watches with clear cases, so you can see the little gears. I don't know why, but I look at those and say, "Ooh, isn't that cool?" The first time I saw one, I had to buy it. When I build the mental model of a piece of software, then somehow get the complex pieces to fit together, and it all meshes, and there's a smooth rhythm to it -- there's a pleasant feeling about that. Whereas yesterday, I was installing a new pair of speakers at home and had to confront the maze of wires at the back of my stereo system. That's the kind of complexity that just drives me nuts.
The Art of Computer Programming, by Donald Knuth is available at Amazon.com at: