Wednesday, October 21, 2009

StackOverflow DevDays Seattle


Back when I was at my former company, it was always a sore point with me that "continued education" seemed to be a foreign word. Even as I climbed the ranks of the company I felt like I was losing all the hard-won skills and knowledge that I'd accumulated over my years in misery at university. Sure, I knew our codebase, but I didn't feel like I knew very much else. With my skills becoming increasingly narrowed, and focused around *only* what my company did, I wondered if I'd ever be able to find a job *outside* the company.

So, when I became a dev manager at my current company, one of the things I hoped to do waa be the advocate for continued education for the guys under me. Now, for the first couple years all I had were contractors...and it's fairly hard to justify spending money on continued education for people who aren't even FTEs (full-time employees).

So having taken over a new group of devs, comprised entirely of FTEs, I was thrilled to learn Joel Spolsky and Jeff Atwood were organizing the Stack Overflow DevDays set of conferences. Given the extremely low cost for a ticket (A good conference is often $500-700, whereas DevDays was a mere $100 a head) I lobbied to get my entire dev team to go. And, to his credit, my Director agreed.

So, today, my whole development group and I got to spend the day listening to the speakers at the Stack Overflow DevDays conference in Seattle. On the whole I was extremely impressed and if they do it again next year, I highly recommend attending (or if there are still tickets in one of the remaining cities on the tour and you're nearby, snatch one up).

The keynote speach from Joel was about the dichotomy of power and simplicity when it comes to creating software. He made his way through a bunch of examples demonstrating the way in which we're constantly assailed by choices, many of them meaningless. These, he said, are simply an example of the designer being unable to make a decision. One example he gave was the Options bar in IE, which has an option named 'Enable Carat browsing'.

What does 'Enable Carat browsing' mean he asked? And even if you know, is it really a choice that's important? Shouldn't the designer have figured out the right default choice. Instead, it's one more in a series of bewildering decisions, that slow you down and rather than letting you do what you want with your software, force you to be its slave.

So, he asked, does this mean the answer simplicity? Companies like 37 Signals have gone this direction with their BaseCamp software (http://basecamphq.com/). Their "manifesto" is about keeping the feature set small, do one thing, but do it incredibly well. Keep the feature set minimum even if your customers are clamoring for new features. But, the thing is, he went on, that hte features you deem "absolutely essential' and the "minimum" requirements may not be exactly what the customer needs.

So, he said somewhat disappointedly, the answer is not simplicity. What then, is the answer?

In his mind, it's to only offer the choices that matter. He used the quote:

A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away.”
—Antoine De Saint-Exupery

You need to listen to the customer and give them the choices that are *important* but not assail them with things that they don't care about. Enable Carat browsing is one example, another the constant reminders in Windows Vista about whether you want to proceed, even after you've just clicked another very similar dialog box before it. Why would it ask you twice?

It's a reasonable answer I suppose, but also somewhat of a non-answer in my view. I personally think the 37 signals people are closer to the truth, but that's the topic for a whole other blog.

The next speaker was Scott Hanselman, who has the podcast Hanselminutes and he spoke about ASP.NET MVC and some new features. In some ways, I thought his presentation was the most entertaining. My face hurt from how much I was laughing and smiling during his presentation. To give an example, while mentioning he worked for Microsoft and that it 'really isn't so evil anymore', a huge picture of the Death Star was projected behind him. He even showed a language some at Microsoft were working on implementing in .NET that I thought hilarious, called LOLCODE. See it here:
http://lolcode.com/examples/hai-world

The content of Hanselman's talk was actually a bit light, his focus seeming to be more on entertainment than education, but having sat through years of boring Com Sci lecturs in school, I wasn't about to complain. He gave a brief peak into how the new MVC features of .NET worked and it appeared to me that Microsoft is going along the currently popular route of convention over configuration, which is something I was happy to see.

The next speaker, Rory Blyth, then was introduced and gave a talk about developing for the iPhone. My favorite part was when he listed the prerequisites and one of them was:
* A Mac
* "But are you sure?"
* "Yes"
* "But I have a friend who said..."
* "They heard wrong"
He talked about how the iPhone development platform had grown out of the IDE Steve Jobs had put together while at NeXT around 1986 and that, "it was cutting edge about 20 years ago...and it's pretty much the same now". As he went through the examples, it was interesting to see a bit of what Objective C looks like and some of the goofiness of the InterfaceBuilder. He then showed an example of how doing hte same thing in MonoDevelop (which allows one to use C# rather than Objective C) simplified development a great deal. MonoDevelop however is still under development and his example actually crashed while he was trying to run it. One thing Rory stressed again and again if doing iPhone development was that to read Apple's style "guidelines". He made huge air quotes around "guidelines" saying that essentially if you don't follow them, your app will not be published. He continued, "If you ever find yourself wondering how the UI should look, go look at an existing app on your phone (since presumably it made it past Apple's style-dictators) and do that".

Next, Spolsky came back up and gave a rundown of FogBuz7 and its new features. Being a "competitor" to ZPlanner (ha), I was quite interested to see some of the features. Back to his keynote in which he somewhat dismissed the notion of "simplicity" I feared some of the flashier features around his "Evidence based scheduling" might just be confusing and unnecessary, but I'd really have to look at it more closely. Of course, some may have been put off by what amounted to a 30 minute sales pitch, but for whatever else one can say about Joel he is a shrewd businessman. It's very rare for a conference of this caliber to be given for this price and I suspect a large part of the motivation is that FogCreek makes tools for developers. This is the best way to reach them. So, I view it as a symbiotic relationship and didn't mind listening to his spiel. And, like I said, it was interesting to see how his company had approached some of the same problems I have been trying to solve (far more simplisticially) with ZPlanner. I'll probably write an entire blog about Joel and some of my thoughts around his approach and FogBugz, but that will have to wait until next time.

Next up Cody Lindley talked a bit about jQuery. I've played around with it a bit myself while working on ZPlanner but was amazed to learn that something like 35% of all websites now use jQuery. He mentioned that many people only think of using jQuery to manipulated things already in the DOM, but it can also add things to the DOM. He went through some basic examples simply reinforcing what I already knew, that jQuery seems to be the preeminent choice for doing UI work these days. He also gave some useful websites to use when experimenting:
http://codylindley.com/jqueryselectors/
http://jsbin.com/
http://jqueryenlightenment.com/

After Cody, Daniel Rocha came up to speak about QT. I'd not been previously familiar with it, but apparently it's a tool that allows one to cross-compile code (including UI work) to native code across platforms. Currently, it already or will support cross compilation to the following OSes:
* Embedded Linux
* Mac OS X
* Windows
* Linux/X11
* Windows CE/Mobile
* Symbian
* Maemo

Nokia purchased the technology from a company called TrollTech, which had been selling it at a hefty-license fee ($3500 or so) and open sourced the SDK and tools in a hope to have more developers doing work for their phones. Daniel showed a simple example of creating a simple Windows app, then recompiled the same thing to Ubuntu and, hey presto, it worked.

And unlike, Java which has the overhead of running with a JVM, QT compiles to native code so it can do some pretty impressive things. In one example, he showed an OpenGL game (OpenGL is built in) written in QT and compiled to a Nokia device. Very impressive.

After Daniel finished, Ted Leung spoke a bit about Python. His speech was the dryest of the bunch by far and he'd unfortunately made the choice to make his slides from VIM screenshots, not realizing his highlighting scheme (using purple for keywords) was essentially unreadable to the audience. Even after they dimmed the lights my eyes were hurting from straining to see what he was showing, and because his presentation had a bit less pizzazz (it was essentially just showing hte contructs of the language ala a university course), I kind of tuned out a bit. The biggest failure on his part, I think, was that he failed to show me why I'd want to *learn* Python...other than academic curiousity.

Next Dan Sanderson, spoke about the Google App Engine and how it allows one to write apps that can scale as needed. It can run both the JVM as well as Python. It makes guarantees that for the 1st user or the 100000000th concurrent user, the experience will be the same, but imposes some restrictions on developers as a result, one being that it doesn't use a traditional RDBMS. There is a video on the AppEngine code page and I'd recommend watching it as I found the whole topic fascinating.

Last up, was Steve Seitz a local professor here at the University of Washington and while it was the least "usable", it was also the most fascinating. He spoke about Photo Tourism and their work to reconstruct three-dimensional models in space from photos from the internet. You have to watch the video for yourself because it simply blew me away:
http://phototour.cs.washington.edu/
(Watch the "Long Video")

Apparently, this technology is in commercial use on
http://photosynth.net/
Seemed to be old news to some, but I'd never heard of it.

Currently, Steve is working on recreating Rome from pictures downloaded from flickr, you can find his work here:
http://grail.cs.washington.edu/rome

That's it. It was a fairly exhausting day, but a ton of fun. Other than during the Python presentation I was never bored and though what I learned was fairly superficial, it was all fascinating and now I have a bunch of new, shiny things to play around in with my (meager) spare time.

5 comments:

Josh said...

"My face hurt from how much I was laughing and smiling during his presentation." You laugh? ;)

Very cool you were able to take your team to DevDays... I think events like this have a huge morale component in addition to whatever you might or might not learn. I'd definitely like to make it to one of these... $100 is nothing for a conference!

Photosynth is pretty cool... every time I go look at a house to buy I try to take a ton of pictures and put them into Photosynth... with incredibly mixed results. It's definitely better suited to large features taken from many angles. I did manage to get my living room to work decently... by just taking a ludicrous amount of pictures.

Code Monkey said...

Actually, it's interesting you mention your mixed results with Photosynth.

In fact, Steve Seitz specifically discussed how the algorithm used to "stitch together" photos in three dimensional spaces has troubles with indoor photos becuase the flat walls and regular angles to not provide enough unique, identifiable points to map associations. The technology for photo tourism (and I'm guessing, by proxy, Photosynth) works best with landmarks and things outside.

His team is currently doing work to figure out ways to solve this problem and show an example they did only a few weeks ago from a museum that was quite impressive.

Jeremy Walker said...

@Josh. I've seen it, the laughter, it will damage your soul, and if you look directly at his face while he does it ... *shudders

Jim said...

35% of websites now use jQuery? I'm skeptical of that...perhaps they meant "35% of the top X websites"...

Shaun said...

So I guess "Caret Browsing" causes a cursor to appear in the page (like a Word Processor) so you can navigate the page using the arrow keys. I'd never heard of it.

I'm also very interested in App Engine. My Facebook game (Earthurial) actually runs on it. The Key/Value datastore is soo much more fun than designing some rigid, complicated RDB schema.