Miloš Hadžić wrote this on October 21, 2011

Apprenticing at Rendered Text

I’ve kinda fell in love with Ruby after several love affairs with different languages. Somehow it just felt right both for reading and for writing. So I’ve set out on a mission to write a lot of Ruby code over the summer. Luckily, the guys from Rendered Text needed help of an eager new rubyist and I needed a place to work with Ruby so that I can “get it into my fingers”. I was really excited because I knew they weren’t locked in into some old legacy software system but were open to whatever works, new or old. I also knew they were into software crafstmanship which is a movement in software development that I really like.

Tortured apprentice.

Since I live in Belgrade and the Rendered Text office is in Novi Sad, the deal was for me to work remotely and occasionally go to Novi Sad for a few days. I had my first week in Novi Sad, mostly pairing with Darko.

Pairing

In the first week, I paired with Darko on some Ruby code. I was happy that it was pure Ruby and not Rails because at the time my Rails knowledge was rather weak. I’ve only just read The Ruby on Rails Tutorial book and I thought that I would be useless as a pilot or copilot. That turned out to be wrong and I was surprised to actually be useful. Maybe if it were Rails code I would have done worse, but probably not that much worse. Even if you don’t know the code, you’re still useful in a pair programming session because you review code and ask questions about it as it is written.

Pairing is also a great way to pick up editor and workflow tricks. I know I’ve picked up quite a bit of vim and git tricks from Darko. I think he got a few from me as well.

Code reviews

We use GitHub’s pull request feature quite a bit. Most of the time when I wrote a piece of code that isn’t trivial, I would open a pull request and either Marko or Darko would review it. This is by far where I learned the most. Writing some code the way I think it should be done and then getting detailed feedback on how it can be done better is invaluable.

Reading

Before I even started I needed to get up to speed with the tools used at Rendered Text, mainly RSpec, Cucumber and Rails. Marko and Darko suggested The RSpec book and The Ruby on Rails Tutorial. To this I would add Apprenticeship Patterns. I probably should have read it earlier in my apprenticeship.

I wanted to read as many books, articles and blog posts as I could, but there’s only so much you can read in two months. It’s great to be able to discuss what you read right away with people who have way more real world experience. Especially as I got interested in object-oriented design. I would come in and try stuff I read about in a blog post or a book and could get feedback or even a discussion going.

BDD

Pretty much everything done at Rendered Text is developed using Behaviour-Driven Development. I was already sold on TDD before I arrived but I needed to acquire a taste for writing acceptance tests with Cucumber. At first I really sucked at this. It was hard for me to write good scenarios. Fast forward a few months, I still suck at it but a little bit less. An area to improve I guess. Reading the RSpec Book’s chapters on Cucumber helped. I’m planning to read through the new Cucumber Book, and I hope that’ll help as well.

Working remotely

While it was super nice to work at the Rendered Text office, most of my work time was spent at home. We use Campfire quite a bit and also Pivotal Tracker and Basecamp. Campfire is super cool, kind of like irc on steroids.

Tools aside, working remotely has some benefits but also some not so trivial downsides. The biggest benefit is that you don’t have to commute to work. The biggest downside is that it’s sometimes much harder to “get in the zone”. Pomodoros can help with this.

What I did wrong

I think the biggest mistake I made was not reporting that I was stuck soon enough. Several times when I couldn’t do something that I assumed was simple and that I could “figure out”, it turned out to be far from reality. I would spend a lot of time without anything to show for it. To make matters worse, it was usually something that would take a few lines on Campfire to resolve. In hindsight I really should have asked for help as soon as I got stuck. Asking on Campfire isn’t as attention stealing like tapping someone on the shoulder and If someone knows it, you usually get an answer pretty quickly. If it turns out you can figure it out yourself, you just update the Campfire channel and there’s way less time wasted.

Conclusion

This was so far the nicest part of my working life. I’ve learned a lot, had quite a bit of fun and met really nice people. I’m also very happy that I’ll continue to work for Rendered Text.

To any aspiring software crafsmen, I cannot recommend apprenticing highly enough.

comments powered by Disqus


Suggested Reads

Inject is a fundamental building block

Inject is one of the fundamental, and most versatile constructs available in functional languages. It can be used to implement map, select, max, all? and a bunch of other iteration related methods. Unfortunately, many programmers are not aware of its awesome powers. This article is here to improve this fact.

Contact

Rendered Text is a software company. For questions regarding Semaphore, please visit semaphoreci.com. Otherwise, feel free to get in touch any time by sending us an email.

Rendered Text
Svetozara Miletica 10
21000 Novi Sad
Serbia