I remember reading
Michael Lewis's
"Liar's Poker"
back in the day, and enjoying it, so it's not a big surprise that I also enjoyed
reading
his recent article on our financial crisis,
"The End".
But my reaction to the article is a little different than
Tim Bray's
"Angry" blog post.
Anger is an understandable reaction; we've essentially been fleeced. But when you get fleeced,
you have to realize that often you walked right into the scam. One of the people to be
angry at, is yourself.
How did this happen?
One word: brainwashing. We all wanted to believe there really was a lot of
money to be made, that level of wealth building going on was somehow
sustainable, and that we could all be a part of it.
But honestly, did you really believe your realtor when they told you the
property prices in the neighborhood you bought into were appreciating 10% a
year, with no end in sight? Does it really seem ok to spend $30,000 on
an automobile? Can you really look at the historical record of the Dow Jones
Industrial Average from the 1930's to today, and say: "I don't see anything abnormal".
We all wanted to believe, so ignored the signs, if we saw them at all.
Were there some bad apples out there? Sure. But far more folks
who weren't really bad apples, really just duped like we were. Deluded
by fantasies of riches. Brainwashed.
Relating this to computer tech
I couldn't help but to extrapolate from my take on Lewis's article,
to some of the
goings on in the computer tech field today, because I think there's a fair
amount of brainwashing going on in tech also. What do you think about the
following ideas:
To me, these sound crazy. Why would you
use a word processing system as the basis for a data serialization format?
Nuts, right? But we are. XML traces it's roots back to
IBM's Generalized Markup Language,
a text markup language not like LaTeX or nroff
(good times, good times). XML is frankly not all that different from GML, I'd say
easier on the eyes (brackets are easier to visually parse than colons), and more regularized
syntax. But it's fundamentally a language to apply bits of text formatting
to large amounts of raw text. A typical BookMaster document was mainly plain
old text, with occasional tags to mark paragraph boundaries, etc.
Same sort of nutso thinking with Java. A potentially decent systems-level programming language,
it could have been a successor to C and C++ had things worked out a bit
differently. But as an application programming language? Sure, some people
can do it. But there's a level of complexity there, over and above
application programming languages we've used in the past - COBOL and
BASIC, for instance - that really renders it unsuitable for a large potential segment
of the programmer market.
How did these modern-day accidents occur? Hype. Being in the right place at the
right time. They more or less worked for simple cases. We all wanted to
believe. We brainwashed ourselves.
Luckily, evolution is taking it's toll on these two languages. XML isn't
the only game in town now for structured data; JSON and YAML are often used where it makes sense;
Roy Fielding notes that
perhaps GIF images are an interesting way to
represent sparse bit arrays (ok, that's a random mutation in evolutionary terms). We're seeing an upswing in
alternative languages where Java used to be king: Ruby, Python, Groovy, etc
(with many of these languages having implementations in Java - perfect!).
Reality is setting in; do what makes sense; think different; the hype curve doesn't always
point to the right answer.
My new favorite example of tech brainwashing
So while I can't complain so much about XML and Java as I used to,
it's kicking a dead horse at this point, I do have a new whipping boy in the tech
world for where we've been brainwashed - "web applications". Those
things that run in our web browser, giving us the power, beauty and
flexibility of desktop apps. Web 2.0. RIAs. GMail and Google Maps.
I don't have to explain to anyone who's ever tried putting together
a "Web 2.0 application" the utter pain in doing this. Ignoring server-side
issues, you have to deal with three different languages: HTML, CSS, and JavaScript;
typically interspersed betwixt themselves. That behave differently in the
three to five popular browsers you might hope to support. And the
iPhone. Server side programming throws more wrenches in the gears, as
in our simpler web 1.0 world, we frequently mixed HTML, CSS, and JavaScript
with whatever programming language(s) we used on the server. And
we still do, at times, in this new world also, only there's lots more
HTML, CSS and JavaScript, so it's even messier.
Or maybe you're using Flex or Silverlight or some other more constrained
environment for your web app. But then you have different problems; your users might expect
to be able to bookmark in the middle of the app - it's running on the web
after all. Or cut and paste some of the content.
Etc.
And you're probably
still deploying in a web browser anyway! There is no escape!
What really frustrates me about the situation we're in, is that we've
painted ourselves into a corner. We started with a very useful, mainly
read-only, networked hypertext viewer, and over the years bolted new
geegaws on the sides. Blink tags. Tables. JavaScript. Frames. DHTML.
File uploads. XmlHTTPRequest. SVG. HTML Canvas. (stop me, my head's about to explode!)
All great stuff to add to a mainly read-only, networked hypertext viewer.
Can you use it to build a word processor? Yes,
you can. Well, a team of software developers
at Google can. Not sure that I can.
But I used to be able to build GUI apps without a lot of difficulty.
High function, richly formatting text editors even.
In C, for gawd's sake, though life got a lot easier in Smalltalk.
It's time to stop thinking we can
apply bandages
to the status quo
and make everything better.
We want to believe. Just another gadget or framework is going to
make everything better! We've brainwashed ourselves.
Wake up!
We fundamentally have the wrong tools to do the job.
We're using a spoon where we should be using a backhoe.
Look down! You're using a spoon for *bleep*'s sake!
Don't you realize it? Slap yourself around a little and clear the
fog from your eyes. Expect better.
To be a little more concrete, I actually do think that the
fundamentals of our web tech economy are sound. I'm not unhappy with
HTTP, HTML, CSS, and JavaScript when viewed as separate technologies.
I don't think we've fit them together in the best way, to make it
easy to build applications with. And they're wrapped in a shell
optimized around mainly read-only, history-enabled, page-by-page navigation,
which doesn't seem like the best base
on which to build an application.
It's time for some new thinking here.
Can we take some of the basic building blocks we already have and build
a better application runtime platform than what we've got in front of us?
I have to believe the answer is: Yes we can.