[PRL] Strategy Letter VI

Matthias Felleisen matthias at ccs.neu.edu
Wed Sep 19 10:18:34 EDT 2007


I love the comment on parentheses and the editor you need to buy to  
count them :-]

On Sep 18, 2007, at 11:27 PM, Mitch wrote:

> Verrry Interesting....
>
>
>
> Sent to you by Mitch via Google Reader:
>
>
> Strategy Letter VI
> via Joel on Software by Joel Spolsky on 9/18/07
>
>
> IBM just released an open-source office suite called IBM Lotus  
> Symphony. Sounds like Yet Another StarOffice distribution. But I  
> suspect they're probably trying to wipe out the memory of the  
> original Lotus Symphony, which had been hyped as the Second Coming  
> and which fell totally flat. It was the software equivalent of Gigli.
>
> In the late 80s, Lotus was trying very hard to figure out what to  
> do next with their flagship spreadsheet and graphics product, Lotus  
> 1-2-3. There two obvious ideas: first, they could add more  
> features. Word processing, say. This product was called Symphony.  
> Another idea which seemed obvious was to make a 3-D spreadsheet.  
> That became 1-2-3 version 3.0.
>
> Both ideas ran head-first into a serious problem: the old DOS 640K  
> memory limitation. IBM was starting to ship a few computers with  
> 80286 chips, which could address more memory, but Lotus didn't  
> think there was a big enough market for software that needed a  
> $10,000 computer to run. So they squeezed and squeezed. They spent  
> 18 months cramming 1-2-3 for DOS into 640K, and eventually, after a  
> lot of wasted time, had to give up the 3D feature to get it to fit.  
> In the case of Symphony, they just chopped features left and right.
>
> Neither strategy was right. By the time 123 3.0 was shipping,  
> everybody had 80386s with 2M or 4M of RAM. And Symphony had an  
> inadequate spreadsheet, an inadequate word processor, and some  
> other inadequate bits.
>
> "That's nice, old man," you say. "Who gives a fart about some old  
> character mode software?"
>
> Humor me for a minute, because history is repeating itself, in  
> three different ways, and the smart strategy is to bet on the same  
> results.
>
> Limited-memory, limited-CPU environments
> From the beginning of time until about, say, 1989, programmers were  
> extremely concerned with efficiency. There just wasn't that much  
> memory and there just weren't that many CPU cycles.
>
> In the late 90s a couple of companies, including Microsoft and  
> Apple, noticed (just a little bit sooner than anyone else) that  
> Moore's Law meant that they shouldn't think too hard about  
> performance and memory usage... just build cool stuff, and wait for  
> the hardware to catch up. Microsoft first shipped Excel for Windows  
> when 80386s were too expensive to buy, but they were patient.  
> Within a couple of years, the 80386SX came out, and anybody who  
> could afford a $1500 clone could run Excel.
>
> As a programmer, thanks to plummeting memory prices, and CPU speeds  
> doubling every year, you had a choice. You could six months  
> rewriting your inner loops in Assembler, or take six months off to  
> play drums in a rock and roll band, and in either case, your  
> program would run faster. Assembler programmers don't have groupies.
>
> So, we don't care about performance or optimization much anymore.
>
> Except in one place: JavaScript running on browsers in AJAX  
> applications. And since that's the direction almost all software  
> development is moving, that's a big deal.
>
> A lot of today's AJAX applications have a meg or more of client  
> side code. This time, it's not the RAM or CPU cycles that are  
> scarce: it's the download bandwidth and the compile time. Either  
> way, you really have to squeeze to get complex AJAX apps to perform  
> well.
>
> History, though, is repeating itself. Bandwidth is getting cheaper.  
> People are figuring out how to precompile JavaScript.
>
> The developers who put a lot of effort into optimizing things and  
> making them tight and fast will wake up to discover that effort  
> was, more or less, wasted, or, at the very least, you could say  
> that it "conferred no long term competitive advantage," if you're  
> the kind of person who talks like an economist.
>
> The developers who ignored performance and blasted ahead adding  
> cool features to their applications will, in the long run, have  
> better applications.
>
> A portable programming language
> The C programming language was invented with the explicit goal of  
> making it easy to port applications from one instruction set to  
> another. And it did a fine job, but wasn't really 100% portable, so  
> we got Java, which was even more portable than C. Mmmhmm.
>
> Right now the big hole in the portability story is -- tada! --  
> client-side JavaScript, and especially the DOM in web browsers.  
> Writing applications that work in all different browsers is a  
> friggin' nightmare. There is simply no alternative but to test  
> exhaustively on Firefox, IE6, IE7, Safari, and Opera, and guess  
> what? I don't have time to test on Opera. Sucks to be Opera.  
> Startup web browsers don't stand a chance.
>
> What's going to happen? Well, you can try begging Microsoft and  
> Firefox to be more compatible. Good luck with that. You can follow  
> the p-code/Java model and build a little sandbox on top of the  
> underlying system. But sandboxes are penalty boxes; they're slow  
> and they suck, which is why Java Applets are dead, dead, dead. To  
> build a sandbox you pretty much doom yourself to running at 1/10th  
> the speed of the underlying platform, and you doom yourself to  
> never supporting any of the cool features that show up on one of  
> the platforms but not the others. (I'm still waiting for someone  
> show me a Java applet for phones that can access any the phone's  
> features, like the camera, the contacts list, the SMS messages, or  
> the GPS receiver.)
>
> Sandboxes didn't work then and they're not working now.
>
> What's going to happen? The winners are going to do what worked at  
> Bell Labs in 1978: build a programming language, like C, that's  
> portable and efficient. It should compile down to "native" code  
> (native code being JavaScript and DOMs) with different backends for  
> different target platforms, where the compile writers obsess about  
> performance so you don't have to. It'll have all the same  
> performance as native JavaScript with full access to the DOM in a  
> consistent fashion, and it'll compile down to IE native and Firefox  
> native portably and automatically. And, yes, it'll go into your CSS  
> and muck around with it in some frightening but provably-correct  
> way so you never have to think about CSS incompatibilities ever  
> again. Ever. Oh joyous day that will be.
>
> High interactivity and UI standards
> The IBM 360 mainframe computer system used a user interface called  
> CICS, which you can still see at the airport if you lean over the  
> checkin counter. There's an 80 character by 24 character green  
> screen, character mode only, of course. The mainframe sends down a  
> form to the "client" (the client being a 3270 smart terminal). The  
> terminal is smart; it knows how to present the form to you and let  
> you input data into the form without talking to the mainframe at  
> all. This was one reason mainframes were so much more powerful than  
> Unix: the CPU didn't have to handle your line editing; it was  
> offloaded to a smart terminal. (If you couldn't afford smart  
> terminals for everyone, you bought a System/1 minicomputer to sit  
> between the dumb terminals and the mainframe and handle the form  
> editing for you).
>
> Anyhoo, after you filled out your form, you pressed SEND, and all  
> your answers were sent back to the server to process. Then it sent  
> you another form. And on and on.
>
> Awful. How do you make a word processor in that kind of  
> environment? (You really can't. There never was a decent word  
> processor for mainframes).
>
> That was the first stage. It corresponds precisely to the HTML  
> phase of the Internet. HTML is CICS with fonts.
>
> In the second stage, everybody bought PCs for their desks, and  
> suddenly, programmers could poke text anywhere on the screen wily- 
> nily, anywhere they wanted, any time they wanted, and you could  
> actually read every keystroke from the users as they typed, so you  
> could make a nice fast application that didn't have to wait for you  
> to hit SEND before the CPU could get involved. So, for example, you  
> could make a word processor that automatically wrapped, moving a  
> word down to the next line when the current line filled up. Right  
> away. Oh my god. You can do that?
>
> The trouble with the second stage was that there were no clear UI  
> standards... the programmers almost had too much flexibility, so  
> everybody did things in different ways, which made it hard, if you  
> knew how to use program X, to also use program Y. WordPerfect and  
> Lotus 1-2-3 had completely different menu systems, keyboard  
> interfaces, and command structures. And copying data between them  
> was out of the question.
>
> And that's exactly where we are with Ajax development today. Sure,  
> yeah, the usability is much better than the first generation DOS  
> apps, because we've learned some things since then. But Ajax apps  
> can be inconsistent, and have a lot of trouble working together --  
> you can't really cut and paste objects from one Ajax app to  
> another, for example, so I'm not sure how you get a picture from  
> Gmail to Flickr. Come on guys, Cut and Paste was invented 25 years  
> ago.
>
> The third phase with PCs was Macintosh and Windows. A standard,  
> consistent user interface with features like multiple windows and  
> the Clipboard designed so that applications could work together.  
> The increased usability and power we got out of the new GUIs made  
> personal computing explode.
>
> So if history repeats itself, we can expect some standardization of  
> Ajax user interfaces to happen in the same way we got Microsoft  
> Windows. Somebody is going to write a compelling SDK that you can  
> use to make powerful Ajax applications with common user interface  
> elements that work together. And whichever SDK wins the most  
> developer mindshare will have the same kind of competitive  
> stronghold as Microsoft had with their Windows API.
>
> If you're a web app developer, and you don't want to support the  
> SDK everybody else is supporting, you'll increasingly find that  
> people won't use your web app, because it doesn't, you know, cut  
> and paste and support address book synchronization and whatever  
> weird new interop features we'll want in 2010.
>
> Imagine, for example, that you're Google with GMail, and you're  
> feeling rather smug. But then somebody you've never heard of, some  
> bratty Y Combinator startup, maybe, is gaining ridiculous traction  
> selling NewSDK, which combines a great portable programming  
> language that compiles to JavaScript, and even better, a huge Ajaxy  
> library that includes all kinds of clever interop features. Not  
> just cut 'n' paste: cool mashup features like synchronization and  
> single-point identity management (so you don't have to tell  
> Facebook and Twitter what you're doing, you can just enter it in  
> one place). And you laugh at them, for their NewSDK is a honking  
> 232 megabytes ... 232 megabytes! ... of JavaScript, and it takes 76  
> seconds to load a page. And your app, GMail, doesn't lose any  
> customers.
>
> But then, while you're sitting on your googlechair in the  
> googleplex sipping googleccinos and feeling smuggy smug smug smug,  
> new versions of the browsers come out that support cached, compiled  
> JavaScript. And suddenly NewSDK is really fast. And Paul Graham  
> gives them another 6000 boxes of instant noodles to eat, so they  
> stay in business another three years perfecting things.
>
> And your programmers are like, jeez louise, GMail is huge, we can't  
> port GMail to this stupid NewSDK. We'd have to change every line of  
> code. Heck it'd be a complete rewrite; the whole programming model  
> is upside down and recursive and the portable programming language  
> has more parentheses than even Google can buy. The last line of  
> almost every function consists of a string of 3,296 right  
> parentheses. You have to buy a special editor to count them.
>
> And the NewSDK people ship a pretty decent word processor and a  
> pretty decent email app and a killer Facebook/Twitter event  
> publisher that synchronizes with everything, so people start using it.
>
> And while you're not paying attention, everybody starts writing  
> NewSDK apps, and they're really good, and suddenly businesses ONLY  
> want NewSDK apps, and all those old-school Plain Ajax apps look  
> pathetic and won't cut and paste and mash and sync and play drums  
> nicely with one another. And Gmail becomes a legacy. The  
> WordPerfect of Email. And you'll tell your children how excited you  
> were to get 2GB to store email, and they'll laugh at you. Their  
> nail polish has more than 2GB.
>
> Crazy story? Substitute "Google Gmail" with "Lotus 1-2-3". The  
> NewSDK will be the second coming of Microsoft Windows; this is  
> exactly how Lotus lost control of the spreadsheet market. And it's  
> going to happen again on the web because all the same dynamics and  
> forces are in place. The only thing we don't know yet are the  
> particulars, but it'll happen.
>
> Not loving your job? Visit the Joel on Software Job Board: Great  
> software jobs, great people.
>
>
>
>
> Things you can do from here:
> Visit the original item
> on Joel on Software
> Subscribe to Joel on Software using Google Reader
> Get started using Google Reader to easily keep up with all your  
> favorite sites
>
>
> _______________________________________________
> PRL mailing list
> PRL at lists.ccs.neu.edu
> https://lists.ccs.neu.edu/bin/listinfo/prl




More information about the PRL mailing list