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) 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
- 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 (I think lgtfy 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.
- 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, 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.
- Code reviews save lives.
One thing they do religiously at thoughtbot is 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.