Can Platforms be Agile?

Java is an excellent example of how you start out with a design that is rather “impure”, and has to be, in order to survive the initial competetive struggle; and then later, when there would be enough resources to realize some of the Real Cool ideas, you realize you can’t because you’re stuck with what and how you started.

One such example is the handling of primitive types. Auto-boxing is just a hack, trying to introduce “Everything Is An Object” through the back door. But the special cases introduced in the beginning stay in place.

A more recent example is the closures for Java / CICE discussion, where everyone agrees it’s going to be an addition to the Java language; no way you could replace some old feature made redundant by the new stuff. You cannot even extend the existing interfaces, because that would break implementations of those interfaces that exist out there in the wild.

There are fundamental decisions that cannot be changed easily once people have started building upon them. Operating Systems, Programming Languages, Platform APIs, Off-The-Shelf Software, they all have more than just a little legacy compatibility problem. The current anti-intellectual “agile” trend is good enough for applying those flexible, mature and well-thought-out processes and tools, but trying to develop and maintain a programming language in such a light-footed way means asking for desaster (or at least, bad quality).

A platform won’t stay competetive for long if you bolt on new things where they get in your way. If Saint-Exupéry is right, you need to remove things to increase consistency, making the language and platform more understandable and more usable.
The way to save your investment is to modularize, parallelize, interoperate, and deprecate. You can’t take things away from the Java platform, but you can provide increasingly consistent alternatives for parts of it (“nio”), interoperate with the old stuff for the time being, and hope for the old stuff to fade away. Note that this is not an agile approach – it does not involve a closed world assumption, it aims to keep long-term promises, and it ties significant resources (for maintaining several alternatives plus interoperability between them). Agile projects do not have a history; platforms do.

Most parts of Java will be with us for years to come. So please, don’t spoil the Java language and syntax with a mix of redundant, overlapping, complex features; don’t add something you may want to remove later. If it’s not proven yet, it doesn’t have to be part of the platform; just provide the hooks for others to provide it and experiment with it. I’d rather have a mix of language environments that Play Well With Others, with a JVM that acts as a “Common Language Runtime”, than a monolithic superplatform that assimilates every feature under the sun.

Weird Languages

“And so the median language, meaning whatever language the median programmer uses, moves as slow as an iceberg. […] Obviously, the median language has enormous momentum. I’m not proposing that you can fight this powerful force. What I’m proposing is exactly the opposite: that, like a practitioner of Aikido, you can use it against your opponents.”

“[…] when our hypothetical Blub programmer looks in the other direction, up the power continuum, he doesn’t realize he’s looking up. What he sees are merely weird languages.”

Paul Graham (April 2001, but current as ever)

Share

It’s always more fun
To share with everyone
If you’ve got two drumsticks
Give one to your friend
Make one beautiful rhythm
Share a beat that never ends

Jack Johnson: The Sharing Song

Riot Police Course

I sat with Ben and Will on the train and Ben returned to a constant theme: how the whole course was just brainwashing.
‘But you knew that at the beginning,’ I countered.
‘I know, but it’s different from how I imagined.’
‘How?’
‘It’s working. I didn’t think it would work, but it’s working. I think I’m becoming a violent bastard.’
‘Don’t worry,’ said Will, ‘you’re still a wimp.’

Robert Twigger, Angry White Pyjamas.

float und width

Ich hänge ganz gern Icons oder kleine Bilderchen in den Text, die in Safari auch hübsch umflossen werden. Firefox aber weigert sich, den “float” style zu interpretieren, und zeigt einfach gar nichts an, wenn das jeweilige Element nicht auch eine explizit angegebene Breite (“width”) hat. Das korrekte HTML-Monster sieht so aus:

<a href=”bildgross.jpg” style=”float: left; padding-right: 10px; width:72px”><img id=”image5″ src=”bildklein.jpg” width=”72″ alt=”Ein Bild” /></a>

Die Nackten und die Toten

Wenn ein Soldat sein Glied von einem Totenschädel küssen lässt, “(Bild berichtete)”, dann hat das für mich eher etwas mit Ohnmacht zu tun als mit Abu Ghraib. Wer täglich mit dem Tod konfrontiert ist, versucht irgendwie die Oberhand zu behalten, und sei es auch nur symbolisch. Dass uns das vom sicheren heimischen Sofa aus irrational erscheint ist kein Wunder. Einen Zusammenbruch der Zivilisation kann ich da aber noch nicht erkennen.
Die politischen und öffentlichen Reaktionen versuchen dem Abu Ghraid-Schema zu folgen (endlich haben wir auch einen Skandal!), Politiker sind vorauseilend entsetzt, und die Bild-Zeitung hat der Bundeswehr die Präsentation ihres Weißbuch erfolgreich vermasselt.
Wer das Spiel mit einem gefundenen Totenschädel aber gleichsetzt mit Folter und mit Angriffen auf Zivilisten, der verharmlost.

Oder wie es ZEIT online schreibt: “Bilder sagen zwar mehr als tausend Worte, aber manchmal sprechen sie nicht wirklich, sondern sie plappern.”

you do your best

“When you are the groundskeeper, you do your best to keep the grounds, clearly.
But you can make mistakes.
The hours are long / and you are tired / or have not eaten as much as perhaps you ought / and you can make mistakes”

Paul Hornschemeier: “Mother, Come Home”

eine ganz fantastische graphic novel über den Verlust, und wie man um seine Realität ringt.