Tuesday, September 29, 2009

Upcoming Code Retreats

This year has seen a huge surge in practice-oriented events, and code retreats are definitely in the fore-front of these. We've seen them happen in several cities in the US, plus even retreats in Iceland and Romania. Most recently, I hosted one in Chicago, where we had some great people practicing the craft together.

I'm working on organizing a couple more (one more in Chicago, one in Durham, NC, plus one in Cleveland), but there are two coming up that I wanted to let people know about.

Chirag Dadia and Sebastian Hermida are hosting a code retreat on November 1st in Philadelphia, PA. If you are in the area, you definitely want to come. They will be doing it in traditional style, in Java, but don't think you can't get something out of it if you aren't a Java developer; the practice you gain comes in handy whatever language you are using. I will definitely be attending this code retreat.

Looking more into the future, Jeremy Anderson is organizing a code retreat on January 23rd, 2010(!), in Grand Rapids, MI. It is a few months away, but put it on your calendar. This is sponsored by Atomic Object. This code retreat is going to be done in Ruby, so sharpen up yours skills. Stepping outside the standard Java box makes it a bit more difficult for just anyone to show up (you need to have a basic skill-set with Ruby), but, if the Chicago Ruby Code Retreat was any indication (and it was), you are going to have a great time. I'm going to do my best to make my schedule work to get to this one.

Monday, September 21, 2009

Practice Features for Conway's Game of Life

At the Chicago Code Retreat last Saturday, I asked whether it would be helpful for people to have a set of Cucumber features for Conway's Game of Life. There seemed to be a general consensus that this would be a handy thing to have, so I've built them and put them up on github.

I created features for the basic rules of cell evolution, and I am adding features for some common multi-cell patterns.

I haven't added an step definitions, yet, although I expect to create a few that can be used to drive your development. Thanks to Aslak and the cucumber team's tireless efforts to get cucumber working for different languages than Ruby, you should be able to use these features to drive development in your favorite language.

Cucumber Features for Conway's Game of Life

I've put instructions in the readme for how to contribute your own features.

Sunday, September 20, 2009

Code Retreat Chicago - Wrap-up

Other thoughts:
John Yerhot has posted thoughts on his experience.
Jim Breen has posted thoughts on his experience.

My thoughts:

Yesterday was the first Code Retreat Chicago (initial announcement and description), sponsored by Thoughtworks, and it was absolutely fantastic. If you were in Chicago, and you didn't show up, you missed out on a fun day of coding and practice; I got there at 7.45am, and I think I finally left at 10.45pm.

About 16 people showed up, which was great, since that allowed us to have a pair for everyone. We did 6 45-minute sessions, with a final 7th session that ran for about 1.5 hours at the behest of all the participants. Between the sessions, we had around a 15 minute break for discussing what we did during the past session, swapping pairs, deleting code and running to the bathroom. :) And, of course, a little bit of looking out the window at the view.

The people who come to Code Retreat never cease to amaze me with their excitement and zest for coding and practicing new things. After all, if you are willing to get up and make it by 8.30am, you're already showing your hand a bit. After the final session, most people stayed for several more hours to talk and socialize. It helped that Thoughtworks provided some beer, too, for the after-retreat festivities.

As usual when working on Conway's Game of Life, the first couple sessions saw people really focused on building the data structure, normally a two-dimensional array. Over the course of the morning, after discussing ideas between sessions, more and more people experimented with new approaches, started at different areas of the problem and fooled around with completely odd ideas (one pair spent their session pretending they were in the 1970s, when running the application was expensive, so they really focused on analyzing the algorithm intensely). I also shared some ideas from previous code retreats on things to try.

For lunch, we had food catered from Haifa Cafe. I've never been to a code retreat where there was pizza, and, if I'm involved, there won't be. If you are crazy enough to get up early on a Saturday to come spend the day coding with strangers, then you deserve to have a good meal for lunch. In fact, we ended up with a ridiculous amount of food left, so a lot of people stayed and ate dinner. I told people to bring some containers to take left-overs home, and there definitely was enough.

