Thursday, 22 February 2007

Jim Gray

I can't believe that I missed the news that Jim Gray had been reported as lost-at-sea.  This is just terrible.  Jim Gray is one of the greatest minds around.  Whenever I've heard Jim speak, or read one of his papers, I've been struck by the depth of his insight and the power of his quiet, engaging style.

The last time I saw and heard him in person was at PDC2003.   He talked about high-performance computing (and distributed copies of this paper), discussed the building of very large servers (e.g. for the SkyServer project), and said something which stuck in my mind ever since.  He was talking about the problems of processing very large volumes of scientific data and building petabyte-scale computing facilities (later expressed in this paper).  He said (this is not a verbatim quote), "We've got to start thinking in terms of moving the program to the data, instead of the other way round, which is what we've been doing for years".

This is a profound idea, which is workable now that we have almost ubiquitous networking, grid-computing, and fast, cheap hardware (CPU and storage).  Network bandwidth, though improving all the time, is not increasing fast enough to keep track with the increase in data we need to analyse.

Maybe Jim is still out there on the Farallon Islands, getting away from it all.  I just wish he'd let us  know he's OK.

Tuesday, 13 February 2007

Java Futures

Have just come across two useful posts on the future of Java.  Bruce Eckel's piece is mainly focussed on web applications.  I agree wholeheartedly with his opinion that the web is "a mess", and that the technologies which have sprung up to help make the mess manageable (such as Google's Web Toolkit) are merely a convenient veneer to hide the ugliness and limitations of the underlying platform (i.e. JavaScript, HTML and the browser), which are always revealed in the end. The failure of Java applets, and in fact in any of the 'active content' technologies to solve the Rich Internet Application (RIA) problem, reflects the difficulties in solving distribution, installation and security issues.

I also enjoyed his comments about how Java was 'rushed out' to fill the gap, then subject to extensive refactoring.  The analogy with agile methods is just about admissible, especially in connection with AWT and Applets, but Eckel also notes the vitality of the Java world, and the strong, positive effect of competition on the Java / C# landscape.

Much of the rest of his post is an enthusiastic account of how Flash effectively solves the RIA problem, albeit in a vendor-dependent way. We may not like de facto standards emerging from a single commercial source, but when the technology is good enough we will find ways to compromise our principles.

The other piece is an IBM DeveloperWorks article by Elliotte Harold.  This is much more about the Java platform itself, and what we can expect to see happening to it in 2007.  With the decision to open-source the JDK, Sun has created the possibility of forks in the Java roadmap, allowing experimenters to introduce language or platform features.  This is a mixed blessing: the Java world is already a complicated place to be, and this will make it even more so.  On the other hand, this will allow a lot of talented people outside Sun to work on things like language primitives for structured data types, such as tables (for SQL integration) and trees (infosets and XML). There is a perception that Java lags behind C# in this respect (e.g. LINQ in C#).

Open-sourcing Java is good news, up to a point, but I just wish Sun would work harder to pull together the language, platform and libraries story into a more consistent whole.  There are simply too many ways to do something: for example, how many web-service frameworks are there?  I can think of three or four without trying too hard.  All different.  (Axis 1 and 2, XFire, JAX-WS, XINS, ...)

There's no doubt that C# and .NET is a simpler, cleaner and more consistent place to be than the Java world (especially the 'enterprise' Java world), but then it damn well ought to be, because it only has to live on top of one OS, and isn't subject to any sort of community process to decide its future: only Redmond (and some Microsoft Research sites around the world, notably here in Cambridge) determine the trajectory of .NET and the C# language. (Don't buy the line that the whole shebang has been ported to lots of other platforms: take a look at any of them and show me where the enterprise features are.  Yes, you can compile and run a C# program on Linux, but can you deploy and run a server-side C# component which depends on Enterprise Services, e.g. distributed transactions?  No, you can't ).

Arguably, C# and .NET owe their very existence to Sun's Java initiative.  This remains a largely unacknowledged technical debt, often ignored by Microsoft's supporters. For many of the features we take for granted, Java got there first.  It really is a cross-platform proposition including on the server, albeit with some residual, ugly cruftiness which is being weeded out gradually.

Personally, I really like C# and the .NET platform, due to the internal consistency of the runtime and C#'s cleaner syntax. However,I really want to see Java develop and evolve, partly because I like it, but largely because we benefit in all the obvious ways from a competitive environment: if one or other platform put the other out of business, innovation and improvement would be subordinated to establishing and consolidating a monopoly position.