This summer, I wrote a small data importer program. I decided to do it non-Test-Driven-Development (TDD) to check some statements I'd been making. For example, I frequently assert that, once you get into the swing of TDD, it actually speeds you up. Well, it had been a while since I did something non-TDD, so I figured I'd try it out.
What happened? Well, for one, it took me a really long time. I kept IRB open, so I could load my module and try out the import routines. The manual aspect of the testing really slowed me down.
Another insight came out of the experience: the code looked similar to code I would have written with TDD. There were several small, task-oriented methods that a large, coordinating method gluing them together. I could see there were a few things that would have been different with TDD, but the general pattern was there. Until today, I wrote it off as just an item of interest.
In his book, The Craftsman, Richard Sennett makes a very thought-provoking point when talking about Correct vs Practical: the idea of quality vs functionality. As craftsmen, we strive for quality in our code. We look to use proper practices and techniques, such as abstraction layers, single responsibility, etc. However, when the time comes, we sometimes resort to cutting corners for production of functionality. Focusing entirely on quality, we would never allow an abstraction to leak or for a unit to have more than one responsibility/reason to change. In reality, though, we sometimes allow these, knowing that we can deal with them through another technique. Sennett's example is a woodworker who, focusing on an absolute measure of quality, "will shave a mortise-and-tenon joint until the two pieces are completely rigid, needing no screws." Focusing on the measure of functionality, the carpenter will "curb worry about each detail, knowing that small defects can be corrected by hidden screws."
How does my experiment with non-TDD relate to what Sennett is saying? The answer is in the shape and form of the code I wrote that was non-TDD. Over the past few years, I've practiced with isolation/mock frameworks that help me find the appropriate abstraction layers by virtue of 'Programming by Wishful Thinking.' TDD has led me to focus on small methods that have a single responsibility, as they are much easier to test. Due to the years of rigorously applied TDD, I find that I make more unconscious decisions about when to apply these patterns. So, when I take away the 'training wheels' of TDD, my designs are better than they would be if I hadn't practiced those techniques.
I've talked to people lately about the idea of being a journeyman. How do you know when you are ready? I don't have the answer, by any stretch, but I have an idea. During the apprentice phase, a person is busy learning. They are practicing specific techniques, rigorously applying rules and procedures. Over time, having been influenced by many mentors, an apprentice starts to develop their own toolbox, the set of practices that they systematically apply. These practices form a basis for further development, a core that an apprentice can build upon.
While discussing what makes a craftsman at the software craftsmanship summit a couple weeks ago, someone mentioned having a core set of techniques/principles that a person applies in their work; I like this idea more and more. A craftsman is mindful of his work, not just the end result, but during the act of creation, as well. The principles that hold to are not static; they can and should change as they are exposed to different ideas. However, there must be a basis to build upon. This foundation is what is established during an apprentice stage.
Just my thoughts.
[Update: Mark Needham referred me to developing a Personal Practices Map. Wonderful! That's just what I'm thinking of.]
(feel free to leave a comment here or put a link to your response on your blog)
Sunday, December 28, 2008
Wednesday, December 24, 2008
Talk with Justin Kohnen
As the last host of my first tour, Justin Kohnen deserves a special place. He spent the entire tour as the anchor for the end of the tour. When I left for Chicago initially, I basically only had the first week planned definitively, plus Justin at the very end, 3 weeks away. Over the first week, the middle of the tour filled in with some amazing experiences, but, through it all, there was Justin. :) Add the fact that he was the only non-Ruby guy, and it was a recipe for a fun and interesting weekend.
I spent Saturday and Sunday programming with him, and we did some great stuff, had some great conversations and just generally coded the weekend away!
Both of us were new to Silverlight (SL) and Windows Communication Foundation (WCF), but, after a marathon push on Saturday, we figured it all out in time to build a reasonable architecture on Sunday. While the application we worked was secret, Justin said it would be okay to talk about it like a chat server. So, let's just say that we were building a chat server: SL on the front; WCF in the middle; and, SQL Server on the back.
Special thanks to Keith Elder for taking some time on Saturday night and walking us through the initial setup of the WCF services.
Enjoy!
Interview with Justin Kohnen from Corey Haines on Vimeo.
I spent Saturday and Sunday programming with him, and we did some great stuff, had some great conversations and just generally coded the weekend away!
Both of us were new to Silverlight (SL) and Windows Communication Foundation (WCF), but, after a marathon push on Saturday, we figured it all out in time to build a reasonable architecture on Sunday. While the application we worked was secret, Justin said it would be okay to talk about it like a chat server. So, let's just say that we were building a chat server: SL on the front; WCF in the middle; and, SQL Server on the back.
Special thanks to Keith Elder for taking some time on Saturday night and walking us through the initial setup of the WCF services.
Enjoy!
Interview with Justin Kohnen from Corey Haines on Vimeo.
Monday, December 22, 2008
Pair Programming on ENIAC
Jean Jennings Bartik was one of the first people to program ENIAC. Here is a fantastic interview with her on the occasion of becoming a Computer History Museum Fellow.
I feel that listening to the stories of the people who have been around is such a fundamental aspect of our profession (I suppose of any profession). One thing that I really got a lot from during my first tour was asking everyone how they got started in programming. I heard stories that spanned more years than I've been alive, and stories that are just at their beginning. Learning about people's histories, their attitudes, their way of living was one of the unexpected joys of my time on the road.
In her interview, too, Jean talks about how they pair-programmed while working on ENIAC, and how she thinks it is the best way to program. SWEET! Her comments on pairing start around 22 minutes.
[Thanks to Rachel Appel for the link to the video]
I feel that listening to the stories of the people who have been around is such a fundamental aspect of our profession (I suppose of any profession). One thing that I really got a lot from during my first tour was asking everyone how they got started in programming. I heard stories that spanned more years than I've been alive, and stories that are just at their beginning. Learning about people's histories, their attitudes, their way of living was one of the unexpected joys of my time on the road.
In her interview, too, Jean talks about how they pair-programmed while working on ENIAC, and how she thinks it is the best way to program. SWEET! Her comments on pairing start around 22 minutes.
[Thanks to Rachel Appel for the link to the video]
Sunday, December 21, 2008
One of the greatest moments of the tour
A lot of people have asked me about the tour, things like 'what was the biggest thing I learned' or 'who cooked the best meal?' I also get questions about highlights. I wanted to share one of the absolute best 20 minutes, or so, of the tour. Jonathan Branam's family was just great, and this video really shows a great example of how lucky I've been to have people bring me into their homes and lives. While I don't have videos of all the experiences I've had, the time I've spent with everyone's families has made this one of the all-time greatest experiences of my life; I've grown, not just as a developer and craftsman, but as a person.
Enjoy, 'Jamming with Josiah and Judah'
Jamming with the Branam Kids from Corey Haines on Vimeo.
Enjoy, 'Jamming with Josiah and Judah'
Jamming with the Branam Kids from Corey Haines on Vimeo.
Talk with Craig Muth
While in Columbus, I had the opportunity to hang out with Craig Muth. He's built an emacs-based framework called Xiki that is pretty awesome looking. Watching him use it is like magic! And, it is all written in Ruby, which is even cooler. It is a tree-oriented, wiki-based interface for pretty much living your entire life in emacs, even though he told me isn't one of those people who say you should spend all your time there. :)
While he and I didn't really get to pair that much, we had some fantastic conversations throughout the day, and I was very happy to get the chance to spend some time with him.
Interview with Craig Muth from Corey Haines on Vimeo.
While he and I didn't really get to pair that much, we had some fantastic conversations throughout the day, and I was very happy to get the chance to spend some time with him.
Interview with Craig Muth from Corey Haines on Vimeo.
Saturday, December 20, 2008
Talk with John Distad
While at Edgecase in Columbus, I got to spend a little time pairing with John Distad on refactoring a helper function that he had. It was a bit of a bear, as there was a lot of stuff going on in it. In the end, we just scrapped it and wrote it over. It was fun working with John and seeing another person's approach.
After work, John and I went out to dinner and had some great conversations about philosophy and what not. Enjoy the video:
Talk with John Distad from Corey Haines on Vimeo.
After work, John and I went out to dinner and had some great conversations about philosophy and what not. Enjoy the video:
Talk with John Distad from Corey Haines on Vimeo.
Friday, December 19, 2008
Thanks, Matt Yoho
I wanted to take a second to thank Matt Yoho for his support. Not only did he let me crash on his couch for 3 nights in a row while I was in Columbus, but he also donated to cover costs of the tour.
I met Matt this year while becoming involved in the local .net community. He's since moved to Edgecase to do Ruby/Rails. He's a great guy, very nice and thoughtful. I didn't get a chance to interview him on video, but we had quite a few great conversations over the time I was there.
So, thanks, Matt! I really appreciate it, and the community is better because of people like you.
I met Matt this year while becoming involved in the local .net community. He's since moved to Edgecase to do Ruby/Rails. He's a great guy, very nice and thoughtful. I didn't get a chance to interview him on video, but we had quite a few great conversations over the time I was there.
So, thanks, Matt! I really appreciate it, and the community is better because of people like you.
Talk with Joe O'Brien
Joe O'Brien was kind enough to allow me to come in to Edgecase and pair with some of his guys for a couple days. He is very passionate about the idea of software craftsmanship and is definitely looking for ways to get involved in the community. Over the two days that I was Edgecase, he and I had many conversations about what the future could bring. Part of me wishes that I could embed a video camera behind my eye for all these great offline conversations I have.
Normally, I cut out the part where I tell people to speak up, but I think it works pretty well in here. Plus, I love the laugh.
Enjoy the video:
Talk with Joe O'brien from Corey Haines on Vimeo.
Normally, I cut out the part where I tell people to speak up, but I think it works pretty well in here. Plus, I love the laugh.
Enjoy the video:
Talk with Joe O'brien from Corey Haines on Vimeo.
Talk with Jonathan Branam
Jonathan Branam contacted me after he noticed that I was going to be traveling from Chicago to Columbus; that meant I would be driving by his house in Muncie, Indiana. After some email exchanges, we got the timing down to where I could spend a day at his house working with him.
Jonathan is the author of Red Sun, a Ruby VM for flash. I missed his talk at RubyConf this year, but I was really excited to dig in a little with him into the code. While I understand the basic concepts around VM's, I haven't dug in extremely deep, so this was a fantastic opportunity for me to learn more. You really should go watch his RubyConf presentation on Red Sun on Confreaks.
I arrived at his house Sunday night, and, after having a great time hanging out with his family (video of a great concert with his kids coming soon), we had a fascinating conversation for quite a while. I asked him about the state of Red Sun, and he told me that the main thing left before he could start running RubySpecs was exception raising. So, that was the plan for the next day.
Wow! What a tremendously exciting day this was. Basically, Jonathan is direct porting the MRI source code to ActionScript. Yeah, you heard me, ActionScript. He has a service that converts Ruby source to Ruby bytecode, then the bytecode is interpreted by his code. Fantastic. By the end of the day, we had exceptions being raised and captured in rescue blocks. There were still a few odds-and-ends to finish up (different overloads for raise), but the core seemed to be working.
Links:
We mentioned the "Ruby Internals" talk by Patrick Farley (and, of course, we couldn't remember any links or anything while talking), but I said I would link to his blog.
Here's Jonathan's Blog.
Talk with Jonathan Branam from Corey Haines on Vimeo.
Jonathan is the author of Red Sun, a Ruby VM for flash. I missed his talk at RubyConf this year, but I was really excited to dig in a little with him into the code. While I understand the basic concepts around VM's, I haven't dug in extremely deep, so this was a fantastic opportunity for me to learn more. You really should go watch his RubyConf presentation on Red Sun on Confreaks.
I arrived at his house Sunday night, and, after having a great time hanging out with his family (video of a great concert with his kids coming soon), we had a fascinating conversation for quite a while. I asked him about the state of Red Sun, and he told me that the main thing left before he could start running RubySpecs was exception raising. So, that was the plan for the next day.
Wow! What a tremendously exciting day this was. Basically, Jonathan is direct porting the MRI source code to ActionScript. Yeah, you heard me, ActionScript. He has a service that converts Ruby source to Ruby bytecode, then the bytecode is interpreted by his code. Fantastic. By the end of the day, we had exceptions being raised and captured in rescue blocks. There were still a few odds-and-ends to finish up (different overloads for raise), but the core seemed to be working.
Links:
We mentioned the "Ruby Internals" talk by Patrick Farley (and, of course, we couldn't remember any links or anything while talking), but I said I would link to his blog.
Here's Jonathan's Blog.
Talk with Jonathan Branam from Corey Haines on Vimeo.
Thursday, December 18, 2008
Some Links
I've got some more videos to put up, but I have a little bit of editing left to do on them, so expect a couple tomorrow, including great talks with Jonathan Branam and Craig Muth. I have interviews with Joe O'Brien and Jonathan Distad coming, as well. I'm currently in Cincinnati, so expect some future videos with Chris Nelson and Jim Weirich.
In the meantime, here's a couple links:
I was really honored to be contacted by Mike Bria of InfoQ with some questions; he was planning on writing an article about the tour. I responded with some thoughts, and he wrote a fantastic write-up that really captures a lot of the meaning behind the tour. Definitely go read it. Anything I say about InfoQ at this point will sound like I'm just saying it after the fact, but I can sincerely say that it is one of the only email newsletters that I still subscribe to and regularly follow the links in. If you would be so kind, please digg it.
Chris Cyvas is an old friend of mine from many jobs ago. We've bounced in and out of each other's lives every few years, usually running into each through strange connections. He's been following the tour and was inspired to take action on pairing while developing the new version of his application. He wrote up a nice blog post about his thoughts on pairing, as well as an offer to pair with people on it. Check it out!
Andy Maleh is a member of Obtiva, as well as the developer of the Glimmer UI framework. He was there while I paired with some Joseph Leddy and Turner King there and took some pictures. Here's a blog post with a couple pictures.
Mark Needham wrote a great blog post about pairing. While he mentions my tour, it isn't specifically about it. Instead, it is a collection of thoughts on guidance for being productive while pairing. Definitely a good read.
In the meantime, here's a couple links:
I was really honored to be contacted by Mike Bria of InfoQ with some questions; he was planning on writing an article about the tour. I responded with some thoughts, and he wrote a fantastic write-up that really captures a lot of the meaning behind the tour. Definitely go read it. Anything I say about InfoQ at this point will sound like I'm just saying it after the fact, but I can sincerely say that it is one of the only email newsletters that I still subscribe to and regularly follow the links in. If you would be so kind, please digg it.
Chris Cyvas is an old friend of mine from many jobs ago. We've bounced in and out of each other's lives every few years, usually running into each through strange connections. He's been following the tour and was inspired to take action on pairing while developing the new version of his application. He wrote up a nice blog post about his thoughts on pairing, as well as an offer to pair with people on it. Check it out!
Andy Maleh is a member of Obtiva, as well as the developer of the Glimmer UI framework. He was there while I paired with some Joseph Leddy and Turner King there and took some pictures. Here's a blog post with a couple pictures.
Mark Needham wrote a great blog post about pairing. While he mentions my tour, it isn't specifically about it. Instead, it is a collection of thoughts on guidance for being productive while pairing. Definitely a good read.
Sunday, December 14, 2008
1000 Miles
Yup! Just outside of Indianapolis, Indiana, my trip odometer rolled over. I almost didn't catch it, since I was rocking out to Jonathan Coulton (official music of week 3 of the tour).
1000 Miles from Corey Haines on Vimeo.
1000 Miles from Corey Haines on Vimeo.
Talk with Micah Martin
Micah Martin is a founder of 8th Light in Chicago. He hosted me Wednesday night through Friday night (Paul Pagel, also of 8th Light, let me stay at his place on Friday night), leading up to the Software Craftsmanship Summit on Saturday.
8th Light was a great place to be hosted at; I got a chance to pair with Micah (on Playbills), Paul (for a bit while we struggled with ActiveResource) and then Eric Meyer on Friday (I have a video with Eric Meyer to put up), and I had a blast. I was very lucky to be able to spend Wednesday and Thursday evening with Micah, too, and we had some great conversations over the days about craftsmanship, apprenticeship and journeyman tours. 8th Light has an apprenticeship program, and he had some great ideas about creating a viable journeyman system, as well. At RubyConf, he did a talk on kata and sparring in software. You should check it out; it is great.
8th Light is building Limelight, which is a framework for building GUI's. It has a very interesting metaphor: a theater with stages, scenes, players and props. I had seen a couple presentations on it, but actually working in it gave me a new sense of respect for it. Check it out, for sure. Plus, 8th Light is hosting sparring competitions (they just finished a battleship AI tournament) using Limelight as the front-end.
Talk with Micah Martin from Corey Haines on Vimeo.
8th Light was a great place to be hosted at; I got a chance to pair with Micah (on Playbills), Paul (for a bit while we struggled with ActiveResource) and then Eric Meyer on Friday (I have a video with Eric Meyer to put up), and I had a blast. I was very lucky to be able to spend Wednesday and Thursday evening with Micah, too, and we had some great conversations over the days about craftsmanship, apprenticeship and journeyman tours. 8th Light has an apprenticeship program, and he had some great ideas about creating a viable journeyman system, as well. At RubyConf, he did a talk on kata and sparring in software. You should check it out; it is great.
8th Light is building Limelight, which is a framework for building GUI's. It has a very interesting metaphor: a theater with stages, scenes, players and props. I had seen a couple presentations on it, but actually working in it gave me a new sense of respect for it. Check it out, for sure. Plus, 8th Light is hosting sparring competitions (they just finished a battleship AI tournament) using Limelight as the front-end.
Talk with Micah Martin from Corey Haines on Vimeo.
Talk with Eric Meyer
While being hosted at 8th Light, I had the opportunity to pair with Eric Meyer on a Limelight application that he is working on called Fresnel, an interface to the Lighthouse bug-tracking system. He had already started the story, but I convinced him to take a completely different approach as an experiment. We ended up pairing on the story for the entire day, and it was a lot of fun. Eric was very fun to pair with, and we had some great conversations about the Limelight metaphor. We also introduced a new metaphor to our system, the stagehand, which was our form of a helper. I hope it makes it into the core. I'll probably fork limelight over the next couple days (when I have some time) and submit a pull request with the code in it.
I want to thank Eric especially, as I just kind of wandered over and asked if I could pair with him. I feel very lucky that he said yes, because I enjoyed my day there immensely with him.
Eric is a new craftsman at 8th Light, after going through an apprenticeship there.
Talk with Eric Meyer from Corey Haines on Vimeo.
I want to thank Eric especially, as I just kind of wandered over and asked if I could pair with him. I feel very lucky that he said yes, because I enjoyed my day there immensely with him.
Eric is a new craftsman at 8th Light, after going through an apprenticeship there.
Talk with Eric Meyer from Corey Haines on Vimeo.
Talk with Brian Marick, Part 2 (of 2)
Brian Marick was kind enough to host me for a few days on my tour (12/8 to 12/9). He's working on a Ruby Cocoa book, and I was lucky enough to pair with him while he worked out some TDD stuff for the book.
In this second part, we talk about some other testing frameworks, as well as his book and agile teams.
Brian added a couple blog entries: one about our pairing, the other about the conversation topic.
And, of course, here is a link to 'Everyday Scripting with Ruby' book that we mention. It is a great book, so go pick it up!
Sorry for the abrupt ending, but the video ran out.
Talk with Brian Marick, Part 2 (of 2) from Corey Haines on Vimeo.
In this second part, we talk about some other testing frameworks, as well as his book and agile teams.
Brian added a couple blog entries: one about our pairing, the other about the conversation topic.
And, of course, here is a link to 'Everyday Scripting with Ruby' book that we mention. It is a great book, so go pick it up!
Sorry for the abrupt ending, but the video ran out.
Talk with Brian Marick, Part 2 (of 2) from Corey Haines on Vimeo.
Friday, December 12, 2008
Sponsor - Cory Foy
Just wanted to put a post out thanking Cory Foy for supporting the tour through a Quicktime Pro license. I've known Cory for a few years now, hanging out with him at the Agile Conferences, trying hard to fulfill our roles as the 'Agile Cor(e)ys'
So, thanks, Cory! I appreciate it! With the support for my videos that I've been receiving, I'm going to have to put effort into continuing them. Perhaps a continuing interview series while not on a pairing tour.
So, thanks, Cory! I appreciate it! With the support for my videos that I've been receiving, I'm going to have to put effort into continuing them. Perhaps a continuing interview series while not on a pairing tour.
Talk with Brian Marick, Part 1 (of 2)
Brian Marick was kind enough to host me for a few days on my tour (12/8 to 12/9). He's working on a Ruby Cocoa book, and I was lucky enough to pair with him while he worked out some TDD stuff for the book.
In this first part, we talk about his background, then get into acceptance testing with fit-style frameworks.
Brian added a couple blog entries: one about our pairing, the other about the conversation topic.
And, of course, here is a link to 'Everyday Scripting with Ruby' book that we mention. It is a great book, so go pick it up!
Talk with Brian Marick, Part1 from Corey Haines on Vimeo.
In this first part, we talk about his background, then get into acceptance testing with fit-style frameworks.
Brian added a couple blog entries: one about our pairing, the other about the conversation topic.
And, of course, here is a link to 'Everyday Scripting with Ruby' book that we mention. It is a great book, so go pick it up!
Talk with Brian Marick, Part1 from Corey Haines on Vimeo.
Thursday, December 11, 2008
Road Thoughts - Tools v Technique
While driving up from Champaign to Chicago, I started thinking about using improved tools versus using improved techniques. So, I stopped at a rest area and recorded the first of my road thoughts. During my tour, I have a lot of time to think about things, so I thought it might be good to start recording some of them.
While I was setting up the camera, a truck-driver sauntered up with his two dogs and started talking to him. At first, it was a bit odd, but then I realized that he was probably happy to have a bit of company while his dogs exercised. He told me about how hard it is getting in the trucking industry, which definitely brought home the reality of the current state of our world.
I talked to him for about 25-30 minutes, I think, then we parted ways. He went back to his truck, and I recorded this little video of my thoughts. I hope you enjoy it. If you have any comments, feel free to post below or write your own blog post and link to this one. If you send me an email, I'll update this blog post with links to your blog comments.
(First part of the conversation with Brian Marick will be up tomorrow)
Road Thoughts - Tools v Techniques from Corey Haines on Vimeo.
While I was setting up the camera, a truck-driver sauntered up with his two dogs and started talking to him. At first, it was a bit odd, but then I realized that he was probably happy to have a bit of company while his dogs exercised. He told me about how hard it is getting in the trucking industry, which definitely brought home the reality of the current state of our world.
I talked to him for about 25-30 minutes, I think, then we parted ways. He went back to his truck, and I recorded this little video of my thoughts. I hope you enjoy it. If you have any comments, feel free to post below or write your own blog post and link to this one. If you send me an email, I'll update this blog post with links to your blog comments.
(First part of the conversation with Brian Marick will be up tomorrow)
Road Thoughts - Tools v Techniques from Corey Haines on Vimeo.
Sunday, December 7, 2008
Pair Programming Bot
Don't have someone to pair with and aren't on my tour? Jim Weirich put together a bot to help you.
Thanking My Sponsors
I wanted to take this chance to again thank my sponsors after the first week on the tour. I had hoped to eventually grow the tour into something that could generate sponsorship, but I had no idea the level of support that I would get during the first tour. So, I recorded this quick little video to say thanks to the following people:
Derik Whittaker of Dimecast.net
Jamie Wright of MadeFromDolly.com
Dave Hoover of Obtiva.com
And, of course, all of you (go look in the mirror)! Thanks for supporting me through week 1 of the tour!
If you are enjoying my posts, please feel free to contact these guys and tell them thanks. And, hey, when you buy your twitter t-shirt or watch a video on dimecast, make sure you mention that you heard about them through their support.
(sorry that the audio is so low, I mumbled a little lower than usual, I think)
Sponsors! from Corey Haines on Vimeo.
Derik Whittaker of Dimecast.net
Jamie Wright of MadeFromDolly.com
Dave Hoover of Obtiva.com
And, of course, all of you (go look in the mirror)! Thanks for supporting me through week 1 of the tour!
If you are enjoying my posts, please feel free to contact these guys and tell them thanks. And, hey, when you buy your twitter t-shirt or watch a video on dimecast, make sure you mention that you heard about them through their support.
(sorry that the audio is so low, I mumbled a little lower than usual, I think)
Sponsors! from Corey Haines on Vimeo.
Saturday, December 6, 2008
Talk with Dave Hoover
Dave Hoover from Obtiva invited me to their office and took me out to lunch at a fantastic Greek restaurant (I had a vegetarian mousaka, and I ate the leftovers for dinner on Saturday). After lunch, I stuck around their office and paired with some of the people there. Before Dave left, we had a great conversation about Obtiva, software craftsmanship, being an apprentice and development as part of your life and his book, Apprenticeship Patterns. I've been slowly working my through the online version over the past few weeks, and I'm enjoying it. There is also a tree-based version coming out in March, 2009.
To top it all off, Dave further sponsored the tour by purchasing a Vimeo Plus membership for me, so I could upload these great videos in a timely fashion.
Dave Hoover Conversation from Corey Haines on Vimeo.
To top it all off, Dave further sponsored the tour by purchasing a Vimeo Plus membership for me, so I could upload these great videos in a timely fashion.
Dave Hoover Conversation from Corey Haines on Vimeo.
Talk with David Chelimsky
David Chelimsky hosted me on the tour from December 1st through December 3rd, then was kind enough to let me stay at his house on the 4th. We paired for three days and had a great time. On Friday morning, we sat down and had a conversation. David is the maintainer for RSpec, so, naturally, our conversation ranged a bit over to spec-first development. Enjoy!
The Pragmatic Bookshelf has also announced a release date(-ish) for David's 'The RSpec Book' that you will want to put on your calendar.
P.S. I also learned from this video that I should let my hair dry before I do a video: slicked-back trucker-style FTW!
David Chelimsky Conversation from Corey Haines on Vimeo.
The Pragmatic Bookshelf has also announced a release date(-ish) for David's 'The RSpec Book' that you will want to put on your calendar.
P.S. I also learned from this video that I should let my hair dry before I do a video: slicked-back trucker-style FTW!
David Chelimsky Conversation from Corey Haines on Vimeo.
Ruby Slim Video
Uncle Bob Martin posted a video showing usage of RubySlim with FitNesse. This is the project that I worked on with him while he was hosting me, and it is exciting to see it in action.
Friday, December 5, 2008
Talk with Uncle Bob Martin
Uncle Bob Martin and I sat down after our day of pairing to talk about the tour and our day. I had a great time with him, and we got a lot done on RubySlim.
He also recently released his 'Clean Code' book, which is a great one. In a way, it has a feel like 'The Pragmatic Programmer,' except very focused on code.
Interview with Uncle Bob Martin from Corey Haines on Vimeo.
He also recently released his 'Clean Code' book, which is a great one. In a way, it has a feel like 'The Pragmatic Programmer,' except very focused on code.
Interview with Uncle Bob Martin from Corey Haines on Vimeo.
End of Second Leg
The second leg of my tour was spending a day pairing with Uncle Bob Martin. I was very excited about this leg, because Uncle Bob is who initially introduced me to Agile, in general, and XP, in particular, more than 4.5 years ago. Since then, I've run into him here and there, mostly at the yearly Agile conference. So, when he contacted me a couple weeks ago to come out and pair with him for a day, I jumped at the chance.
Uncle Bob picked me up from the train station on Wednesday night, and, after swinging by his house to pick up his wife, Ann Marie, we all went out to a great pizza place that had all-you-can-eat pizza. Yeah, you ordered whatever pizza you want, and they brought it. I had a rather large half-spinach/half-mushroom pizza and ate too much of it. It was delicious. :) I really enjoyed our dinner conversation, and Ann Marie's salesmanship for the iPhone really tempted me. Who knows. After arriving home, Uncle Bob and I sat and talked for a while, ending the evening with a great glass of Brandy and talking a bit about getting started in computers.
Thursday morning, I woke up, took a shower, then headed down to start the day. Initially, I had thought we might be pairing on Slim.net, but I was pleasantly surprised to find out that we were actually going to be working on RubySlim. We spent a few hours in the morning working on it, making some great progress on the execution engine. After lunch, we finished the afternoon at the 8th Light offices. At the end of the day, we had FitNesse instantiating Ruby fixtures and calling methods. It was a tremendous rush when the first FitNesse fixtures started showing some green.
Pairing with Uncle Bob was a lot of fun. His joy with coding is incredibly infectious, which makes the whole experience that much more fun. He's just getting used to Git, so we had a short discussion about it, along with a few examples of branching and stashing. I even laughed a couple times as I caught his finger reaching for the semi-colon at the end of the line. :)
This leg had a significantly different feel than the first leg, and I think it was because it was much shorter. With David, I was there for three days, and the task was more focused on a longer-term project. RubySlim is a smaller system, so we made a lot more progress towards completion. I think that a single day with David would not have been enough, since I would not have had the opportunity to see the system move significantly forward. This is a good thing to remember for future tours: the amount of term spent with someone probably should reflect the size of the project they are on. This isn't an absolute truth, and I think the rest of the tour will mold this further.
David was kind enough to let me stay at his place tonight in preparation for the next phase of my tour. Tomorrow, I am going to spend part of the day at Obtiva, as Dave Hoover invited me to come out and have lunch with them. I plan on heading over there in the morning, pair with some people, then leave after lunch. I'll be heading up to Grand Rapids, MI, to spend the night with Chris Woodruff. I'm not 100% sure what Saturday will hold for me, but Sunday will see me leaving for Champaign, IL, to spend Monday and Tuesday with Brian Marick.
Uncle Bob picked me up from the train station on Wednesday night, and, after swinging by his house to pick up his wife, Ann Marie, we all went out to a great pizza place that had all-you-can-eat pizza. Yeah, you ordered whatever pizza you want, and they brought it. I had a rather large half-spinach/half-mushroom pizza and ate too much of it. It was delicious. :) I really enjoyed our dinner conversation, and Ann Marie's salesmanship for the iPhone really tempted me. Who knows. After arriving home, Uncle Bob and I sat and talked for a while, ending the evening with a great glass of Brandy and talking a bit about getting started in computers.
Thursday morning, I woke up, took a shower, then headed down to start the day. Initially, I had thought we might be pairing on Slim.net, but I was pleasantly surprised to find out that we were actually going to be working on RubySlim. We spent a few hours in the morning working on it, making some great progress on the execution engine. After lunch, we finished the afternoon at the 8th Light offices. At the end of the day, we had FitNesse instantiating Ruby fixtures and calling methods. It was a tremendous rush when the first FitNesse fixtures started showing some green.
Pairing with Uncle Bob was a lot of fun. His joy with coding is incredibly infectious, which makes the whole experience that much more fun. He's just getting used to Git, so we had a short discussion about it, along with a few examples of branching and stashing. I even laughed a couple times as I caught his finger reaching for the semi-colon at the end of the line. :)
This leg had a significantly different feel than the first leg, and I think it was because it was much shorter. With David, I was there for three days, and the task was more focused on a longer-term project. RubySlim is a smaller system, so we made a lot more progress towards completion. I think that a single day with David would not have been enough, since I would not have had the opportunity to see the system move significantly forward. This is a good thing to remember for future tours: the amount of term spent with someone probably should reflect the size of the project they are on. This isn't an absolute truth, and I think the rest of the tour will mold this further.
David was kind enough to let me stay at his place tonight in preparation for the next phase of my tour. Tomorrow, I am going to spend part of the day at Obtiva, as Dave Hoover invited me to come out and have lunch with them. I plan on heading over there in the morning, pair with some people, then leave after lunch. I'll be heading up to Grand Rapids, MI, to spend the night with Chris Woodruff. I'm not 100% sure what Saturday will hold for me, but Sunday will see me leaving for Champaign, IL, to spend Monday and Tuesday with Brian Marick.
And now for something completely different
Uncle Bob's dogs, Twinkles and Petunia. I have an interview with Uncle Bob to put up tomorrow or Saturday, as well as an interview with David Chelimsky (long overdue). So, enjoy.
You've seen the pictures, now witness the action:
Twinkles and Petunia from Corey Haines on Vimeo.
You've seen the pictures, now witness the action:
Twinkles and Petunia from Corey Haines on Vimeo.
Thursday, December 4, 2008
End of the first leg of the tour
Wow! It is hard to believe that I'm at the end of my first stop and on the train to number two. Pairing these last three days with David Chelimsky has been a true treat, and I am more confident than ever that this tour is a great idea. I've written some really cool code, submitted a patch to an open source project (Radius), and met some very interesting people.
On Monday night, I had the pleasure of speaking at the Chicago Ruby Brigade (see video of the presentation), followed by beers at a local pub with some of the members. We had some great conversations about agile practices. One thing that really stuck out for me was Dean Wampler's comment that one of the original intentions for the practices was to allow 'average developers' (watch out, loaded term) to be more successful. This is something that really has caused me to think about my view of 'Agile' in the world. This isn't to say that the practices are not applicable across all skill/experience levels (they are, and I believe they will make anyone more successful), but the practices, themselves, are not only for the 'elite.' The term 'Agile' has a lot of strong associations in my mind, being more of a philosophy than a set of practices. It also reminded me of the idea that, if you are going to implement the XP practices in your organization, you need to implement them all. For example, incremental design and YAGNI have fantastic benefits, but if you don't pair them with other practices, such as TDD and CI, you potentially are going to run into some serious problems later when you go to add those "waiting until I need it" features to an existing codebase.
I've known David Chelimsky for a little more than 4 years now, having met him at the 2004 Agile XP Universe conference. I've mostly run into him at the agile conferences, although we've kept in touch here and there online. Since I've been doing more Ruby, our communication has been more frequent, due to his involvement in RSpec and my love of using it. Over the past four years, we've paired a handful of times on different things, so I didn't have any fear that we would run into any hiccups. From my perspective, I couldn't have been more right: pairing with David was awesome. David's experience with pairing really showed through in the constant communication both verbal and non-verbal, resulting in very smooth transitions that blurred any thought of "controlling the keyboard." One of the great things that I've found when working with an experienced pair-programmer is the lack of having my attention drift away when the other person is typing: I was engaged almost constantly. This creates a very easy transition between different styles of pairing, including ping-pong, driver-navigator and tester-implementer.
From a very selfish perspective, I learned some cool tricks and techniques in Ruby and RSpec. RSpec is definitely my preferred framework for specs, and it was exciting and very instructional to work with the primary maintainer. For example, I am now much more comfortable with things like the following:
lambda { do_something }.should change(MyThing.count).by(1)
in a spec. Or, checking for errors:
lambda { do_something }.should raise_error(ActiveRecord::RecordNotFound)
The application we worked on was using Merb, rather than Rails, which was a new framework for me. It is similar, but there are definitely things that I was impressed with. I'm probably going to stick with Rails, as the freelance job that I'm starting is using it, but I want to look more at Merb, for sure.
Another thing I was exposed to was Radius, which looks to be a super cool tagging system. It supports the equivalent of tag_missing, which allows for some cool tricks. While using it, we found a small part that was a bit annoying (to me, at least), so we forked it on github, added a shortcut, then submitted a pull request to the author.
I will be taping an interview with David on Friday morning concerning his experiences, and I plan on having time to edit and post it this weekend.
Next stop, spending a day pairing with Uncle Bob Martin.
On Monday night, I had the pleasure of speaking at the Chicago Ruby Brigade (see video of the presentation), followed by beers at a local pub with some of the members. We had some great conversations about agile practices. One thing that really stuck out for me was Dean Wampler's comment that one of the original intentions for the practices was to allow 'average developers' (watch out, loaded term) to be more successful. This is something that really has caused me to think about my view of 'Agile' in the world. This isn't to say that the practices are not applicable across all skill/experience levels (they are, and I believe they will make anyone more successful), but the practices, themselves, are not only for the 'elite.' The term 'Agile' has a lot of strong associations in my mind, being more of a philosophy than a set of practices. It also reminded me of the idea that, if you are going to implement the XP practices in your organization, you need to implement them all. For example, incremental design and YAGNI have fantastic benefits, but if you don't pair them with other practices, such as TDD and CI, you potentially are going to run into some serious problems later when you go to add those "waiting until I need it" features to an existing codebase.
I've known David Chelimsky for a little more than 4 years now, having met him at the 2004 Agile XP Universe conference. I've mostly run into him at the agile conferences, although we've kept in touch here and there online. Since I've been doing more Ruby, our communication has been more frequent, due to his involvement in RSpec and my love of using it. Over the past four years, we've paired a handful of times on different things, so I didn't have any fear that we would run into any hiccups. From my perspective, I couldn't have been more right: pairing with David was awesome. David's experience with pairing really showed through in the constant communication both verbal and non-verbal, resulting in very smooth transitions that blurred any thought of "controlling the keyboard." One of the great things that I've found when working with an experienced pair-programmer is the lack of having my attention drift away when the other person is typing: I was engaged almost constantly. This creates a very easy transition between different styles of pairing, including ping-pong, driver-navigator and tester-implementer.
From a very selfish perspective, I learned some cool tricks and techniques in Ruby and RSpec. RSpec is definitely my preferred framework for specs, and it was exciting and very instructional to work with the primary maintainer. For example, I am now much more comfortable with things like the following:
lambda { do_something }.should change(MyThing.count).by(1)
in a spec. Or, checking for errors:
lambda { do_something }.should raise_error(ActiveRecord::RecordNotFound)
The application we worked on was using Merb, rather than Rails, which was a new framework for me. It is similar, but there are definitely things that I was impressed with. I'm probably going to stick with Rails, as the freelance job that I'm starting is using it, but I want to look more at Merb, for sure.
Another thing I was exposed to was Radius, which looks to be a super cool tagging system. It supports the equivalent of tag_missing, which allows for some cool tricks. While using it, we found a small part that was a bit annoying (to me, at least), so we forked it on github, added a shortcut, then submitted a pull request to the author.
I will be taping an interview with David on Friday morning concerning his experiences, and I plan on having time to edit and post it this weekend.
Next stop, spending a day pairing with Uncle Bob Martin.
Tuesday, December 2, 2008
Chicago Ruby Brigade Presentation
Josh Cronemeyer asked if I would give a brief talk at the Chicago Ruby Brigade on December 1st about the pair-programming tour. The room was a bit dark, but I think that just adds to the mystery. :)
It was a lot of fun, and, naturally, we went out for a couple beers after the meeting. I met some really cool people and had some great conversations. A few of them even worked for Obtiva, which is cool, as I'm going to be meeting a bunch of them for lunch on Friday.
Chicago Ruby Brigade Presentation from Corey Haines on Vimeo.
It was a lot of fun, and, naturally, we went out for a couple beers after the meeting. I met some really cool people and had some great conversations. A few of them even worked for Obtiva, which is cool, as I'm going to be meeting a bunch of them for lunch on Friday.
Chicago Ruby Brigade Presentation from Corey Haines on Vimeo.
Monday, December 1, 2008
Chicago with David Chelimsky
I arrived in Chicago last night to a fantastically warm greeting at David Chelimsky's. Not long after my arrival, I was treated to a delicious dinner of butternut squash risotto. It was delicious, and ending the night by learning a fun new card game was a great way to cool down from the long drive. I'm looking forward to pairing with David, as well as making a video interview with him about his thoughts on the tour. Thanks, David!
Sponsors!
I really didn't expect it this tour, but on Sunday morning, I got messaged by 2(!) different people wanting to sponsor me on the tour. HUZZA!
While the main part of the tour provides me with room and board while being hosted, there are significant expenses that I have, including gas, food during travel, flip video camera, etc. I am very appreciative of community support from people.
Derik Whittaker and Dimecasts.net
Derik Whittaker of dimecasts.net was kind enough to send a contribution. From my initial gas estimates, his donation is going to cover the first week of gas. I am very grateful for his support of this community venture, and I highly recommend everyone go out to dimecasts.net and check out his screencasts.
Dimecasts.net has quality tutorial screencasts on various topics in the .net ecosystem. Oh, you aren't a .net developer? That's okay, being exposed to different technologies is always a good thing. Please make sure to stop by dimecasts and learn some great stuff.
Derik's twitter handle is @DerikWhittaker. If you are so inclined, feel free to send him a quick tweet thanking him for supporting my tour.
Jamie Wright of MadeFromDolly.com
Jamie Wright of madefromdolly.com also sent me a generous donation. His donation is going to be used to continue to cover gas expenses through the tour.
You know you are on twitter, you know you love it. Why not broadcast it to the world with a twitter shirt from madefromdolly.com. These are really nice shirts, and you know you want one.
Jamie's twitter handle is @jwright. If you are so inclined, feel free to send him a quick tweet thanking him for supporting my tour.
Thanks to both of these guys for their support. The tour is an experiment on my part to see what can happen, and their generous donations are making it even more possible.
While the main part of the tour provides me with room and board while being hosted, there are significant expenses that I have, including gas, food during travel, flip video camera, etc. I am very appreciative of community support from people.
Derik Whittaker and Dimecasts.net
Derik Whittaker of dimecasts.net was kind enough to send a contribution. From my initial gas estimates, his donation is going to cover the first week of gas. I am very grateful for his support of this community venture, and I highly recommend everyone go out to dimecasts.net and check out his screencasts.
Dimecasts.net has quality tutorial screencasts on various topics in the .net ecosystem. Oh, you aren't a .net developer? That's okay, being exposed to different technologies is always a good thing. Please make sure to stop by dimecasts and learn some great stuff.
Derik's twitter handle is @DerikWhittaker. If you are so inclined, feel free to send him a quick tweet thanking him for supporting my tour.
Jamie Wright of MadeFromDolly.com
Jamie Wright of madefromdolly.com also sent me a generous donation. His donation is going to be used to continue to cover gas expenses through the tour.
You know you are on twitter, you know you love it. Why not broadcast it to the world with a twitter shirt from madefromdolly.com. These are really nice shirts, and you know you want one.
Jamie's twitter handle is @jwright. If you are so inclined, feel free to send him a quick tweet thanking him for supporting my tour.
Thanks to both of these guys for their support. The tour is an experiment on my part to see what can happen, and their generous donations are making it even more possible.
Welcome
Hi! Thanks for coming to Corey's Pair Programming Tour blog. I will be recording vid/podcasts through the coming weeks, as well as writing up my own impressions.
This is the temporary home for the tour, until I can get hosting set up on www.wiresidechats.com
This is the temporary home for the tour, until I can get hosting set up on www.wiresidechats.com