Archive for January, 2009

16
Jan

Telling stories in Nashville

   Posted by: rew   in General

Well, my personal 2009 Pair Programming Tour has kicked off with a bang! After my recent plea for pairing, my friend @jeremymcanally hooked me up with the guys at OG Consulting, who agreed to take me in for a day.

I drove up Thursday morning and got to @vinbarnes‘ house around 10. From there it was a whirlwind of new info for me til around 5 (with a lunch break for excellent burritos).

I think we were working on some kind of Doomsday web app with which they will soon take over the world. While I don’t get to be part of the New Ruling Order, I do get a pretty low MindlessPeon number thanks for my pre-alpha invite. So that should at least give me some additional social standing among the other Mindless Peons. So that rocks.

AbbyAnd I got to meet Abby, who appears to me the real heart and soul of the OG operation.

Seriously, there was so much to learn it was amazing. The glimmer has begun glimming in my head about how this BDD stuff works. And I’m very taken with RSpec, whereas before I had no clue what the big deal was, and I couldn’t even figure out where the spec files went.

The most important things were unexpected little things, though. I paired with Yossef in the morning, and Rick after lunch. (When I say “paired”, what I mean is really “huffed along trying to keep up as best I could while they tried to go slow on my account”.)

And I learned so much stuff.

I have made the mistake of seeing competing tools and strategies for testing or development as more or less complete solutions. And if I looked at one, and couldn’t see how it made some edge case easier, that made me think I was missing something. But as Yossef pointed out, there are things about RSpec, or BDD, that can be frustrating or limiting once in a while. That doesn’t make them bad, it just means they’re not perfect. But neither are any of the alternatives. The key is finding methods — and tools — that offer the right mix for you, and your current projects, at your current stage of development.

When prominent people in a community advocate this or that methodology, it’s easy to assume their personal practices sprang from their heads like Athena from Zeus, full-grown and already armed. While it never worked like that with me, I thought perhaps it was so for some people. But the craft of programming is an ongoing thing: Yossef mentioned more than once how he used to do this or that, but that “right now” he did it this way. It seemed clear to me that none of these guys had settled on the One True Way, but had found “the Best Way We Know Right Now”. A small thing, perhaps, but still helpful in reminding me there are no permanent “always do it this way” solutions to everything.

There was much more, though. A couple of times during the day, somebody would ask, “What’s the incantation to make X do Y?” The first time it happened, I thought, “Why not just Google it?” But for several things, just asking was faster than Google would have found it. But here’s the much more important thing: by not stopping to go Google it, nobody lost context — not the asker, not the answerer, not the hearer. I hadn’t expected that, but it’s true: it was a better way to find it out without losing context.

This whole “not losing context” thing leads me to the single most amazing part of the experience: I didn’t want to go check my email all the time. I can’t tell you how profound a difference this is for me, personally. I have the attention span of a hyperactive fruit fly. On crack. Normally it’s pretty much impossible for me to sit in front of a single project, working on one thing, for more than a few minutes at a time. But yesterday, it wasn’t even a problem. It’s not that I felt embarrassed, so I just resisted the urge. No, it’s that it was easy to keep focused, because we were doing it together. I didn’t want to miss anything, and I was enjoying it, so why would I want to do something else?

There was so much more: Yossef does an enormous amount without having very much code on-screen at any given time; Rick seems to group his stories differently than Yossef; a good team leapfrogs through the process by borrowing code almost in real-time, giving them a great multiplier on their efforts; after using emacs for almost 20 years, I learned new emacs tricks just by watching; the flaming bird of failure; the 80s-rock < => coding velocity equation; hack and ship; tool-building for speed. It just goes on an on.

While I hope this doesn’t come across as flattery, I’m willing to take the chance. :) Yossef, Kevin, and Rick were unfailingly gracious and patient and friendly hosts. I’m telling you, these guys are not only extremely smart, they’re really nice guys. It was great just getting a chance to hang out and get to know them.

And man, do they know their stuff. It’s a testament to how good they are at what they do that even with my vigorous and frequent application of the Dumb Question Stick, I was unable to prevent them from getting work done. I did all I could, but they still made it happen.

I’ll stop for now; the #nashdl meetup was great, too, and I met some “old” Twitter friends (hi, @levicole!) and made some new ones.

p.s. – I was kidding about the Doomsday app. I think. Though they did open Pandora’s box and just leave the lid off most of the day.

3
Jan

Learning to pair program

   Posted by: rew   in Programming, Ruby, Tech

Update (2009-01-16): You can read about my first tour stop here. I’m fired up now, so I’m looking far and wide for more folks with which to do this.

I’d like to do some pair programming. The problem is, you can’t exactly do that by yourself. At least, not if you’re reasonably healthy of mind, as I understand it.

I’m looking for someone willing to let me come to your place and “pair up” with you for at least a day. I can’t promise how useful I’ll be, but I’m a reasonably pleasant guy, I bathe every month whether I need it or not, and I’ll buy you lunch.

My only requirements are:

  1. Gotta be within an hour or so of Huntsville, Alabama. I need to be able to drive there and back on the same day. That basically means anywhere from Nashville, TN to Birmingham, AL, and from Florence, AL to maybe Scottsboro, AL.
  2. Gotta be Ruby. Rails is even better, but I’d go hang out with a pure Ruby hacker. This isn’t because other languages and contexts sux0r. It’s just that Ruby (and Rails) is what I’m doing right now, and where I’m hoping to ramp up my level of mastery quickly.
  3. You have to have done Pair Programming before, and can show me at least your way that works best. How do we set up our work space? Do we use two computers, linked up? One? Where do we sit? I don’t want to spend the day figuring it out with another Pair noob.

That’s it. I have a few preferences, but they’re not essential: I’d like to work with someone who does BDD/TDD so I can see it in action. I’d strongly prefer if whatever project we worked on was git-based (even better if it’s on github) for the same reason: I’d like to see how real work gets done in this mode. But honestly, any experienced Pair Programmer doing Ruby that will have me will work fine.

I don’t want money or credit or co-copyright or anything. I don’t care what the project you’re working on is. Anything is fine. I just want to learn, and hopefully contribute a little. If it works out, I’d like to do it some more, though no one should feel the slightest compunction against telling me, “Get lost, you bum!” after the first day.

I was inspired by Corey Haines’ Pair Programming Tour 2008. While I can’t travel around the country pairing up with awesome programmers, I’m free to travel around a little bit, and I know there are some good Ruby+Rails folks not too far away.

I’ve been programming more or less steadily for almost 30 years. I’ve been working with Rails for over 3 years, but only for private projects (one large one for one of my companies). In my career I’ve worked in a lot of different platforms, quite a few languages, and at various levels of OS, from a tiny bit of device drivers all the way out to user interfaces. I know a little about a lot of things, and a lot about a few things.

But the discipline of writing software moves very fast, and I’ve not been as deeply involved in programming as I’d like in the past few years, and frankly, there’s a lot of cool stuff I feel like I’ve missed. And one of those is the emergence of pair programming, and the BDD/TDD paradigm.

So…anyone willing to take me in and show me the ropes? Email me at rew@erebor.com, find me on Twitter, or call or text me at 256-777-7650.

Reblog this post [with Zemanta]