My Dev Days
I went, I watched, I walked away ambivalent about Seattle’s Stack Overflow Dev Days.
I came to Dev Days with two expectations: that I would meet interesting and engaged software developers, and that perhaps half of the talks would stretch my brain in new directions.
Dev Days proved to be a great opportunity to catch up with engineering buddies I hadn’t seen in a while. If you take just one thing away from this review, it should be that I had fun with people I already knew. However, the Dev Days format largely precluded meeting new kick-ass developers and entrepreneurs. The entire day was full of talks, with lunch the only real opportunity to connect with like-minded Seattleites. Awkwardly, lunch tables were “bucketed” into discussion topics. On the surface this seemed a clever idea, but at my table it artificially constrained an already strained conversation.
Talks proved to be Dev Days’ greatest weakness — and, given that Dev Days was all about talks, it’s hard to feel positive about the full experience. It is very difficult, of course, to target a general audience with developer talks. By the end of the day, however, I realized that there was a format that could work for future Dev Days. Unfortunately, few speakers actually followed it. I believe the key to making a great Dev Days talk is to introduce a new set of abstractions and then prove their value via code and demo. Cory Lindley’s jQuery talk did this to great effect; Steve Seitz’s talk did too, though “code” for him was algorithmic intuition. Most other talks failed to meet this bar, or were structured as introductions to a topic. I don’t believe introductions make a lot of sense at Dev Days. I’m happy to be challenged; even if I can’t fully connect the dots, I’m excited to see what the state of the art of each language, framework, and algorithm can deliver.
Here’s a brief review of each of the talks in turn.
Joel Spolsky kicked off the show with an entertaining discussion about simplicity and features in modern software. Unfortunately, his argument was broken on two levels: first, it made the implicit assumption that simplicity and power are at odds (they’re not, as anyone who uses an iPhone or a Palm Pre can attest); second, he made numerous statements ( “if you add more features, you get more paying customers”) for which he offered no direct evidence. Joel argued that “elegant” software finds the balance between these extremes, but later during the conference — in an unwelcome bit of advertising I hadn’t realized I’d paid for — he inadvertently convinced me that FogBugz 7, while powerful, was anything butelegant.
Scott Hanselman stepped in with an overview of Microsoft’s new ASP.NET MVC 2 framework, which seems to have grown by leaps and bounds since the last time I looked at it. I was happy to see him dive quickly into code, though I just as quickly realized that Microsoft still has a long way to go before it gets abstractions as clean as those found in, say, Django. The template approach he demonstrated seemed like bad architecture to me, though I’d have to dig a little deeper to pass true judgement. Scott has an entertaining stage presence, but he wore his status as ambassador from Microsoft awkwardly. What was with the passive agressive apologia-cum-fanboyism?
Rory Blyth’s introduction to iPhone development started with a strong overview of principles, but fell off the rails the moment he left his powerpoint slides. It quickly became clear that he wasn’t very experienced with XCode, Objective C ( “don’t worry about the difference between methods and messages,”) or Interface Builder. The talk was intentionally structured to make XCode look weak, and to then bring Mono Touch to the rescue. Now, I’ve never used Mono Touch — and I am a huge C# and .NET fan — but the continual crashes and ultimate inability to run his final demo made quick work of the argument I think Rory intended to deliver. Rory: the machismo-powered mower on your home page is genuinely hilarious. I worry it may have been turned off for an hour?
After lunch, Cody Lindley stepped in with what was, for me, the highlight of the day. I’m a prototype.js developer by training; learning jQuery has been on my to-do list for many moons. Cory gave an absolutely no-nonsense overview of the library. He clearly explained the core concepts. He gave strong arguments about jQuery’s power and its aesthetically natural use of the Javascript language. He made no bones about the fact that Javascript developers should know their language and didn’t bother to explain anonymous functions, closures, or Javascript’s scoping rules. Cory also ran a great Q&A, which included a killer answer to a developer who asked why there was no class-like abstraction (as found in Prototype.js.) I was an instant jQuery convert.
Daniel Rocha from Nokia spoke well about Qt, the cross-platform UI framework. He showed some impressive demos of a single Qt app targeting Mac, Linux, Windows, and several smart phones. Unfortunately, most of the talk was a high-level architectural overview of Qt; there was little time devoted to getting to the metal. As someone who has played with Qt before, I was surprised that the words “signal” and “slot” never came up. I also think Qt has another hill to climb: the write-once, run-everywhere philosophy is fairly dead these days. Practice never matches promise. Rocha’s talk said little here.
After a short break, Ted Leung came on stage to introduce the audience to Python. I’ve seen Ted give talks in town before, so I know he’s an enthusiastic and influential supporter of the Python community. Unfortunately this didn’t come across at all. As I mentioned above, I don’t think that introductions are a good choice for Dev Days talks; Ted’s talk was structured as a language overview of Python. I’m a day-in-day-out Python developer, but I’ve never been terribly fond of the syntax itself. There was no discussion about how Python is being used in new, cool, ways. Perhaps worst of all, Ted hadn’t sanity checked his slides; keywords and strings in his colorized python listings were (literally) illegible.
Dan Sanderson of Google gave an overview of App Engine, a subject near and dear to my heart. Dan did a great job describing the benefits and limitations of App Engine as compared to roll-your-own web infrastructure. He dove into both Java and Python bootstrapping code, so it was easy to understand how the outermost interface between App Engine and developer applications functioned. Unfortunately, Dan didn’t go into much detail about the technologies that make App Engine unique from a scalability perspective; no data store or task queue code was shown.
The day ended on a high note, with a fantastic talk by Steve Seitz from the University of Washington. Steve’s research interest is in image feature extraction and matching algorithms; his work has led to Photosynth and, as he discussed during his talk, many new impressive projects. Steve’s most ambitious current project involves taking every last photograph available on the Internet and reconstructing the entire world from them. There are many difficult algorithmic tasks associated with this ultimate goal, and Steve gave very high level intuition about a handful of the relevant algorithms. Steve’s talk was a great way to end the day.