---
title: How to make the most of an apprenticeship
teaser: Tips and hints for upping your big game.
tags: playbook,apprenticeship,git,testing
author: Alex Godin
published_on: 2011-08-31
---

Today is my last day as an apprentice at thoughtbot. I am incredibly sad to be
leaving but, at the same time I am jazzed about all the new stuff I learned this
summer. I thought I would share a few things learned about what my role was and
how to get the most possible value out of an apprenticeship on my way out the
door.

## What is this apprenticeship you speak of

> Apprenticeship is a way to learn about being a professional software
> developer. Specifically, it is a way to learn to be like the most skilled
> software developers you can find. It involves seeking out good teachers, and
> taking opportunities to learn by working alongside them. It is the first step
> on the road toward becoming a different kind of software professional—one who
> wants to be more than just competent.

--_Apprenticeship Patterns by David H. Hoover and Adewale Oshineye (a great
book for any apprentice)_

At thoughtbot my role as apprentice has meant that I worked on client and
internal projects. It was nothing like most internships: the only time I got
coffee it was for myself. Shipping code every day, even to production. I was
able to learn about the real world problems developers face and how
professionals like the folks at thoughtbot go about solving them.

## But, I can't get someone awesome like thoughtbot to take me on

An apprenticeship doesn't need to be formal. Go to developer events (if you're
in Boston checkout [Boston.rb](http://www.bostonrb.org)) and make friends with
developers. Once you are close with them ask them to take a look at some code,
ask if they'll sit down and pair with you on something you're working on.
Contribute to open source and learn from the comments on your pull requests
(thoughtbot has some great projects to get started on).

## I have an apprenticeship; how do I make it awesome

1. **There's no such thing as a stupid question, but google is your friend.**

My first few days at thoughtbot I posted every question I had in the campfire
chat. Why not? I had all these great developers around me I should ask them for
help. Then one day my mentor Harold posted the [guide to asking smart
questions](http://catb.org/~esr/faqs/smart-questions.html) (I think
[lgtfy](http://www.lmgtfy.com "let me google that for you") also showed up a few
times). While it may be true that there's no such thing as a stupid question
don't waste your mentor's time, google it first.

1. **Pair early, Pair often.**

One day I asked Harold if I could pair with him. He responded, _"Don't ask just
come sit down"_. Ever since whenever I wasn't sure what to do I would sit down
and pair with Harold. I think that I will miss that more than anything else. I
learned about some [crazy vim keybindings](https://github.com/hgmnz/dotfiles),
about elegant code, and about how to test drive development. Sitting next to
Harold and watching him code led me to ask questions I didn't know I had and
taught me new things about Ruby and Javascript.

1. **Code reviews save lives.**

One thing they do religiously at thoughtbot is [feature-branch code
reviews](https://thoughtbot.com/blog/post/2831837714/feature-branch-code-reviews).
This meant that every line of code I wrote was looked at by other developers.
This not only caught my mistakes, it also taught me about best practices and
refactorings.

If you ever have an opportunity like the one thoughtbot offered me, don't
hesitate, take it. This summer has been amazing, every day I wrote code I
couldn't have written the day before. I also got an inside look at the way
software gets built. I now understand user stories, TDD, wire-framing and a
myriad of other things.

It's been a pleasure working here.

Over and out.
