Friday, January 30, 2009

Talk with Jeff McWherter

Jeff McWherter (blog) organized the Michigan tour, talking to companies like TechSmith and GreenStone, looking for places to allow me to visit. He hosted a hack fest on Monday night, then a get-together on Wednesday night. Along with his wife, Carla McWherter, he put up with me not just from Sunday until Thursday, he didn't even seem to mind when I stayed there an extra night to avoid driving in the bad weather at night. I want to express how grateful I am to him for the great experience while I was out there.

Jeff is one of the founder of the GLUGNET user group, co-organizer for many Day of Dot Nets, Givecamps, Hackfests, Techfests and all sort of great community events in the area. Jeff also helped organize a software apprenticeship programming with Lansing Community College.

Jeff was a good enough to sit down with me for both a "How I Got Started In Programming" and a Programming Tour video, embedded below. I really enjoyed our conversation, covering his views on craftmanship, apprenticeship and lots of other topics. Enjoy!


Talk with Jeff McWherter from Corey Haines on Vimeo.

Thursday, January 29, 2009

Talk with Matt Poland

While in the Lansing, Michigan, area, I had the fantastic opportunity to visit GreenStone Farm Credit Services and talk to some of their development team about their efforts to bring a legacy application under test. Initially, we were talking a bit about doing TDD, but it quickly became apparent that their current processes would benefit more from just taking some significant steps to decrease the time between checkins for their developers. A good first step is to try to get some automated developer tests around their app as a whole, working on slowly building in shims for isolating their system from the external stuff, like databases and third-party vendor services. I had a great time there, and I really appreciate the fact that they took time out of their schedule to spend a day talking to me.

While there, one of their lead architects, Matt Poland, was kind enough to sit down with me and have a conversation about what they do, how they do it, as well as some thoughts on career development. At the end, he shared a great insight of his regarding how to get your system under test slowly, focusing on 'how do you eat an elephant? one bite at a time.'

Of course, I video-taped it, so here it is. Enjoy!


Talk with Matt Poland from Corey Haines on Vimeo.

Monday, January 19, 2009

Upcoming Tour - Florida

Here's a heads-up for my tour through Florida from February 8th through February 19th. I'm actively seeking hosts for this tour, so please contact me if you are interested. The basic premise of the pair-programming tour is that I pair-program with people in exchange for room and board. Room can be anything from a guest bed to a spot on your floor for my air mattress. I'm a vegetarian, but otherwise completely flexible for food. If you happen to be flush with money, a hotel is okay, but I prefer staying with my hosts as a way to get exposed to people's lives outside programming.

This tour marks a very important milestone for me, as it is the first tour outside of my local area; I'm flying down to Orlando to attend acts_as_conference as part of my "How I Got Started In Programming" interview series, then beginning a journeyman tour from February 8th to February 19th. While at the conference, I'll be interviewing as many people as I can for the series.

This tour came about through some pretty awesome sponsorship coordination by Anthony Eden of chi.mp. I want to express just how overwhelmed I am by what he's done in support of both the interview series and the journeyman tour. Anthony contacted me on twitter about coming down to Florida and interviewing ruby/rails people at acts_as_conference for the series. I figured that, as long as I'm heading down to the Orlando area for a couple days, why not extend it into a pair-programming tour, as well. Since being hosted dramatically decreases my expenses while on the road (hosts provide room and board), extending the trip isn't a huge deal.

Anthony really pulled through for me, finding enough funding for both the plane ticket and hotel during the conference. There are some other incidentals that we are looking for support for, but I already am absolutely floored by this kind of support for both the interview series and the journeyman tour idea. I'll be creating a separate entry about the exact sponsors as the tour gets closer.

I have a few people starting to sign up for hosting, so I'll be posting more information as it gets closer.

Saturday, January 17, 2009

Upcoming Tour - Michigan

Just a heads-up on an upcoming, short tour in Michigan.

I will be kicking off the tour at the Microsoft MSDN DevCon conference on January 22nd in Detroit. I guess this isn't officially a part of the journeyman tour, but I will be using the opportunity there to talk to people about post-apprenticeship activities and continuous improvement. While I'm there, I'll also be doing some interviews for the "How I Got Started In Programming" video series.

The next day, Friday, Patrick Wilson-Welsh (blog) is hosting me in Ann Arbor. Saturday, January 23rd, I will be attending the Ann Arbor Code Retreat, which should be a lot of fun.

Thanks to the organizational prowess and support for the journeyman tour idea of Jeff McWherter, I will be spending the week of January 26th through the 29th in Lansing, MI. I'm very appreciative for the effort that Jeff has put into coordinating my week there. He has been talking to some of the companies in the area that are interested in having me in. As a hint of how cool Jeff is, his title at work is "Director of Simplicity." Fantastic.

While I have to make it back to Cleveland for the following weekend (talking at a local company's user group), I'm hoping to be able to make it back to Ann Arbor for a couple days before heading to Florida (announcement on that coming soon).

I really look forward to meeting people through this short stint on the road, as well as capturing a lot of ideas to share on this blog. I will continue to interview my hosts regarding the tour and whatever they may be currently contemplating.

Sunday, December 28, 2008

Thoughts on being an apprentice

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)

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.

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]