This summer, July through September, I completed a summer internship at Unboxed Consulting - a Rails Consultancy in London. I had a really incredible time and was lucky enough to be invited back. I really can’t wait for next year.

Here are some of my key learning milestones from this summer.

CSS Selector Weights

Okay, I really ought to have known this before arriving in London. When I first started out I was mainly working in the front end and this was a pretty crucial first lesson! Before mid July of this year I didn’t know exactly how #id > .class > tag fitted together. Looking back I didn’t really know at all, and now I do.

Git Branching & Re-basing

I knew how to create a branch & how to merge them - I also understood that new code should happen in a new branch, but that was pretty much about as far as my git knowledge extended. I quickly learned about how different levels of branches related to one and other and how these were used when deploying code. I checked out my first feature branch, opened my first Pull Request and completed my first code review. I’d like to see this knowledge and strategy being particularly useful this year on the group work software engineering project.

Re-basing code was also a new one for me, I’d always just assumed that messy merge commits were a necessary evil in the history - it seems this is not the case! Being able to work on a longer running feature branch and regularly stacking those changes on a new copy of master or develop became a really great tool.

Slower Coding ∴ Massively Better Code

This is really pretty darn obvious but I still think it’s worth mentioning. I’d worked semi-professionally on Rails applications before starting my internship but only at Unboxed did I learn to think about my code in an entirely different way. Before, when cramming for a student deadline I’d never bothered with code quality/readability, it’s just not really a big thing in student code. I’d never really had code reviewed in greater depth than: ‘It works’ before. And that changes everything.

Being given the time to improve and really think about my code was a really great learning experience. After a few months of this I’ve been a lot less trigger happy and have spent a great deal more time looking into best practices and refactoring my code before calling it done.

TDD

Before using Test Driven Development in a pairing context I’d never really understood even the basic motivation behind TDD. It took a long time, but towards the end of my time at Unboxed while pairing on a client project I finally understood what it’s all about. I gave it a test run on a personal gem project of mine and it really does work, using vcr and guard felt like a breakthrough for me as a programmer.

Decorator Pattern

This is another thing that’s come up a lot this summer. Following on with the theme of thinking more about my code this is something I’ve come to use in my apps. The idea of separating view logic into a separate presenter class to make a lot of sense - before I’d just never really thought about it. The Destroy all Software screencasts have been really great at teaching me how best to set this up in fresh projects.

This summarises the key lessons I took away from this summer, there are many others that are smaller or hard to put in words. It was a really great experience, the team at Unboxed were a real joy to work with - I was made to feel extremely welcome. I just can’t to get back into that world.