Wednesday, April 14,
2004
You’re remember the last installment in my continued
quest to find the next big leap in program producing productivity (the last two
were OO and managed environments), where I thought I had it all figured out with
generic algorithms. All we need is a sophisticated enough environment and
wham self-writing, self-maintaining, self-debugging algorithms baby.
However, after
this evening’s Portland Nerd Dinner (you didn’t pass up a chance to meet
Ward Cunningham, did you?), I’m thinking there’s one step in the middle (at
least : ).
So, picture the scene. After hearing about a guy
that has a “fob” on which he has to enter a password to get a 6-digit number
that changes every 60 seconds to that he could log into his company’s VPN,
declaring that that’s what happens when you let
Keith Brown run the world (I love you, man : ), and describing the CSSM (the
Chris Sells Security Model — which I can not only implement under .NET, but
actually apply to code [maybe I’ll start a workspace…]), I turned to Ward and
asked him the same question that I had asked the group from the last PND, i.e.
“What’s the next big leap away in development?”, being careful not to give him
my thinking from last time.
Ward went a whole other way.
And he got me thinking it’s a good idea.
So, Ward starts
describing how to use loose typing (as in computer science “types” and
what you do with your 101-Key Text Wizard) and TDD-style tests to infer types
for your loose typing and I’m shaking my head, ’cuz I still gotta write the
code.
Then a long-haired guy to my left who’s name I never
lernt (I meant to!), starts talking about how each leap in the past came from
handling one detail that you don’t care about, e.g. register allocation, memory
management, etc, and I think that has the possibility of helping me, ’cept the
thing I want to get rid of is the code (I mean, if I can’t make a business on
generating the stuff, then let’s kill it altogether : ).
Then
Jim Blizzard starts asking an interesting line of questions about whether a leap
is really a leap ’til we’re passed it and we can look back and decide it was a
leap. While I think a leap is a leap because you can feel it (I can still
remember the joy of my first program [leap 1], hear the ping in my head when I
understood OO [leap 2] and feel the rush in my veins when I got managed
programming [leap 3]), I was very interested in Jim’s point because I think he
was leading me somewhere [leap 4?].
Then, Ward jumped in
again with another scenario where you start from nothing and have a programmer
at your elbow to translate the next thing you want as you desire it (the first
such scenario was Ward’s Adventure Diet where you start with nothing, then add
one kind of food/day ’til you pass the unit tests I guess [Ward actually put
himself on this diet for a while — man, we are nerds]) and that’s
when I nearly leap across the table so that I can get my own words in edgewise,
literally telling Warm that he had to stop talking now so that I could.
Because that’s when it all hit me.
What I want is
X1 for programs. I’ve fallen in love with X1 because it gives me immediate
gratification. It still finds the same things that Outlook search and Explorer
Search finds for me, but X1 does it in such real time that I can narrow in
several fields at once based on what I know about what I’m looking for, e.g.
some of the body content and/or who it’s from and/or what folder it’s filed in
and/or when I got it, etc, until I see a small number of choices from which to
pick and I can click on one and say “aha! that’s the one!”
I
want X1 for programs. I want to start with nothing and keep refining it with
commands like, “I want an app,” “I want a grid” and “the data should come from
here” and have my computer say, “Would you like an app like this, this or this”
and “would you like the grid to look like this, this or this.” And I want my
computer to know about every feature that ever been built into 3 or more
programs, e.g. from remembering the spot my window was the app last ran to
dropping in pivot tables, from reading/writing to/from databases to providing
theming. Anything that doesn’t work in 3-6 choices, e.g. color themes do but
individual colors don’t, I want a Property Browser/Windows Forms Designer-like
experience and only when I get to implementing something that hasn’t already
been implemented 3 times do I even want to think about writing a line of code.
’cuz here’s the thing. I don’t want to give up writing code. I love writing
code. I just hate writing code that’s already been written. What I want is for a
customer to go through all of the stuff in the Codeless, Human-enabled, Realtime,
Interactive System (or CHRIS*, if you will : ) as described in the previous
paragraph, get to an actual working system except that it doesn’t do some cool,
unique thing that no one’s ever thought of before and then send it to me in an
email along with a PO for how much they’re willing to pay for me to do the last
bit.
When the last bit’s been written 2 more times, it goes
into the CHRIS and around we go again.
And I was all happy
with that answer and I presented it the PND crowd just before the Sells Brothers
(who had come along and been absolute angels for more than 2 hours
while I geeked out with my friends), lost it and started throwing their shoes at
each other in the Washington Square Mall food court, at which point I had to
leave, before hearing what Jim’s point was or what Ward was going to say after
he said, “OK, wait, what about this…” which is usually what he says just
before he tells you that he’s already built what he’s been warming up to for the
last 30 minutes and you find that it rocks.
So, you guys damn
well better tell me what happened after I left, especially if it’s better then
the CHRIS!
BTW, why isn’t anyone filming these PNDs? They’re
the best techie conversations I have all month…
Discuss
* I swear that 90% of that acronym
(abbreviation?) came out naturally and was only tweaked slightly at the end for
marketing appeal. : )