...and now that you have the history behind it, let me try to put in words
my basic point of view on computers.
Let me begin by saying that, as of today (and this has been true for many
years), all systems I know about, suck beyond tolerance. And yes, I have used
OSX. It sucks too. (By "system", an intentionally vague term, I mean OSes,
and GUI environments, the general UI/API paradigms, and so on.) And they are
"improving" in the wrong direction - which means, in 5 years, they will
probably suck more, but be more shiny about it.
The premise I'll work with is: there is very little limit to what a computer
can do. It is essentially, as I realized when I was about 9, a programmable
device; the whole point of its existence is to be customized, to do what you
want the way you want.
Modern software is more in the business of telling you what you want.
It might be a "monopoly of magic" problem. Programming is potentially easy, at
least for small tasks. But if everyone could program, how would "true"
programmers make a living? So the big companies, who very much prefer to stay
in business, want you to believe that it's a very arcane art, a burden they are
taking away from you - and you should pay them for that. That is, IMO, one of
the main reasons they are so afraid of Free Software and open source; we take
the stance that, instead, programming is accessible to anyone, and that it's
best done in groups (community), and worse, that it's fun. That even the small
tasks you can learn to do with a few days of study, can be an useful
contribution.
Or it might just be laziness.
To me, a computer which is not programmable, or not conveniently programmable,
is at least 50% useless. That's why I eventually abandoned my PalmPilot to buy
a VR3 on which I could run Python. Incidentally, that's also how, years
earlier, I learned about Free Software, GNU, and Linux... after I was forced to
abandon OS/2, I went on the net (which was a new thing for me) in search of a
good C++ compiler for Windows, and stumbled on djgcc - which had a great page
explaining what is Free Software, and a link to GNU. I was hooked.
But most people are content with what is dumped on them by the vendors; most
don't even change the windows color schemes.
I guess what I mean is: I want more developers and less end-users. I want to
turn all end-users into small-time developers. My dream system is an
infinitely customized thing, where "upgrade" implies some revision-control-like
operation of figuring out how the new features fit in with your
customizations. Where sharing these customizations is routine, and the system
itself gives you tools to do that.
(Yes, I know about Squeak. It's an awesome prototype of these concepts. It
also suffers from many other problems that make it unusable as an actual
system, most of which are off-topic for this article, but most important of
all, being locked into a single programming language.)
The only desktop development that made me really excited recently was the OSX
Dashboard (or gDesklets). Not that it's incredibly more accessible than
writing an app with applescript or pygtk or even pyobjc; just that it
encourages more people to try. But seriously, anyone in the audience whose
mother masters enough html and javascript to write an actually useful dashboard
thingie (or enough python for a gDesklet one) please raise their hands.
Even in the world of Free Software, we're still bound in "their" thinking, the
"ball and chain" way, which makes our systems suck as much as "theirs" (in some
aspects, less, in others, more, average 0).
We design our apps to be end-user friendly because, well, we want new users.
But few, usually young, projects care about newbie developers (bzr comes to
mind). We should do both; aim for a clear model that you can actually explain
to someone who is doing high school, for well-tested code (so that people who
are learning to program can see exactly what breaks the app), for code that an
unexperienced programmer (or someone trying to became one) can actually read
and understand, for a programmable interface (be it plugin system, client
library, scripting system, whatever) that end-users don't need to be afraid of
and that will encourage them to actually learn basic programming. For
encouraging communities, where newbies know where to post patches and
extensions, where those submissions are actually reviewed, often resulting in
hints that help the new programmer improve. (Sometimes even, heh, in actually
accepting the patch. The quality of submissions should generally improve with
the amount of help available and the clarity of the system, until at some
point, total newcomers can actually write usable stuff.)
Eventually, when enough people engage in this "meta-refactoring" principle of
clear models and understandable systems, when enough users no longer perceive
the tools they use as black boxes, I believe we will naturally suffer a few
paradigm shifts in the systems as a whole (now I go back to using "system" in
the sense I used on the top of the post), which can gradually help them get rid
of the suckiness. My pet peeve is getting rid of the concepts of "application"
and "process", which are rooted in Multics/Unix ideas from 30 years ago; but
another good point, raised by Tom a few days ago, is that we need to outgrow
the boundaries between "computers", and the notion that there are a few minimal
components a "computer" must have. (The latter is pretty much dead already.
You can run Linux (yes, mr. Stallman, I'm referring to the kernel here) on
anything that has a cpu and memory.)
It may turn out that we need new languages, too...