Mon, Nov 24, 2014 

My year as an apprentice software engineer

The unlikely programmer

Music theory was my ‘thing’ from the time I was 10, so naturally that’s what I studied in college. Years later I found programming and, realizing a better thing when I saw one, I switched ‘things.’

After attending the Institute of Whatever the Search Results Contained for a couple years, I decided to ask for help. I went to a meetup: Indianapolis Code and Coffee (SoHo Cafe, Thursdays at 7am). Circumstances quickly got out of control and I ended up applying to SEP to work as a professional programmer.

They looked at my qualifications, and finding none, they looked at my skills. They said “hmm” and then they said “okay, but he’s definitely not a Software Engineer 1 yet.” So they gave me the title of apprentice. It said “Apprentice Software Engineer” on my business card but it said “Software Engineer 0” on my email signature because I thought it was funny.

Some might have seen this title as an insult: “Let’s call him ‘n00b’ and hurt his feelings.” I received it with joy; it was permission. It was permission to learn and grow. I guess it did take some humility to be told I didn’t know much, but it was the truth (I may have mentioned it in my interview). My goal in applying to SEP was to learn, so really it turned out better than I could have hoped: I was the company apprentice and I wanted to make the best of it.

What apprenticeship meant to me

This is the part of the story where I say that being an apprentice wasn’t easy, but I’ll save that for later because primarily it was awesome. “Apprentice” means “patience please, he’s busy learning.”

Being apprentice told me that I was not expected to be doing SE1 level work (though I certainly tried), I was supposed to be learning enough to eventually do SE1 quality work. In fact, I took it as my default position to err on the side of learning rather than doing. What’s the point of doing a lot if it’s wrong?

Being an apprentice also told everyone else in the company what expectation to set for my work. Perhaps for some people it set them too low (not really sure), but I’d rather impress than disappoint. SEP has a very supportive environment regardless of title, but it was still intimidating for me to join knowing I was basically the one engineer without a computer degree. Being called apprentice reduced a lot of stress, especially in the first few weeks. Apprenticeship functioned as a plea for help: “I don’t know this thing, please teach me.”

Lastly, it was an implicit commitment from the company to help me succeed. They didn’t hire me to watch me implode (I assume). In my year of apprenticeship I was put on teams that really helped me grow and learn. My teammates were excellent mentors: patient, encouraging, and most of all, really skilled. I secretly suspect that my manager did this on purpose (thank you) because it totally worked.

Learning on the job

My first project was an internal experience tracing tool called Chops built in Ruby on Rails. Matt Swanson, the lead, taught me about pair programming, unit testing, git, and kanban-like project tracking. It was boot camp, and I came out of it feeling way more confident than when I went in.

My second project was Planet, a feed aggregator web service for all internal blogs and announcement sources at SEP. It gave me something at the company to ‘own’ and benefit the entire company. In reality it’s a pretty small time app, but I like that there’s something I can remember to myself, “See? I’m helping.”

My first client project was an Android app for a local credit union. This was the defining experience of my apprenticeship. We did an awesome job on this project. We knocked it out of the park. We killed it. We rocked. And I got to be a part of all that: coding, sharing, building, deciding. I got to program, refactor, test, pair, discuss, get upset about a bug, go for a walk and come back with the answer. I got to give input in retrospectives, share at standups, and ask questions all the time. I got to help set up a build server, create a testing document, fill in missing integration tests, and watch the rows of test devices spring to life running my code. I got to push a broken build to master minutes before going home for the day. I got to be told never, ever, as-you-value-your-sweet-life ever do that again. I got to change, to learn and grow and become a real software engineer. Thank you to my team: Matt Terry, Matt Swanson, and Aaron Milam. Big thank you to Kyle Pinches, our project manager.

Tips for other apprentices

I may have only been an apprentice for a year, but the journey still stretches far ahead. I plan to continue to apply the lessons I learned during that year for the duration of my career. Or, at least, as long as they continue to work.

If anyone is wondering, here are some tips for a successful apprenticeship. Remember: a successful apprenticeship is largely your responsibility.

Ask questions.

Don’t be afraid to look dumb. Of course you shouldn’t ask stupid questions, but many questions that seem stupid are really just basic question. Ask them, because if you don’t understand the basics you haven’t got a chance with anything else.

Try new things.

This shouldn’t be on the list since learning is the whole point of apprenticeship, but it can be tiring to always live on the edge of your skill level. Don’t succumb. It’s okay, when discouraged, to do something you know you can crush. But once you’re feeling better, go back to pressing for more. Not to spoil the ending, but get used to trying new things. All the senior programmers I know are still expanding their skill.

Claim one area to ‘own’ and become the team expert.

As a beginner it can be difficult to make a real contribution since everyone else is so much more skilled. Then you feel useless. Find somewhere that you can be useful and prove your value and take responsibility for it. You may hate to hear this, but these opportunities are often considered boring or not fun. There’s less competition for doing those jobs and if you volunteer everyone will like it. Documentation is an obvious one. Sorry, but it’s a good tip.

Work really hard but try not to show it.

What I mean is, don’t complain. Accept that it’s going to take you a lot more time and effort to do things the others think are simple. But don’t complain that it’s so hard. Your experienced coworkers were beginners once and they made it through. Of course, don’t take this that you shouldn’t ask for help: you should, all the time. It’s your job as an apprentice. But inquire, try to understand and work really hard, don’t whine.

Be involved in the community.

The entire point of an apprenticeship is to learn from others. Don’t sit in your cave coding; interact with other developers. And relying on just one mentor isn’t enough. The more mentors you have, the more idea and advice you’ll hear. Diversity is good. Plus, leaning on only one person will wear them out.

Get code reviews and pair.

You want more than just ideas: you want genuine feedback. Code reviews and pairing are ways to get an experienced programmer to comment on your particular work in a particular instance. It’s concrete and it’s personal. At first they will find lots of things you can improve, but you’re new. You want to them to find the bad stuff so you can stop doing it. Remember to ask, “Why?” so you can understand the reason the issue was an issue. The goal is to see the amount of ‘negative’ feedback decrease and the positive comments abound.

Share what you know.

It seems weird advice for an apprentice, but there’s always someone who doesn’t know what you know. Help them. They may even be more experienced than you and never had that situation yet. Or you might give them a new perspective. At the very least, sharing thoughts helps you to clarify and organize your thoughts: something an apprentice desperately needs. Sharing knowledge is good, get in the habit early in your career. I wish I had done this more.

The end

Ultimately, I think an apprenticeship’s success is directly the responsibility of the apprentice. No one is going to sit you down and feed you delicious knowledge from a spoon: they’re busy doing their own work. But if you ask them about something, if you work daily alongside them, they’ll normally give you years’ worth of hard-fought insights for free. That’s a bargain.

So anyway, I recommend apprenticeship. 5 stars.