We’ve had 10 good years together, but it just isn’t working anymore. It’s not you, it’s me. Well, actually, it is you. I’ve found someone smarter, younger, and prettier. Yes, your little sister C#. There isn’t a nice way to put this: you need a major face job.
It went wrong at the very beginning with AWT, and then kept getting worse with Swing. You just don’t get it. The purpose of a user interface framework is to help developers build a satisfying user experience. It seems it was more important for you to have an elegant API, be pristinely platform neutral, and to spite Microsoft. So what if it’s dead slow and butt ugly? So what if it didn’t cut it for Eclipse? Maybe you gave up caring when applets failed, and the party moved to the server. Well, now you are the queen of the server and the big IT shops. I hope you enjoy fluffing CIO’s.
The world turns. Take a look at this. Don’t bother with the Flash demo if you are on Windows – try it out. While Swing was busy catching up to mid-90’s UI’s, Macromedia and Microsoft were working on the future with Flash and WPF.
User experience is what matters now. Or so say a bunch of wannabe internet moguls. It just so happens that is also what matters now for Subtext. I need smoothly animated transformations, subtle reactive cues, sound, and gesture; I need every trick in the book to induce the illusion of an alternate reality where programs are real. I am getting a black beret.
WPF has won me over. It is over-engineered, but powerful and comprehensive. Geometry and animation are entirely declarative. I’ll never have to damage a region again. Distance is measured in inches, not pixels. Time is measured in seconds, not frames. I am very impressed with how progressive C# is compared to Java. It has operator overloading, properties, open classes, lambda expressions, (local) type inference, and first class queries. Microsoft is doing some really good work here. I’ll miss Eclipse, but Visual Studio is workable.
It would be trendier to move to Flash. I have debated this choice a bit. Flash and ActionScript are lighter weight than the Microsoft stack, and portable. They have come a long way from being animation toys; almost, but not quite far enough. Flash’s limitations as a browser plugin are not entirely remedied by Apollo (e.g. incomplete keyboard and mouse access). ActionScript is almost a modern programming language, but lacks things like proper collection classes, dynamic loading, threads, and has a minimal class library. By my rough measurement, C# is still about 10 times faster than ActionScript. ActionScript can’t call C. Flex Builder doesn’t have refactoring, and compiles slowly. ActionScript is just too risky.
Microsoft’s recent announcement of Silverlight means that a subset of WPF and .NET will run on the Mac. They also announced full support for Python and Ruby in .NET, plus general support for dynamic languages that might help implement Subtext. Mono is working on bringing it all to Linux. Anyway portability is not important to me right now – all I care about is building the most compelling UI possible with the least amount of programming.
Goodbye, Java.
[P.S. Java may be getting that facelift after all. I need to check it out.]
I think maybe you should wait a couple of days before making any final decisions…
[Thanks for the tip, you were right. – Jonathan]
As long as you are making your interface look good, make your code look equally beautiful. WPF and even Silverlight support Python, even on the browser. Its going to open up lots of new doors to wonderfully maintainable code. And just think, that means you get the great UX and an elegant API together. Take that, Java.