“Hitting the 80/20 point is a very central concept” – Tim Bray
A recent InfoQ interview of Tim Bray by Obie Fernandez — entitled Tim Bray on Rails, REST, XML, Java, and More — is wide-ranging, cogent and thought-provoking. The subjects range from (naturally) XML and Java to Ruby, Rails, the semantic Web, agile programming, dynamic languages and typing, web services (WS*), you name it.
I most appreciate the down-to-earth sense of it all. The 30-min video and its transcript are well worth listening to and studying in its own right, but let me illustrate the quality of the interview by Tim’s answer to one question regarding Web services:
“So here’s the problem: we have a radically heterogeneous computer environment. There are different operating systems, different languages, different databases, different computer architectures and that’s not going to go away. The IT profession has struggled for decades, literally decades, on how to build applications to work across this heterogeneous network and accomplish useful things, and by and large have done a pretty bad job. Corba was sort of a sad story. Microsoft DCOM was understood by only 8 people in the world, and then all of a sudden about 10-12 years ago there was this application that worked across heterogeneous networks, had high performance, had extremely broad scaling, ignored networking issues apparently and worked great; that was the World Wide Web.
The world, not being stupid, said maybe there’s something we can learn from that. The thing about the web is that if you look at it, it has no object models and it has no APIs. It’s just protocols all the way down. Some of the protocols are loose and sloppy like HTML, and some of them are extremely rigorous like TCP/IP. But if you look at the stack there’s no APIs, there’s protocols all the way down. I think that the thing that you take away from that, is that that is the way to build heterogeneous network locations. A few other things that we learned from the web is that simple message exchange patterns are better; I mean HTTP has one message exchange pattern; I send you a message, you send me a message and the conversation is over. And it turns out to have incredibly good characteristics and so on.
Now, the other thing that came along around the same time was XML, and it provided a convenient lingua franca to put in the messages you’re going to send back and forth. The basic take-away is “Let’s adopt the architectural pattern of the web by specifying interfaces in terms of message exchange patterns, let’s make those message exchange patterns simple, let’s try and make statelessness possible and easy because that’s on the truth path to scaling. I think that idea has legs, it’s really the only way forward.
The fact is that 10 years from now there’s still going to be Rails apps here and Java apps there and they’re going to have to talk to each other. The only way to do that is by sending messages back and forth.
Somebody said to standardize that. And that led us down this insane trail and the destruction of WS*. If you look at WS* there are these huge universal schemas compressing thousands of pages of specifications, mostly cooked up in back rooms at IBM and Microsoft. Many of them are still unstable years into the project, and they are based on XML schema and WSDL, which are two of the ugliest, most broken and irritating specifications in the history of the universe. I just totally don’t believe you can build a generic world changing infrastructure for the whole software development ecosystem based on broken specifications at the bottom level. So those guys have gone off the rails!”
The death star WS* image, by the way, came from David Heinemeier Hansson of Rails fame and was used at the same Canadian Rails conference at whch both spoke.