The Deep End & The Global Day of Code Retreat
Cross-posted from mikeebert.tumblr.com
On Saturday I joined 30 developers here in Chicago along with 2200 other developers around the world for the Global Day of Code Retreat. It was a day co-founded by Code Academy mentor Corey Haines to help developers grow by pairing up with different people over multiple, 45-minute sessions to work on Conway’s Game of Life. The Game Of Life is an exercise in the evolution of a grid of cells that live, die or are born depending on how many neighbors they have. For each session we were given a guideline to approach the problem from a different perspective and in between we talked about how things went, what worked and what didn’t.
Confession: I was really nervous about this event and wasn’t entirely sure what I was doing showing up. At this point I have a whole two months of programming experience under my belt and as much as I want to challenge myself and learn new things I was worried I wouldn’t be able to hold up my end of a pairing and I didn’t want to hold anyone else back. But my mentor recommended the event and there is a section in Apprenticeship Patterns called “The Deep End” that tells aspiring craftsmen to jump in and challenge ourselves, so I took the plunge. I knew that most of the developers would want to write some form of tests for their code and since I have very little experience with Test Driven Development (TDD) getting that exposure was one of the main reasons that I wanted to go. It also definitely helped that I had some Kindred Spirits attending the event in the form of my fellow Code Academ-ians Geoff, Rudy, Vince, Dave and Michael.
During the day I paired with six different people and each pairing was an eye-opening experience and an entirely different approach to the problem. I started off paired with Justin Love- an experienced developer who wrote very simple, iterative, beautiful tests. I let him drive most of the time and simply made suggestions or asked questions if there was something I didn’t understand. He was a great pair in that he would discuss with me where I thought things should go and then he would show me the code that accomplished our chosen goal.
My second pairing was with David, a young but talented developer who was new to the Ruby language and test driven development. The rule for the second round was that we had to “ping pong” the programming where one of us would write the tests and then the other person would make it pass and write the next test before handing the computer back. David and I wrote pure Ruby tests instead of using a testing framework like Rspec and we started out slow but really started to get into a rhythm. After 45 minutes I was surprised to discover that we had made it about as far as Justin and I had.
My third pairing was with James, a really sharp, experienced programmer but a relatively newbie to Ruby as well. James used modules to set up different rules, something I’d never seen before, but I was able to help him out with some of the Ruby syntax for setting up blocks for the testing rules. James refactored the code really well too and at the end of our 45 minutes we were using only about half the lines of code to get to the same spot that I’d gotten with my first two pairs.
After a lunch break and a random lottery I ended up with Josh, 8th Light’s newest software craftsman. I say this with both fear and admiration, but the 8th Light crew sort of has the reputation as the samurai of Chicago area developers- LOTS of practice and discipline and a very strict code of how things are done (my mentor is also an 8th Light guy). So when I got paired with Josh I was a bit intimidated but also knew that I was in for a lesson. Well, after we got matched up we also learned what our rule was for that session: no talking. That’s right, 45 minutes of pairing in pure silence. Did I mention I was nervous??? Josh was actually really great and while I’m sure my boneheaded-ness and perplexed looks might have been a bit frustrating for him, he put on a clinic in TDD and patiently went back and forth with me (in almost silence) as I slowly grasped the direction he was heading and the tests he was writing. In 45 minutes we pushed a little bit further than I had before and my grasp of the bigger picture was expanded even further. I wasn’t surprised to later discover that this wasn’t Josh’s first Game of Life rodeo.
For my last two pairings of the day I teamed up with Vince and then Geoff and we had a blast. Vince and my challenge for the fifth round was to NOT write any tests and since we figured we had very little experience with tests it would be easier going for us. Well, guess what one of the first things we wanted to do was… write a test! But we resisted and soldiered on with some pure Ruby to define the rules of the game and make a cell aware of it’s surroundings. We were cruising along until we got stuck on the question of existence: we could tell a cell whether it should be alive or dead in the next round, but how would we tell a cell to become alive if it was previously dead? Our 45 minutes were quickly over before we could answer it.
Geoff is basically the Code Academy valedictorian and although him and I are both in class every day and even run into each other at the gym, this was actually our first pairing outside of him helping me with some filter problems back in week five. There were no rules for our final session of the day so we dove in with reckless abandon and I challenged Geoff to try and get as far as we could in the 45 minutes. We started out with some tests to get the basics done and then Geoff just started cranking out code as fast as we could talk. We ended up getting further along than I’d gotten all day, but in the end we did the same thing I’d begrudgingly done five times before. As soon as the 45 minutes were up we deleted our code. That’s right, no traces of the days highs or lows. It was all about getting a fresh perspective each round and practice, practice, practice.
At the beginning of the day Paul, our moderator, explained that the Global Day of Code Retreat was designed to decrease the distance from the every-day code that developers have to write and the code that they hope to write. As Paul explained, that gap can also be interpreted as a measurement of how much we might think we “suck”. If anything, Code Retreat certainly expanded my knowledge of just how much I suck- but I can also definitely say that the distance is now a little bit shorter.