About five months ago, I accepted a job offer for my first developer job (an apprenticeship) and wrote a tweet about it. Last week, I accepted an offer to join full time as an Associate Developer. Here’s the full story:
In 2016 I was in a customer service job I hated, and I was giving a lot of thought about where I would go with my career. I originally moved to Chicago to become a comedy writer, but the comedy scene just dragged on me, and I got really burnt out. A buddy of mine had graduated from a coding bootcamp about a year before, so coding was always in the back of my mind. I wanted to do a bootcamp, but I absolutely couldn’t afford it. In November of that year, two weeks after my mom’s funeral, I got fired. It was truly an awful time in my life. Little did I know, getting fired was actually the best thing that could’ve happened to me.
In the meantime, I started a new job in January 2017. I was a temp for this company back in 2014, and they liked me so much that, when they needed a new receptionist, I was the first candidate they called. It was an EXTREMELY lucky break for me, especially because this job had a TON of downtime, which I used to study and work on coding projects.
At the same time, I started talking to a ton of developers at work to get a feel for what they do. I figured it would be really cool if I could move into development at the company, but I work at a proprietary trading firm in downtown Chicago, so I wasn’t expecting anything really. They usually only hire top new graduates and ultra-experienced senior developers with lots of Java/C++ experience. But I was glad I talked to people because everyone was really supportive. They gave me access to a Pluralsight license, which was just invaluable to my development. My company also gave me access to our codebase and my own Linux VM. To this day, I am still blown away by how ultra supportive they were.
I used my lunch breaks to study and work on projects. One day, I was approached by one of the data analysts who needed a VB script for excel. So I learned a little VB and wrote a macro for him to sort through spreadsheets. I told him to hit me up if he needed anything else. I started learning Python at the same time after having a meeting with one of the directors of development. I ended up writing a few scripts for that data analyst. Eventually, I wrote a web client that he could use to upload spreadsheets and get back a sorted reports. At some point later, I was approached by someone in development to help make a Git training course for our internal learning platform. It felt so good to get noticed a bit.
After about a year of programming I started applying for developer jobs. In the meantime, my company had started an apprenticeship, but when I asked about it, they were hesitant to let me apply. At the time, I felt that they didn’t take me very seriously and would probably never hire someone who was self-taught and had no experience.
I applied for jobs for about 5 months. It was pretty brutal. I got one interview with a friend’s company for a web support specialist position, but that went nowhere. I did some code challenges for a few other jobs, but pretty much every other one was a straight up rejection.
On the side, I was learning Elm and going to the local Elm meetup. I met a lot of great people who really inspired me. One of them suggested I use my programming skills to make my job easier. So using Elm and Python, I wrote an application for managing my company’s floor plan. As the receptionist, it was my job to know where all of the conference rooms and bathrooms are and where everyone seats. There are a ton of people at the company, so I wrote the app to make my job easier. After deploying a beta version of my app at work, people started to notice me and take me seriously.
Interviewing For the Apprenticeship
I talked to one of the recruiters about letting me apply for the apprenticeship, and after a ton of meetings with her supervisors and the CIO, they let me know they were very hesitant, but they would let me apply. They said they would give me no special treatment and that I would go through everything like any other candidate. They gave me coding challenge, and after I passed it, they let me interview.
I did a total of FOUR interviews with them: 2 behavioral and 2 technical. It was the toughest interviews I’d ever done. I prepared like crazy for the technicals, studying as much basic computer science stuff as I could. I’d heard a LOT of horror stories about whiteboarding interviews, so I was nervous, but I wanted this job so badly. Most of all, I wanted to prove to them that I could be just as good as any of their other candidates.
The whiteboarding interviews were really tough but also very invigorating. It was really cool to work out problems they gave me and talk through my solutions.
The next day, the recruiter pulled me into a meeting and told me I got the apprenticeship. This was the first big step in starting my career as a developer. Truly, a life changing opportunity. I have been in the apprenticeship for about five months, working super hard to learn as much as I could and be an effective contributor to the team. This is absolutely, the most difficult job I’ve ever had, and I love it so much.
I signed an offer to join the company full time as an Associate Engineer a few days ago. I’m still reeling from it all. This has been an amazing journey. I can’t believe how far I’ve come, and I can’t wait to keep going and see where my career takes me.
Friday was my last day as a receptionist. Starting tomorrow, I will be a real software developer. I am so happy. This was so life changing for me.
A little about the job: I’m be on a team that manages the developer/build tools and the deployment environments/pipelines. There’s a TON of domain knowledge within the team: I have worked on bug fixes and adding features to one of our big Python applications; I built/deployed our Python 3 environment on Windows; I’ve worked on upgrading some of our low-level C++ libraries and messaging applications; I’ve contributed code to some of our build tools; and I’ve also worked on some Java applications. That’s not even all of what my team owns or does, so I’ve still got so much to learn (I haven’t even touched our deployment/automation suite).
How I Did It
I’m blown away by the type of work I’m doing because it has very little to do with what I studied in FreeCodeCamp. However, even though I’m not doing much web stuff, the problem-solving skills I gained when I first started learning have been invaluable. I taught myself to code, but most importantly, I taught myself how to LEARN and SOLVE PROBLEMS.
Some people have probably been reading this and thinking, “Okay, that’s great and all, but HOW DID YOU DO IT???” One thing I’ve learned is that everyone is different. Some people need different kinds of resources. Some people need to be in a bootcamp/classroom environment. I only know what worked for me. So here’s a list of things I did that I believe contributed to my success in teaching myself to program:
- FreeCodeCamp. This was such a HUGE help for me. Having real projects that I could build was indispensable.
- Doing lots of code challenges on CodeWars. I did this every time I learned a new language.
- Reading job postings to get a feel for what skills I needed to get hired then learn those skills and build projects to solidify those skills
- Read LOTS of code and figure out how every piece of it works. A lot of times, I would clone a repository on Github and just fill it with comments explaining what every function/class/module does.
- Learned several languages. I didn’t start learning my second language (Python) til I’d been programming for like 9-10 months. I wanted to make sure my programming base was solid. After that, learning new languages came easier as I learned new ones and built projects with them.
- Built as many projects as I could. Whenever I learned a new language, I would build 2-3 projects to really get a feel for it. They were pretty much always the same projects (todo app, game of life, tic tac toe).
- There are a ton of web developer roadmaps online. I highly recommend checking those out. Those were a huge help for me.
- I tried to contribute to open source, but I honestly didn’t do much. What I DID do though was go through issues on some projects I liked and tried to figure out what was wrong. This goes with #4. Honestly, this is very close to what it’s like working as a developer. You get tickets for bugs/issues, investigate, then try to solve the problems.
I start my new position at the beginning of the year. I will be on the same team, so I’ll be doing a lot of the same work, but I expect I’ll be learning about even more of the tools we use and taking on more responsibility as an individual contributor on the team. When I first started about two years ago, I never could’ve imagined that this is how my life would’ve turned. I got incredibly lucky.
I hope this post helps anyone else who decides to take this journey or is already on it. I can say that it is BY FAR the most difficult thing I’ve ever done in my life, but it has been BY FAR the most rewarding.