How To Become An Apprentice Developer

posted 11 November 2012

As an experiment in self-education, I deferred admission from university to teach myself how to code. I moved to San Francisco and took a nine week coding bootcamp. After that, I interviewed for three weeks and got four job offers and a contract offer on the forth week. I took a position as Carbon Five’s first apprentice. It’s been an amazing ride and the hardest thing I’ve ever done. Here’s what I learned.

Start With Hustle

App Academy had a full shower, a couch, and a Whole Foods nearby. So I lived at the office to get my burn rate down to about $20 / day for those two months. After App Academy, I crashed in the living room of a garage converted into two rooms at a Palo Alto hacker house. During the job hunt, I had ecstatic times where people were competing over me, and I got that hit of validation. I also had disheartening days where I didn’t know where I was going to live, doubting myself, and being universally rejected.

These experiences forced me to get clear on my motivations. On your journey, you must be able to take action and adapt, to do whatever it takes. Most people are unwilling to do this. That’s what’ll make you stand out from every other resume when you approach. This kind of hustle is the foundation.

Constant Networking

On the last day of App Academy, demo day, a bunch of companies came in to speed-date interview us. They were all nice, and a few were promising, but I didn’t get any leads out of it. My interviews came from networking: strategically meeting the right people.

I started off with going to interesting meet ups. I wanted to surround myself with smart, cool engineers and entrepreneurs with the power to make hiring decisions. With this in mind, there are lots of meet ups that were a waste of my time. ‘Networking’ events empirically sucked. Events where I’m volunteering and teaching someone else, or someone’s teaching me something were really awesome and useful.

At interesting meet ups, I focused on connecting with cool people. I started off trying to sell myself to everyone. But approaching people in this value-sucking way was awkward and ineffective for me. Connecting with cool people was much more natural.

Most smart engineers and entrepreneurs that I met were disarmingly humble. I couldn’t pick them out of a crowd at first glance because they weren’t talking about themselves. The key to meeting interesting people was to become interested in others. This made it easy to separate people who were building cool stuff from people who were bored and boring.

So you’ve gone to cool meet ups, met cool people, you’ve got a ton of business cards and lukewarm contacts.

Creepy ‘entrepreneurs’, boring monotone developers, and independent recruiting companies were the biggest waste of my time. Avoid them like zombies. Strategically, relentlessly follow up with the right people.

Give yourself a personal advantage by focusing on going from a high noise environment to a low noise environment. Think of it like a funnel. There’s a lot of noise in a cold email through a jobs page, less noise at a meet up, less noise at a private party, less noise through a warm introduction, less noise through a phone call, and undivided attention through grabbing coffee.

I much rather preferred that I meet someone in person. I don’t have any credentials, so I don’t look good on paper. Pushed for in-person, informal chats over coffee over phone screens. Push for building test-apps over algorithm brain teasers.

Master Interview Strategies

After in-person coding interviews, I asked people what they were looking for. Here’s what they said:

  1. My ability to communicate concisely.
  2. How well I can break down one big problem into many small, well-organized problems.
  3. My ability to code.
  4. How fun it is to teach me.

To these ends, pairing was the most valuable thing I did at App Academy. It taught me how to communicate clearly, how to share a keyboard, and how to be wrong and learn. The after-hour talks that Ned gave on algorithms turned out to be most of the CS theory I’d need to solve interview problems. I took some notes here.

I combined what I learned at app academy with side projects and practice sessions with other people. We went here for practice resources:

http://rubykoans.com/ http://testfirst.org/learn_ruby http://www.zerocater.com/challenge/ http://www.tektalk.org/wp-content/uploads/2012/10/CrackCode.pdf http://codekata.pragprog.com/2007/01/code_kata_backg.html http://projecteuler.net/problems https://www.dropbox.com/jobs/challenges https://www.interviewstreet.com/challenges/ https://www.hackerrank.com/ http://www.codechef.com/

Focus On Places That Are Good To Junior Developers

You don’t have time to waste on companies that are set against hiring junior developers. Ask them what they’re looking for in a developer. After I told my story and got to know someone for a bit, I asked:

  1. What are you looking for in a junior developer?
  2. What are your technology needs and goals?
  3. Do you think I can help you reach those goals?

Before I started using these, I wasted a lot of time early on with companies that either didn’t want to or weren’t able to hire junior developers. These questions give me most of what I needed to know.

Early stage startups usually don’t have the resources to train a junior developer. I talked to a lot of startups where: “Hugo, you’re a kick-ass guy. But our lead dev doesn’t have enough time to divert the focus to mentor you.” I got this over and over again from really early startups.

Large companies were inundated with candidates, and I was passed along to anonymous HR recruiters that expected credentials, and I was filtered out.

Large companies and two man startups were a waste of my time. I got a ton of rejections early on because I was talking to the wrong people. Then I changed focus to companies that were both able and willing to hire on growth. The middle turned out to be my sweet spot.

Sell Yourself On Growth

There are three ways to sell yourself:

  1. Input. What degrees and accolades do you have?
  2. Output. How much can you produce right now?
  3. Growth. How fast do you learn?

I had a special situation. I just got out of high school with no previous work experience and no credentials. But, I have the advantage: I started coding in June 2012 with the intent of becoming a professional. As a junior developer, my trajectory was more impressive than my skill set.

I sold myself on growth - my ability to learn fast.

I focused on my CV, and made my github my resume. I ignored most requirements on job pages. If I could solve the problems that position was aiming for, I applied.

I experimented with these things. I didn’t know how people would react. It turned out that nobody cared. All of my offers came from either unposted jobs or jobs I wasn’t ‘qualified’ for on paper. When I tried to compete on input, I lost. When I tried competing on output, I got more attention, but I still lost. The people that made me offers said that my trajectory and enthusiasm were what won them over.

Focus On Learning

For a hungry junior developer, your ability to learn fast and efficiently is your most valuable asset. If you can meet your basic needs, learning is a more valuable asset than a marginally higher salary.

Choose a place where you’re going to be surrounded by developers better than you that you can learn from.

If you can do this, you’ll absorb a tremendous amount in a short amount of time. This will make you exponentially more valuable as a developer.

That’s what it means to become an apprentice.