Thursday, October 15, 2009

Katacasts

I'm going to be writing a bit more about what the Katacasts series is, but the short story is that a few of us are going to be screencasting katas on a regular basis. To this end, we set up a blog and are looking to set up a regular podcast (itunes-ish) to provide a centralized place to access the videos.

I posted my first video, and I hope you enjoy it.

Number to LCD Kata

Saturday, October 3, 2009

Just some thoughts on the term 'Pragmatic'

Earlier this week, I started training for the RubyConf 5k. Based on the general suggestions, I'm doing the Couch25k training program, and I found the podrunner podcast that will help with the interval training. So, after the first run, I was feeling pretty good. I mean, the last couple intervals had me breathing pretty heavily, heart pumping, but I thought I handled it all pretty well. So, I was talking to Sarah and said, "Wow! I feel great. I know the program says to take a day off, but I think I might run tomorrow, as well." After all, I've been walking and using my legs for quite a while now; I know and understand the way my body works when moving. She just looked at me and asked if the program said I should take a day off. "Yeah, it does." As expected, she advised me to listen to the instructions; the people who developed the program have a lot more experience than I do with these things. I thought for a second, smiled, and said, "But, I'm pragmatic with my running. Don't hassle me with your 'program dogma.'" Well, we had a great laugh about it. I felt fine the next day, wondered if I should have run, and then, the second day after the run, oh the ache started. My legs definitely were burning, and I was glad that I hadn't over-worked them by running the next day. I guess it is true that it is often the second day after a workout when you feel the effects.

This is a common thing that I hear from software developers: they have a little bit of experience, think that they understand something to the point where they can make their own decisions on what it means to 'be pragmatic.' Often times, people use the term 'pragmatic' as a way to hide a lack of skill and experience. Or, sometimes, it is used in ignorance: someone doesn't realize that they don't understand something well enough. Usually, though, it is brought to play when someone is justifying cutting corners on something. Just like the second day pain I felt with running, this can come back later to bite you in the ass. Think your 9 months of trying TDD makes you an expert, someone who can suddenly decide when it is 'pragmatic' to not design your system with TDD. Or, don't even worry about designing your system with TDD, just talk about automated testing. Are you being 'pragmatic' about automated testing, skipping it things you don't know how to do or are hard? I wrote a blog post about being pragmatic with Uncle Bob around TDD-ing javascript.

It is pretty common knowledge that I'm not a big fan these days of those terms, 'pragmatic' and 'dogmatic.' (I even included a bit of my dislike in a talk I gave to the Chicago Software Craftsmanship group). Do they have value as terms? Yeah, they used to. Nowadays, though, they seem to be used more often as justification for decisions that are based on lack of skill or a desire to cut corners. Next time you are tempted to make a decision based on being 'pragmatic,' take a moment to pause, try not to use that term. Instead, ask yourself why you are making that decision to cut a corner. And be honest with yourself. It isn't shameful to explain that you are not doing something because you don't know how. After all, admitting you don't know how to do something is the first step to learning how to do it, no?

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.

Format:
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.