August 17th, 2001
In talking to fellow DevelopMentor instructor Craig Andera today, I realized
that those of you who didn’t get to attend
DevelopMentor’s Conference.NET this week, must’ve hoped that
DevelopMentor’s inaugural conference would suck so that you didn’t miss
anything good. Well, I’m pleased to tell you that it didn’t suck. In fact, it
was awesome. In further fact, I can’t say that I’ve ever had more fun at a
conference. Of course, I couldn’t be everywhere, but here’s what happened to
me:
Day 1: Chris Doesn’t Suck
Monday started with a rousing keynote from David Chappel, the industry’s
best-dressed speaker (not a high bar in our industry, of course, but even I
have to admit that he’s very good looking : ).
An overview of his talk is available here, but what I most remember is
that he pegged C++ as for dinosaurs only. While I certainly see his point,
Microsoft’s Managed Extensions to C++ are going to enable a lot of
people to enter the world of .NET without rewriting large code bases, which is
going to make it enormously popular. This was further evidenced by the volume
of MC++ questions that I fielded all week long (one attendee left the lab
unhappy with the answer he’d gotten from a C# bigot and dragged me back there
to examine his problem). Like VB before it, I predict MC++ to be the .NET love
that dares not speak its name. Of course, David’s comments weren’t exactly
designed to fill my day-long MC++ tutorial later that day…
Further compounding my potential attendance problem was going to be Don Box.
Don’s an amazing man. He has the ability to dive completely into a technology,
understanding it better than the designers, while still remembering the
technical details of every other technology he’s ever ingested and completely
belittling any value they might have had when compared to his latest fetish.
In his talk, C++ didn’t respect the programmer, VB was the bane of
every other programmer, COM was a mess and of course people had trouble getting
DCOM to work over the Internet (how could it work when our neck-bearded network
administrators had been replaced with kids pulled away from flipping burgers by
the siren song of readily available MS networking certification?). Of course,
to Don, only .NET and C# are at all useful to the reasonable, thinking
developer. My biggest issue with Don is how right he usually is, but when he
singled me out as destined to be the world’s last C++ programmer by painting an
image of me in a ’76 Ford truck sporting a gun rack and a bumper sticker
reading, “You can have my C++ when you pry it from my cold dead fingers,” I
knew that those attendees who hadn’t yet decided weren’t likely to show up in
my MC++ tutorial…
The last 2/3rds of my day was spent teaching my first real material in about
three years. Oh, I’d given the odd conference talk now and again, but after
years on the sidelines managing the development of
Gen<X>, I was nervous. After all that time, could I still manage
to entertain and educate a room full of people on a topic that the keynote
speakers had spent all morning panning? As it turns out, I can. Oh, I can’t say
I was brilliant, but I didn’t suck, and that was enough.
Day 2: Chris Has a Bad Hair Day
Day 1 ended with lots of celebration of my not sucking. I got to hang out with
dear friends from as far back as 3rd grade and enjoy a bit more alcohol
than was strictly necessary. After finally collapsing into bed at around
5:30am, I was hardly in any shape for my 8am business breakfast (note to self:
never let the commission-based sales guy schedule the meetings — they’re just
too damn eager). Needless to say I grabbed every minute of sleep that I could,
but because of my short, deathlike REM, my hair was remarkably unmussed when I
showed up without a shower (and even managed to make a point or two without
falling asleep in my waffle). After two hours of scintillating business
wrangling, I retired to my room to grab some quick Zs before returning to
“office hours” in the lab. The lab was really great, because it contained a
couple of hundred PCs with exercises from each of the conference talks so that
attendees could practice what they’d learned, getting help from the rotating
speakers pulling lab monkey duty and answering attendee questions about designs
scrawled on cocktail napkins. This was also where I learned that my continued
lack of a shower had finally made it’s way to my hair. After thirty minutes of
frightened stares, I stopped by the gift shop to buy a hat (stupid looking, but
better than the
Elijah Prince “do” I was sporting) on the way to my first Birds of a
Feather talk.
The BOF that I was to do with Brian Randell, a died in the wool VB guy, was
entitled “WinForms: Love it or leave it,” and it was designed for two things:
1) to leave things very open to audience participation and 2) to make sure that
Brian and I could show up without any preparation whatsoever. You see, both of
us had fallen in love with WinForms, but we hadn’t gotten to do much with it.
We showed some fun demos, though. Mine was dedicated to the splitting and
docking that WinForms has built into it (a thing of beauty!). Brian’s was
dedicated to the new opacity property setting which makes windows imperceptible
(how very useful…). So, after me making fun of Brian about this fetish, he
was getting a bit tense. Then, when the WinForms designer decided to crap out
because of a license file problem, causing Brian to have to shut down the IDE,
delete files manually, restart the IDE, etc, he got even more tense. When Don
decided to rub it in with his standard, “You know, when I use Emacs, that never
happens,” Brian snapped. Before I even had a chance to draw a breath to put Don
back in his place, Brian came right back with, “And how many products did you
ship last year, Don?” A low moan swept the audience and Don turned tail and ran
(after waiting a few minutes to let the ruckus die down). It was an awesome
site to behold! I gained much respect for Brian that day.
I also gained much respect for WinForms. In spite of all of the hype about
ASP.NET and Web Services, the thin-client backlash was in full swing at this
BOF. Our room started out full and just gained people as it went on. Somewhere
in the middle it became standing room only and still people came. And they
didn’t just sit there, either. They all participated in a very rousing
discussion first about MFC/VB vs. WinForms and then onto the more interesting
thin vs. rich client. These people were very tired of the limitations of HTML
3.2 and cross-platform DHTML and anxious to get back to a real development
environment for UIs.
Truly, the Renaissance for rich UIs has begun.
Day 3: Jason Whittington is Accused of Slut-like Ignorance
Day 3 was a big day for me. It started with a talk on a subject near and dear
to my heart,
generative programming. This is a relatively new term for the
technology ideas we’d been using for years in building Gen<X>. Again, my
room was full, not only of attendees but also of two of the software engineers
from the Gen<X> team (Chris Tavares
and Shawn Vanness). The audience was
certainly spending a lot of time nodding their heads and understanding the
benefits of generative programming, but when I showed them
how far we had taken it and
all of the things for which we were using Gen<X>, that took them
right over the top.
And then, right after getting to pitch my favorite technology, I got to proceed
right to my next BOF, where I would get to tilt at my own personal windmill —
non-deterministic finalization. Those of you who know me or my programming
style know that I’m absolutely in love with the idea of objects managing their
own resources and them being notified immediately when the last client is done
with them, either via COM-style reference counting or via a C++ destructor.
This kind of deterministic finalization allows for very aggressive reclamation
of resources, even in the face of exceptions or forgetful programmers.
Non-deterministic finalization, on the other hand, leaves notification that an
object is no longer in use to a background thread managed by a garbage
collector. Because when the GC will get around to notifying an object is
non-deterministic and empirically takes a long time, this means that resources
can no longer be claimed by automatic means, instead leaving it to the client
to manually notify the object via a Close or Dispose method. In my opinion,
this is not a robust technique in the face of exceptions or forgetful
programmers.
This issue has been the bane of my existence for years. When Java was first
becoming popular, I was studying to become DevelopMentor’s first Java
instructor. And at first, I really liked it. Then I discovered that Java had
non-deterministic destruction and
my life turned to ATL instead. Fast forward a few years to an early
design preview of .NET where I learn that Microsoft was “leveraging” many of
the ideas of Java in its new runtime, including my favorite: non-deterministic
finalization. I try to explain the problems inherent in this decision, but
apparently, they’ve been all through this and
Bill Gates has already made the decision for them. Of course, I don’t
know this, so I kept fighting the good fight with
one of the first emails on
DevelopMentor’s .NET mailing list. This caused quite a stir, consuming
much bandwidth to this day and eventually culminating in a
long, explanatory email from Brian Harry, a PM on the .NET team. This
email was intelligent and thoughtful and annoyed me no end because it put the
final nail into the coffin containing my hope for DF in v1.0 of .NET, which
we’re going to be living with for years. In fact, this email annoyed me so much
that, on Day 2, I referred to it as “Brian Harry’s ‘little’ email.” After all,
the room was nearly empty except for a few of my very close friends and one
attendee who I hadn’t met. I met him 5 seconds later. It was, of course, Brian
Harry. Remember, this was the day I had almost zero sleep, so I wasn’t exactly
on top of my game. What an inauspicious way to meet your arch-enemy… [1].
Now, I told you that story so that I could tell you this one.
The BOF was to be a debate between me (pro-DF) and
Jason Whittington (pro-garbage collection), with Don as the master of
ceremonies. Imagine a thoughtful, reasoned exchange of ideas between calm,
measured adults. Now throw that image away. Instead, Don introduced the BOF by
saying that there was the right way of thinking and the Chris way of thinking
and that I had been lured into the packed room (containing, as backup for the
side of evil, Brian Harry) for an “intervention.” Now, it’s not as if some of
us didn’t try to be thoughtful and reasoned. For example, Jason gave us all
kinds of background into the history and practice of garbage collection and how
it works under .NET. In fact, if you haven’t yet had a chance to read
Jason’s GC talk from Conference.NET, you should. It’s great.
Unfortunately, the passions in the audience and in the other side of the
debate, i.e. me, left little time for Jason’s approach. Instead, Don and I and
the audience went back and forth, invoking stories of ASP.NET applications
written by the cream of the crop at DevelopMentor that leaked so many resources
as to make them unusable, laments of the semantic incorrectness of tying
resource management to object lifetime and analogies of deck chairs on boats
that did and didn’t sink. It was somewhere between a gospel revival and a
schlock talk show (in fact, at one particularly cantankerous moment, the
audience was literally chanting “Jerry!
Jerry!“). At one point, I got so worked up during Jason’s attempts to
shed some actual light on the topic that I interrupted him exclaim, “Jason
Whittington, you ignorant slut!” It was one of the highlights of my life…
But that was not to be the highlight of the show. Oh no. The most amazing thing
about the show was later that evening at the close of conference party, where
DevelopMentor introduced the .NET Band: The Band on the Runtime, made up of
speakers and attendees who were also accomplished musicians. It was an awesome
mix of showmanship, musicality and parody lyrics
that caused the audience to sing along, wave their candles (in lieu of
lighters), jump on stage and scream for an encore. When it was over, I was so
moved that, in spite of my long friendship with Don and my pride in never
seeing him as the hi-tech rock star that most folks do, I had to rush backstage
to shake his hand and to be in his presence. I felt like a giddy school girl
hoping to snatch a sweaty handkerchief from across his brow (which I’ll be
auctioning off at eBay when I’m good and ready…).
Day n: The Rest of My Life
I have to say that I was deeply affected this week at Conference.NET. I’d like
to thank everyone who organized it and hosted it and made it happen. And those
of you who had the chance to go, but didn’t? Well, on your heads be it. Don’t
make that mistake again next year…
Related Links
[1] As it turns out, it didn’t take long to make up with Mr. Harry and I soon
found him to be reasoned and intelligent. Even worse, I found that I liked him.
Damn it!