I took a bunch of pictures, so, if you are interested in seeing what it looks like when a bunch of geeks get together to code, look no further.

If you were in Chicago, you really missed out. But, don't worry, I'm going to be organizing another one this winter. If you live in another city, keep watch for a code retreat coming to your area. If you would like to organize or host a code retreat in your town, feel free to contact me. If you are in the Philadelphia area, mark your calendars for November 1st.

Thanks again to Thoughtworks for sponsoring this Code Retreat. Also, thanks to Michael Norton and Patrick Sarnacke for helping out from the TW side.

Thursday, September 10, 2009

Speaking at Concept Camp

Sara Chipps wanted to spend the weekend talking geeky things while spending time outdoors camping. So, as any community-oriented person would do, she started a conference: Concept Camp. It is coming on September 25-27, 2009.

Concept Camp is a weekend camping trip, focused on a Saturday of hard-core discussion/presentations surrounding a theme. The structure sounds really cool: get some devs together from various walks of life, put them at a campground, organize a couple talks around a theme, make sure there is social stuff (read: music and drinks) and let the hilarity ensue. The conference is $40 to cover camp site and food.

This year, the theme is 'Design Patterns.' Sara was kind enough to invite me to deliver the morning keynote to get everyone ready for the day. The tentative title for my talk is 'Design Patterns are problems, not solutions.' You'll have to come to Concept Camp to see what that is all about. I'm very honored to be asked, and I am very excited to see what I have to say, but I'm sure that there will be a few mentions of software craftsmanship. :)

You know you want to come! If you want more information, contact Sara or me.

Thursday, September 3, 2009

Code Retreat Chicago

Are you in Chicago on Saturday, September 19th?

Want to have a fantastic time practicing your development skills in a stress-free, deadline-nowhere-to-be-seen environment?

Want a free lunch coupled with coding all day with awesome people?

Then, keep reading!

I'm pleased to invite you to come to the very first Chicago Ruby Code Retreat!

What's a code retreat? Here's a short summary:

A code retreat is a day of practice. It was initially conceived by Patrick Welsh and Nayan Hajratwala. The idea was to establish a stress-free environment for people to get together and practice the craft of development. Patrick wrote an overview of the idea back in January, 2009, which covers some of the original goals. Over the past year, after several successful code retreats, the format and benefits are pretty well established.

