I. CodeRetreat Pécs
The first CodeRetreat in Pécs (I. CodeRetreat Pécs), organized jointly with András Fincza (main organizer of pécs.web meetup), was held on Saturday, 20 April. Here is a brief report for those who cannot come.
A few words on coderetreats in general
It is an internationally organized joint practice for programmers according to set rules. The event is usually held on weekends, taking a whole day from the morning till night. After the usual opening greetings and brief getting to know each other, the far from surprising task is announced: to implement Conway’s Game of Life according to TDD and Clean Code principles through programming in pairs.
The same challenge each time – hasn’t it become boring by now? The answer is “no”, at least according to my experiences. I have participated in two CodeRetreats in Budapest, and here in Pécs I was both an organizer and participant (we took turns with András in coding and supervising the event). It means about 15 implementations of the game during these three occasions.
So I have implemented the game 15 times so far yet there have been no two codes alike. How come?
One recommendation is that we should try to work with programmers we don’t know because we can learn the most from new people. We are talking about pair work, that is two people jointly decide on the interface, functions and responsibilities of the classes to create. And since different people (especially people working at different companies) think differently, it brings enough variability and change in the implementations. On the other hand, the organizers, apart from hanging around and drinking coffee, like to come up with terribly tricky and tough constraints for the participants.
What kind of constraints the programmers should meet?
One of the simpler ones are TDD ping-pong (one writes a test for the other member of the pair, the other then implements it and write another test for the first member, and so on) and the rule of “Avoid primitive obsession” (it leads to a higher level of abstraction through forcing the coders to avoid primitive types or wrapping them into a logically more expressive class – e.g. Cell as the class of living cells).
The more sophisticated constraints include the principles of “Tell, don’t ask!” (we can only write void methods) and “No loop” (we cannot use loops).
There are a wide variety of such possible constraints, making the coding challenging and different each time. Ultimately, these constraints can show the pros and cons of a given method and lead the coders to the right path.
My personal experiences
1. The organizers can also learn a lot
By helping the pairs during the sessions and looking at their codes, I could see much more approaches and programming languages than doing the coding myself. We also lead the retrospective meetings after the sessions so all questions were usually posed to us. From these questions I had to realize how many things I had not noticed before. There were problems I had never come across before. There were things I had already encountered saying to myself “this is how it is so we must do it in this way” and had never asked “Okay, but why is it so? Why cannot we do it in another way?” These are all good questions and we could not neglect them this time. We had to think about the “whys” and “hows”.
2. Self-confidence issues
I consider myself a natural introvert who can use some boost of self-confidence too. I have never “performed” in front of an audience and I have rarely been in situations where I had to explain someone something that I had known better or simply had more experience in. The thing that I had to speak in front of 16-17 people now was a rather new and clearly shocking experience for me. I was sweating buckets, my legs were all shaking but I knew that I had needed this experience. I knew that I could profit from getting used to speaking in front of an audience in many situations, both personal and professional. I must say, I got surprised at how well a fared. During the welcome speech and the first retrospective meeting I was stressed and full of stage fright but after that I gradually calmed down. By the end of the day the jitters had almost entirely gone and I was able to help where needed. I realised that just because I stood in front of the others it did not mean that I had to know everything. I could admit if I didn’t know something or I made a mistake, and I could ask help from the other organizers or from the participants. Of course, it is not the end of the road and I know that next time I will start with shaking legs again but I will know that it will go away soon.
3. Organization is a huge task
I asked my office colleagues to pack their stuff Friday afternoon so that we could receive the guests in a “mess-free” environment. I’d like to thank them for doing so! Yet, there were things that still had to be packed away or moved to the other room. I spent about two hours doing this Friday evening. Then during the night, I put together a short presentation and wrote down some thoughts to share or to pay attention to. I also printed out the name badges and info signs. It was 2.30 a.m. when I finally went to bed. After a rather short sleep, I got up early in the morning on Saturday so that I could arrive at the venue before the guests to put out the info signs and arrange some more things.
These were just the preparations, and when the event was over and the guests had left, I had to rearrange the room back to how it was for the start of the work on Monday.
The point is that organizing such an event takes a lot of work. From now on, I would respect the people who undertake these kinds of things even more.
One of the gains of CodeRetreat was the new connections, both personal and professional. We could meet people with similar professional motivations and interests. And in one’s life, connections are extremely important, especially good connections. They can come in handy at any time. Through them, we can get new supporters for our events, get motivation for our work and can spread our “fame”, increasing the number of our participants.
Summing up my Saturday, I can say that I learnt much, both professionally (programming approaches and technologic novelties and tricks) and personally (I have now more courage to speak in front of other people).
I got new acquaintances and gained useful experiences. By the end of the day I’d got all exhausted but I felt that it had been worth our toil. I enjoyed myself and the others felt the same, I think. I hope, I can meet you and some new guests again soon – the more the merrier! Once again I’d like to thank all those who helped us, who came, who supported us and those too who read my first blog post!