Wednesday, December 01, 2004

Software: Like Coats of Paint

The software industry has diverged into radically different categories in the past 5-8 years. It used to be that there were very few programming languages that "mattered", and everything was written in "C". Along came Java, and changed everything.

Java is an interpreted language, which means nothing to most people, but it's a synonym for slow. Java is a convenient, addictive, easy-to-use, but ultimately lightweight programming language. It is not used at all for "desktop software". It's rarely used (any more) for "applets" which download and run through your browser. It's very heavily used for server-side software. In fact, essentially all modern web-based "services" are written in Java, or worse, in a scripting language like Perl or Python or PHP. Hmmmm. If it starts with P, maybe it actually is.

But interpreted languages require another program to interpret them, Java requires a runtime, and for server-side software usually an application server like "TomCat" or "JBoss". All this stuff runs on top of a web server, usually "Apache". So your friendly neighborhood web site like, say, Friendster, is a bunch of layers of software running on top of an app server on top of Apache on top of the core OS.

Layers of paint.

When you paint furniture, or your car, after 2 or 3 layers, you're supposed to scrape it all off, down to the bare metal, and start over. In the software industry we use that phrase "down to the metal" to mean going down to the operating system level that everything else sits on top of anyway. It's faster. Better. Simpler. But usually much more difficult. So people don't usually bother. Or they hurt themselves trying.

Programming in C on UNIX or Windows systems is like welding. By contrast, I call Java the hot glue of the internet. A couple of college kids can quickly put a compelling demo together by painting over something else, like making a stage set, and that demo can often attract funding, and then real users, and then it all bogs down and gets slow and sticky or it falls apart. If you've ever hot-glued anything together, a month later you know what I mean.

At Five Across, we started from scratch and wrote our own technology, in C, which runs lightning fast on the bare metal operating system. We think this will become a significant competitive advantage. It also means that our application software is under a megabyte in size, compared with, say, our competitor Groove, which is 50 times larger.

Some say layers and abstractions are good, but although they make things easy, they also limit what is possible because everybody's building on top of the same layers, and they constrain functionality to what the layers make possible (example: you can't do peer-to-peer conversations in a web-based piece of software. At all.)

I say scrape off all that paint and build some real software.


Alan said...

I think my File Sharing app, LimeWire, qualifies as a Java client application. The UI is not bad for a Java app but as you said, it runs slow.

Chaim Rubin said...

Here is what your post made me flash on; Steve Gibson says at

Am I sick? Perhaps. Am I a dinosaur destined for early extinction? Yeah, probably. But I truly love programming. It's what I do. It fulfills me and sustains me . . . and I'm never in a hurry to "just be done with it." I can't stand sloppiness in my work, so for me that means writing the smallest, tightest, fastest, most economical computer programs possible. And THAT means authoring Windows applications in Assembly Language...

Small Is Beautiful?

Sure, I think so. Don't you? ...frankly, I just don't consider a utility program that's 4 megabytes big, and contains all sorts of files that the author didn't create, to be "really great software". Do you?

So I needed to figure out how to write Windows Applications in Assembly Language... There's NOTHING TO INSTALL since the ZIP file contains a single executable program that just runs. The demo program contains 100 separate, customizable, amazing screen savers. ChromaZone demonstrates, far better than any words could, what one determined guy working alone can produce.

...Every scrap of code I've written and offer on this web site was written in small, tight, lean and mean assembly language.

You really can feel the difference.

Anonymous said...

>> Java is an interpreted language,

I've been saying that for years, and the Javanistas don't get it, and never will.

BTW - I revived your old site. I agree totally - xml sucks.