It's been three decades since I used to hang out in Pitkin County, and I can hardly believe the changes.
I'm driving through Basalt, where my brother lived one summer with his girlfriend and his dog, out of the back of his '48 Willys truck, down in the trees near the confluence of the Frying Pan and Roaring Fork rivers. Now it's condos, all condos.
Further up the road, where my brother wintered in an old cabin on the local marijuana farm, and we feasted with the farmers on fresh road-kill elk... a golf course, surrounded by luxury ranchettes. Past Woody Creek, where Hunter S. Thompson so flamboyantly exercised his constitutional rights... luxury homes. Monstrous luxury homes. Crawling up the hills on all sides like some sort of alien invasion. Approaching Aspen, once a sleepy, dusty old mining town, and the condos and luxury homes grow even denser. And all along the way, the old two-lane road I used to bicycle is a four-lane highway, where traffic gets so dense as to require an HOV lane.
I pull into the Aspen Meadows with relief. A jewel of Bauhaus architecture, nestled among the aspens. A spacious, comfortable suite, with the sound of the Roaring Fork just beyond my bedroom windows. No condos or luxury homes in sight. Fifty years behind the times. Heaven. I take my dog for a quick, lovely walk along the river, where we meet a fellow from Australia on the path. We share stories of Sydney and the outback as we head back up to the bar. The reception appears, sadly, to be at least ninety percent male, and the few women appear to be spouses. I say sad because it can't be good for our profession to have so few women. The men are already geeking out, so I seek out the spouses for some normal conversation. I finish the evening in a long, wide ranging conversation with a Mr. Watanabe from Pasadena—science, engineering, religion, global warming...
Up early for breakfast, but not early enough. I miss the 8 AM session as I dig into my fruit, eggs and bacon. The dining room has a peaceful and spectacular view, with little so-called civilization in sight.
I spend the rest of the morning listening to Jeremy Siek explain the Boost Graph Library. Between the graph theory and the template magic it is mostly over my head, but Jeremy keeps it interesting. At some point he suggests that once your visitor function has found what it is looking for in a graph traversal, throwing an exception is a good way to report success. "Naughty, naughty." I laugh, and Jeremy explains in more detail that if you do it by returning a value from the visitor then you have to be always checking that value as you traverse, so throwing an exception is actually cheaper. Some fellow keeps complaining that throwing exceptions is like cutting off your legs with a chain saw, and I interrupt that "It's more like shooting yourself out of the Death Star as it vaporizes behind you." Jeremy laughs, we all laugh, and on we go to a mind-bending look at solving the Knight's tour.
On my way back to lunch I find myself on a different path than I took in the morning, and wonder if I could use the BGL to compute the best paths between the dining room, my suite, and the conference rooms, given the many formal and informal paths meandering across the Meadows. I realize that first I'd have to map out all the paths, which would leave no time for programming.
The afternoon I spend listening, or rather trying to listen, to Dave Abrahams' talk on template metaprogramming. I can tell that Dave is being extremely lucid, as always, but understanding mostly evades my sleep-deprived brain. Coffee in mass quantities doesn't help, and when I wake to the sound of my own snoring I figure I better leave. Just as well, as when I get back to my suite the local oxygen vendor is waiting with the concentrator I need to sleep at altitude. Three hundred dollars for four nights—next time I'll remember to bring my own. But at least I'll get some sleep tonight.
My involuntary nap and a few hits of oxygen seem to have revived me a bit, so I sit down for a light dinner and compose these notes. Now it's getting late, and I wonder whether Joel Guzman will be showing up for our jam session (Filipino heavy-metal meets American blues) before I just have to crash and burn.
I start the morning with a walk by the river and another great breakfast—yoghurt with granola and blueberries, honeydew melon, bacon, and eggs scrambled with bell peppers. Yummy.
Then I head over to the session on value-based programming, to be co-taught by Kevlin Henney and Jeff Garland. Except that Kevlin is still unconscious in Denver, recovering from the delays of his two flights from London, and waiting on the noon shuttle to Aspen. So Jeff has to defend Kevlin's slides from the withering criticism of Dave Abrahams, Howard Hinnant, and others. The basic idea seemed to be that if one crafts one's types to be "just like an int" and does every thing "by value" and not "by reference" then good things ensue. The contention was around whether Kevlin had defined "value type" clearly enough. For instance, is a pointer a value type? A smart pointer? No resolution is found, but the value of operating "by value" promises to be a major theme of the conference.
For the second morning session I head over to Eric Niebler's talk on text processing. He is showing how to use Spirit to craft static parsers, and contrasting this to the dynamic approach of Regex. Once upon a time I knew Spirit well—Joel Guzman even called me one of his mentors—but now I am paying the price for spending most of the last seven years coding in C. I can see what Eric's code is doing, as the Spirit syntax is close enough to Backus-Naur to be familiar. But I can no longer imagine how that syntax gets turned into a parser. It's hard to believe that I was once once of the world's few experts on template programming, but gratifying to see that so many have moved so far beyond.
At lunch I find myself sitting between Sean and Howard, as they carry on an argument about the right way to implement move semantics on a vector of vectors. At some point I ask whether I can interrupt with a very simple question. Dave asks whether I have read Howard's latest proposal, and I answer that I was (in Howard's words) a pioneer in move semantics, and don't have to read no stinkin' proposals. Am I getting crotchety or what? But Howard and Dave graciously explain, and I begin to see how I might use this stuff in anger.
There is much still to go on the day's program, but I decide my old brain has had enough, and spend the afternoon enjoying a quick blues jam with Dave Abrahams, catching an extra oxygen-enhanced REM cycle, and walking into town for guitar picks and groceries.
The day ends on a good note, when Dave and Joel drop by late for some old-time pickin' and grinnin'. My dog grins as we pick on three guitars and sing our hearts out—blues, rock, country, folk, even jazz. Our Filipino friend must have had a previous life on the Delta. Somewhere after midnight (good thing I napped) Dave is trying to show me some kind of flat-five jazz chord. I tell him that at this point in life I feel about altered chords the way I feel about template metaprograms—I used to do them, but now they give me a headache. So please, no more abstraction, I just want to write assembly code again.
It's late and I'm beat. So fewer stories tonight.
This morning I spent catching Doug's talk on concepts. Beautiful work that should render a lot of template trickery irrelevant, and a lot of unenforceable documentation part of the code itself. Essentially, concepts provide a non-intrusive means of constraining types with requirements and axioms.
A long walk to town for a Mexican lunch with Joel Guzman, catching up personally and technically, discussing everything from world business conditions to Indian and Filipino prehistory to Polynesian navigation and more. We have a bad reputation, but I've long found that real geeks have real lives. We get back late, and we both decide we need a map more than a lecture, so I miss Howard's talk on rvalue references. I get in a couple hour nap and a walk by the river before Sean's talk on the future of software development. Joel—jet lagged, sleep deprived, dehydrated, undernourished, and unacclimated to our 8,500 foot elevation—appears to be down for the count.
Sean's talk, and the discussion it sets off, are fascinating. In a nutshell, Sean argues that programming suffers from an excess of imperative coding and an ignorance of how to design algorithms and data structures. As an example of how bad it is, I point out that WriteNow on my Mac SE, written by two guys in 68000 assembly language, was faster, more stable, and just generally better than Microsoft Word on my MacBook Pro, a program built by a large team of the worlds best, with two decades worth of supposedly improved languages and tools, running on a machine about 1,000 times more powerful than my SE. And Word is far from alone. Where in hell do all those cycles go? What in hell is soaking up all that RAM? Sean's take is that modern programs are littered with algorithms of quadratic complexity. This is due in part to the ignorance and laziness of some programmers, and in part happens by accident. Accidents can include things like an order N loop that calls a function that executes another order-N loop, and ad-hoc networks of objects that communicate with messages in patterns that are difficult to see. When the messages start cycling the complexity can be unbounded. But so long as N isn't too large, and the cycles get broken eventually, then there is no apparent problem, and as chips get faster even more such problems can creep in unnoticed.
Sean's answer to ad-hoc networks is to use a declarative language to explicitly lay out these networks, and an algorithm that efficiently propagates events in patterns that are guaranteed to take linear time.
On the way back Dave summarizes Howard's talk for me and another attendee. Essentially, rvalue references are almost entirely a performance optimization. So I'm going to care about them a lot soon enough.
As impressive as the presenters here are, the attendees are even more impressive. The clarity and clairvoyance of the questions and the relevance of the discussions to the real world use of the material presented just keeps astounding me. For instance, in Doug's talk a few of the questions were answered like "You're 40 slides ahead of me." And I've already mentioned the discussion at Sean's talk. Joel's theory is that Aspen is hard enough to get to that it tends to select the most motivated attendees.
So I haven't reported since Wednesday. I'm home now. Phew.
By Thursday my sleep-deprivation was approaching critical. So I slept through breakfast and the first session, starting my day with Hartmut and Joel's talk on Spirit. But I found I could not look at code and remain conscious, so I headed over to Kevlin's talk on Agile. Kevlin is generally my intellectual "twin separated at birth," and is pretty much the only "methodologist" whose views I can tolerate.
My own experience of Agile was consulting for a shop whose manager described as "playing bug Whack-A-Mole." Every bug they fixed, and every feature they added, created new bugs. So all their vaunted scrums and sprints bought them was to circle the drain more rapidly. Kevlin's approach sounded much more sane, but my own take is that a shared methodology is a poor substitute for a shared culture.
The example of shared culture I like was one morning back in grad school, waking up after a party in a strange house, and playing guitar and singing with a stranger on the porch, as other strangers gathered to listen. After a few hours someone asked us if we had been playing together our whole lives. No, we said, we didn't even know each other's names. A culture doesn't just provide shared practices, like sprints and scrums, or blues and ballads. It provides the shared values from which such practices naturally flow. Keep it simple, take it slow, mix it up, make it flow...
After lunch I napped until Sean's talk on doing polymorphism with concepts. Sean's techniques for polymorphism reminded me a lot of implementing custom object systems in C, back before C++ was an option on PCs. What concepts provide is a higher level of type safety than C, with even less compromise in performance than traditional C++. Sounds good. I'm beginning to see that between concepts and value semantics I should be able to create uncommonly fast, compact, and reliable servers with C++.
The highlight of the evening was the picnic. Not to be ungrateful, but the barbecued ribs were mediocre at best—dry, stringy meat with a tasteless sauce. Nothing like the tasty, tender, juicy "messy meat" my mother used to serve. But then we broke out the guitars for more of that righteous pickin' 'n' grinnin' culture I call my own. A good time was had by all.
Friday morning I slept in again, got my stuff packed, and made it to the panel discussion on the future of Boost. I must confess that I cannot recall anything at all about the discussion. Nada. Zip. I might as well have been sleepwalking. Maybe I was.
I headed home the back way. Not the shortcut, Independence Pass, which was still closed under 18-foot snow drifts. And not the Scofield Pass route that Google recommended, a dangerous and frightening four-wheel-drive road from Crystal to Gothic, which Beman explained that Google recommended because no one has ever field-checked the databases that the Internet map vendors use, but the much safer dirt road over Kebler Pass. A beautiful drive through wildflowers and freshly-green aspens.
I stopped in Crested Butte to find a six-inch bolt embedded in one tire. I considered changing the tire myself, considered the state of my aching body, and pushed the red button for the satellite service I pay for anyway. They dispatch some help out of Montrose, almost two hours away, so by the time my tire is changed it's getting too late to get home before Saturday. But by so-called coincidence, my best friends from home arrived in the Butte about that time, so we found room in a nearby hotel and walked into town for some sashimi. Yes, raw fish—caught, flown, and trucked fresh daily—served up at a basement bar in a remote mountain town, hundreds of miles from any ocean, and 5,779 miles to Tokyo. Wrong. Utterly wrong. But delicious—almost as good as in Tokyo. And the chef gave me a great tip on internet privacy. What a world.
Come Saturday, and Cottonwood Pass, the short dirt-road pass over the Continental Divide from the Butte to my Buena Vista home, is still closed, so I take the longer route over Monarch Pass. An uneventful drive, a long sleep in my comfy, soundproof bedroom, a big breakfast of Huevos Rancheros at the Evergreen Cafe, a walk by the Arkansas river with my dog, and I'm starting to feel human again.
Now I need to get started on a business plan that I promised to an investment banker, and old friend, in hopes of ending my self-unemployment before my savings run out. The plan has been years in the making, but finally gelled in discussions with my old friends at BoostCon, whose available skills give me fresh confidence that the plan will succeed.
So as I predicted, I couldn't afford to go to BoostCon, but I couldn't afford not to. No regrets.
[Editor's Note to BoostCon organizers: try a site at a lower elevation next time!]
The Libraries at Boost:
Dr. Greg Colvin has been hacking happily since 1972. He is a
contributing member of the ANSI/ISO C++ standards committee (and
chief designer of
auto_ptr) and a Principal Member
of Technical Staff with the Java Products Group at Oracle
Corporation. In his spare time he plays apocalyptic electric
blues guitar in his Colorado, USA home studio.