More On The Quest To Kill Code
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…
* I swear that 90% of that acronym (abbreviation?) came out naturally and was only tweaked slightly at the end for marketing appeal. : )