My first Coderetreat
Tags: growth, event, coderetreat, meetup
Published: 2019-11-17 11:58:00

**This Saturday I attended my first [Coderetreat](https://www.coderetreat.org/) and I had a great experience attend. Unfortunately it is an annual event, so if you missed it this year you have to wait one year. 😩**

# What is Coderetreat?

> Coderetreat is a day-long, intensive practice event, focusing on the fundamentals of software development and design. By providing developers the opportunity to take part in focused practice, away from the pressures of 'getting things done', the coderetreat format has proven itself to be a highly effective means of skill improvement. Practicing the basic principles of modular and object-oriented design, developers can improve their ability to write code that minimies the cost of change over time.

Hard to add anything to this, it's a pretty good summary of what we were doing all day. We tried to implement ([Conway's Game of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life)) in pairs over five 45-minute sessions. Working with a new pair in each sessions, ideally using another language and - after the first warm-up session - adhering some extra rules... 

For each session we had _4 rules of simple design_.

- My code pass all tests
- My code express intent
- My code doesn't have duplications
- My code is small

I am sure most of the coders implemented Game of Life at early career stage, [here's](https://ivan-gol.herokuapp.com/) mine from a few years back, using React and generating the board as an SVG... Not very effective I guess.

![](https://media.giphy.com/media/3ohs7KViF6rA4aan5u/giphy.gif)

# The first sessions

The first session was about learning the rules of the game, get comfortable with the environment. I used my main language - Javascript - in the first two sessions, but we had very different approach.

In the first session we had a board with a limited size, and we stored the board in a 2D array. Every cell was a string - either 'empty' or 'alive'. 🤯 Well, it was a warm-up session... 

In the second session we wrote a class and passed the coordinates of live cells to the constructor as pair of numbers. We treated the board as infinite, so we just iterated over the living cell in the _step_ method to decide the cell lives or dies in the next generation. 

In the second sessions we had to follow an extra rule form a list. E.g. no mouse, text editor only, use REPL. We chose _ping-pong_ - one person writes a test, the second one the code, then the second one writes a test and the first one writes the code. 

![](https://media.giphy.com/media/WSuJXoyJaKdvW/giphy.gif)

# Third session

In this session I worked in Java and Groovy for writing test. Apart from a small code challenge for a job last week, I have not used Java for 3-4 years and never touched Groovy. I cannot remember which extra rule we followed, but the biggest challenge was getting used to my pair's [Ultimate Hacking Keyboard](https://ultimatehackingkeyboard.com/). I must say it is a great keyboard, I liked it, but using a Windows labeled keyboard on a Mac without a mouse extension... It was really challenging. He suggested many times getting a normal keyboard for me, but I refused. 

# The last two sessions

In these session we cheated a little bit as I worked with the same pair and we did not delete the code after the forth session. As I want to learn Python I was happy to work in it and we just bumped into a problem that both of us wanted to solve. In the forth session we followed [Object Calisthenics](https://williamdurand.fr/2013/06/03/object-calisthenics/). At least we tried...

In this sessions we also treated the board as infinite. We were very close to fully implement our step method, even checking the neighbours of the living cells if they can come alive having exactly three neighbours.

# Conclusion

It was a very good day with lot of fun. It was good to meet nice people, doing pair programming with them. I believe I learned a lot about how to approach problems, it was good to do some coding in languages I hardly or never use. I was thinking about learning Python and after doing two sessions in Python I am definitely going to do it by the end of this year. 

About 50-60 people came, we formed a big circle at the end and shared our thoughts about what we learned, if there was anything that surprised us during the day.

I recommend everyone attending Coderetreat next year. As it is a global event, anyone can easily find an event nearby. If not there are virtual events where coders usually use VSCode Live Share to do pair programming.

Thank you for [Codurance](https://codurance.com/) for hosting us. Big kudos.

---
Thanks for reading it. Happy coding. ❤️

Say hello. 
[LinkedIn](https://www.linkedin.com/in/szib77/) | [Github](https://githib.com/szib) | [Instagram](https://www.instagram.com/szib77/)