5 Reasons to Attend a Coderetreat
November 15 was the Global Day of Coderetreat. It is an event where software developers around the world practice their craft away from the pressure of work and timelines. This year we hosted an event at the Micro Strategies office in Rockaway, NJ. There were 141 coderetreats worldwide, with about 2500 participants.
In a coderetreat, participants work together in pairs on a programming problem named "Conway's Game of Life". Every hour or so, participants delete their code, exchange partners, then code once more. There are typically 5 or 6 of these sessions within a coderetreat. Each session will have a different set of constraints imposed upon the participants, which push them to think and use different techniques. Participants are not expected to solve the problem, only to keep a primary focus on their coding approach and technique. This is the time for people to try to write perfect code.
Here are my top five reasons to participate in a Coderetreat:
1. Appropriate for All Skill Levels
A coderetreat is a very inclusive gathering. Experienced and junior programmers can code side by side and learn from each other. Junior programmers learn and practice a lot of new techniques. Experienced programmers get to hone their skills. No matter the level, everyone will better themselves at a coderetreat.
2. Pair Programming
All coding in a coderetreat happens in pairs. It is a great way to introduce pair programming. Most developers are used to the concept of pairing when they need help debugging a serious issue, but not as a general practice. Many of the constraints used within a given session help participants grow their pairing skills.
I used to feel overwhelmed at the potential hurdles of pair programming. How do you prevent the more experienced coder from taking over the keyboard? Does pairing mean that you need twice the number of people to work on a project? How many hours of the day should you be pairing? Attending a coderetreat will give you the tools to answer these questions.
When used, techniques like 'Ping Pong Pair Programming' provide a structure that prevents one person from monopolizing the keyboard. I still believe there is an additional initial cost in people or time in pair programming, but it's not double. I also believe it produces higher quality code that lowers the cost of maintenance.
The great thing about a coderetreat is that there is a pretty good chance you'll meet someone who has real world experience in pair programming, and give you advice on how best to leverage it within your daily working life.
3. Test Driven Development
I am a big believer in the benefits of Test Driven Development (TDD). Coderetreats introduce beginners to the concept of TDD, and allow more experienced programmers to refine their approach. Many of the constraints in a coderetreat focus on helping developers author tests that clearly describe their intent, which helps clarify the implementation to be coded.
One constraint (known as Baby Steps), has the pair write a test, its implementation, and refactor the code within a specified timeframe (i.e. 5 minutes). If they can't complete the cycle within that timeframe the pair needs to delete the code and try again. I find this exercise to be great practice for real world coding. If you can complete a test cycle within a few minutes, you can commit your working test & implementation code into your version control system. This allows you to get feedback on your changes quickly. It also allows you to walk away from the code at any point, and pick it back up later from a working state.
4. A Community of Professionals
The Software Development profession is in its infancy. In many ways, it is difficult to label it a profession. There is no mandatory qualification, nor is there a generally accepted learning path for entry into the profession. There is a low barrier to entry. A self-taught programmer can quickly learn enough to build working software and be considered a professional.
Coderetreats focus on enabling programmers to augment their skills and code professionally. Participants learn important concepts such as the Four Simple Rules of Design, SOLID Design Principles, Law of Demeter, Test Driven Development, and Pair Programming. The atmosphere of a coderetreat encourages everyone to treat programming as a craft that requires skill, practice, and a focus on quality. All attendees at a coderetreat are giving up their free time to practice their craft. Given that most participants are looking to better themselves, there is a common goal shared by participants. A coderetreat is a great place to meet like-minded professionals that really care about the quality of their work.
"We are what we repeatedly do. Excellence, then, is not an act, but a habit."
Practice makes perfect. There is nothing like learning by doing. Experiential learning is one of the most beneficial ways to gain mastery in a given subject. In a coderetreat you have the opportunity to practice many coding techniques. You can also practice coding in different languages, even languages you are not familiar with. It is by attending a coderetreat that I learned I should practice my IDE shortcuts to be quicker on the keyboard. I also started to take katas more seriously as a way to become more proficient with new things.
I've worked in consulting organizations for the past 15 years, and have at times struggled with all of the above items. If you are new to Test Driven Development or Pair Programming, there is a natural skepticism to investing your time and energy to understanding their benefits. I've always believed that taking time to practice is a good thing, but had rarely taken the proper time to do so.
Coderetreats provide a risk-free venue to explore these concepts without impeding your actual work life. Coderetreats have helped convince me of the importance and utility of these concepts, and introduced me to a wide range of people who take professionalism and software craftsmanship seriously. Every coderetreat I have attended has been a personally worthwhile experience, where I have learned many lessons, and enjoyed doing so immensely.
For more information on Coderetreat go to http://www.coderetreat.org.