(note: I'm working on a longer blog post that will contain a better description, as well as links to blog posts by attendees at past retreats)

Note: I'm going to try to limit this to about 40 people for cost and coordination reasons, so please make sure to sign up on the coderetreat site and rsvp. I'll need to have a good head count next week to start making catering arrangements.

8.30am to 5pm
6 45-minute sessions
Coding is done in pairs
Each session, we work on Conway's Game of Life
At end of each session, we delete the code we wrote
At end of each session, we reflect a bit on what we did/practiced
At the end of the day, we go out for dinner and drinks, so we can discuss the day

The goal of the retreat is to provide sessions where people can practice doing things they wouldn't ordinarily do when working on something they need to get finished. Since the Game of Life is not a task that can be reasonable finished in an hour, the tension to finish goes away, and we can focus on different design / development techniques. Ever wanted to try to implement an algorithm with no 'if' statements? Go for it! Want to try the 'TDD as if you meant it' style? Knock yourself out! The world is open, and, since you are pairing, it makes for a fun time trying new things.

Ordinarily, we do the code retreats in Java, as the skills needed to code in it for this task are pretty common. However, this being Chicago, home of a very thriving Ruby community, we are going to try this one in Ruby. I've been to several retreats, and I'll be curious to see the differences with this new language.

Note: This code retreat will be done in Ruby. We won't be spending time getting Ruby set up on machines, nor learning Ruby. There is an assumption that you are at least familiar enough with the basics of Ruby that you can write classes, methods, etc.
If you are coming, please make sure that you have Ruby installed and working, as well as an editor of your choice. Any gems that you normally use (rspec, shoulda, cucumber, rails, etc.) should be already installed. Code Retreat is not intended to be a language learning day, rather a practicing/honing of what you know.

Wednesday, September 2, 2009

A Software Development School Idea

People who have talked to me (including late-night, heated discussions at Agile2009) know that I'm not a huge fan of the current training system, neither the computer science degree nor the way that new developers are brought into our industry. If you've been following me or spoken with me, then you've most likely heard how I prefer the mentor/apprenticeship model of training. I've had a lot of conversations with people along the way about apprenticeships, including some recorded ones. Ken Auer greatly impressed me with his sincerity and passion about the idea, and Jon Kern (video coming soon) also brought come concrete ideas to the forefront for me. These and others have convinced me that there could be a viable model for a hands-on, apprenticeship-style school for learning software development.

The basic structure would be a workshop doing custom software development for small businesses. The primary emphasis would be on the training of apprentices, much like a dental school. You know how you can go to a dental school and get your teeth cleaned for a less money than you would pay if you went to an experienced, graduated dentist. You are still going to get your teeth cleaned, although it might be a bit slower, perhaps a slightly lower quality (not always, though), but, in the end, you are going to have clean teeth.

I'd like to digress for a second to address the 'slightly lower quality' comment. I like JB Rainsberger's definition of quality: the marginal cost of adding features. This isn't about bugs or lack of functionality, this is more akin to the difference in quality between a Sam Adams Lager and a La Fin Du Monde; they are both good beers, but the La Fin Du Monde is a higher quality (in my opinion). Bugs are more like buying a beer and finding a mouse in it; unless you are Bob and Doug McKenzie, this is not a recipe for hilarity and success.

While the emphasis will be on hands-on development of real projects, there will also be a goal of making sure the apprentices learn the history of our industry, the names and contributions of those who have come before us. After all, it is hard to stand on the shoulders of giants, when you don't know who they are.

The main goal of the school would be have 2-year apprenticeship programs, where people can come and learn under the tutelage of experienced software developers while building real products for real clients. After they leave, companies that would hire them will know a certain something about their skills and experience. I emphasize that they will not leave as experts, more as developers with a solid understanding of certain development techniques.

There is more to the idea, and it is constantly evolving, as I meet and discuss this with more people, getting different perspectives and opinions. But, I wanted to put this up to share with everyone the thoughts, as well as perhaps get a bit of larger-scale discussion started.

I will be writing more about this as time goes on, but I wanted to get the ideas out there.


Wow. Thanks. It has been a very overwhelmingly emotional past couple of days.

While I've been on the road, I've heard from a lot of people, both in email and in person, about how they have really enjoyed following my travels. Many have told me that the video interviews and thoughts that I've had to opportunity to share have been inspirational. I know of a couple people who actually have taken some time off work to go pair with people in their area to try out the idea of journeyman-style learning and sharing. Many of these people have asked how they could help me out. Always, I would mention something about a "blog post that I've been putting off writing."

Well, I finally put the post up, and I have been overwhelmed by the positive feedback from the community. In 2 days, I was able to not only reach my goal, but surpass it by 22%, for a total today of $3660. As I stated in my previous post, half of everything above $3000 will go towards organizing code retreats in places that I visit (like this one coming up in Chicago). I will try to find company sponsorship of these events, but, in lieu of that, I'll have money to help fund food and other miscellaneous expenses that might come up while organizing them. I have some definite plans in place to create a stable form of support, while still being able to contribute to the community in this way.

So, I wanted to say thanks to everyone for the ongoing support, both emotionally and financially. I have some definite plans in place to create a stable form of support, while still being able to contribute to the community through sharing the ideas of the people that I have the opportunity to meet, and this money will help get me there. I also have a renewed fire in my belly for the future, as well as the beginnings of a crystallized goal: the eventual (perhaps around 5 years from now) founding of a software development school.

Thank you to everyone, this has been a tremendous couple of days, and it means more to me than I can really express in words (although that has never stopped me from trying).