With all the new years resolutions out of the way I want to share what (programming) skills I learned or revisited in 2012.
This will be more positive than looking back in a year and counting the things I promised but didn’t do.
I knew Ruby already, but it always was a very “Rails” type of Ruby. Working with Caius and Baz at EmberAds has brought this to a whole new level though. Writing modules, writing gems, extending classes, applying best practices, etc, all of those can seem daunting at first but they are oh so useful.
It also has had a great effect on my proficiency in Rails.
You can spot a good Rails programmer by their number of regular Ruby objects in their codebase
I don’t remember who said this but it really has started to ring truth to me in the past year. The Rails community has lately been alight with discussions about DCI, Concerns, Service Objects, Delegation and other ways of moving more and more code out of controller and models and into regular Ruby objects.
Testing code using RSpec
Learning to write tests has always been at the top of my list of things to learn but I somehow never got to it. Luckily Caius and Baz wouldn’t allow any code to go untested and it soon became a much loved practice. It is a hard skill to master though so I don’t blame my past self.
I think it’s a skill best learned by example and from a colleague. I still feel like I’m learning more and more about the intricate aspects though as it’s relatively easy to write a test that tests too much or too little. We’ll see where I am at the end of 2013.
Server deployment with Puppet
I used to love Heroku but it has its issues. Most importantly to me is the relative high cost of doing anything asynchronously in the background (e.g. using Resque). I always wanted to setup my own server but the last time I did this was ages ago and I had lost all the skills I had build up.
So this time I started over using Puppet. Like I said in my previous post, I’m not 100% sure if I like Puppet but it does do the job for now and has allowed for me to have a repeatable setup for Rails apps, allowing me to deploy a new Rails app (often a simple hack) within minutes (just like on Heroku).
Machine learning, algorithms, databases
Algorithms and AI already was a lot of fun at university but at EmberAds I finally got to apply a lot of that knowledge again.
So what lessons did I learn? Here are some:
- Not all databases are the same
- counting can be slow (on postgres)
- Redis is FAST
- bloom filters are FASTER
- VPS’s are expensive when all you need is memory
I really want to look at more specific databases and focus on honing my map-reduce skills in 2013.
Writing iOS Apps
Melinda and I have had an idea for a mobile app for a while and we both had tried to take up iOS development but we never never really got into it. In 2012 we found that The iOS Apprentice was the tutorial we were looking for and have finally started making progress to get our app out there.
Working remotely in a team on 1 project
One of the more subtle but definitely biggest changes last year was working in a passionate team on 1 project. I realise now that in the past few years I had rarely worked on 1 project with multiple developers. I know this might seem normal to some, but as a freelancer I’ve always worked with others but rarely many other developers, and in my time at Nudge we were mostly all working on different projects. It has been a real breeze being able to be in a team where everyone can pick up any bit of the code and improve or extend it and rely on everyone else to keep them to the same standards they would keep the other.
Non programming skills
Apologies to my friends on Twitter and Facebook for spamming them every other day to tell them I ran another X kilometres, but the truth is simple: sharing my progress helps to motivate me. Tracking and talking about your health seems to be a real factor in keeping the progress going.
Sadly I hurt my knee just after being able to hit a regular 5km. I now changed my training to prepare for a triathlon. I might even actually do one in 2013 as a sprint-relay with Kevin and Ruth. I would love to do a full sprint triathlon in 2013, but like I said, I wasn’t going to make any resolutions.
After years of postponing I finally did it and got my license. Sadly driving is really expensive for a new driver in London, and driving a rental isn’t an option either.
The plan is to sell the current car in August and move on to something like ZipCar. I did the math and it’s quite simple: my usage is so low that I can even rent quite a nice car for a week every so often to head to The Netherlands, and still come out with money saved.