It’s been about a year since I fell in love with coding. Since then I’ve built numerous projects, completed over 1000 hours worth of coursework on Free Code Camp, and accepted my first internship working at Braintree in San Francisco.
Although many people have achieved similar successes without too much effort, I think it’s important to note that I’m currently majoring in chemical engineering at Bucknell, a school consistently ranked outside the top 50 programs for computer science.
A little over a year ago, I walked into my first tech interview. The recruiter was from Microsoft, and he was holding an open on-campus interview session. I remember sitting down for the interview, completely naive to the type of questions he would ask me.
After a quick introduction, he asked me, “How would you reverse a linked-list?”
I paused in an attempt to contain my nervousness, before giving him my vague and clearly fabricated answer. A few minutes later the recruiter thanked me for my time.
I left feeling simultaneously embarrassed for having wasting his time, yet exhilarated by what I’d just experienced.
I couldn’t believe it. They actually cared about my technical ability to code!
It was so refreshing that companies were able to look at something other than my GPA, which school I went to, and my ability to talk your way through behavioral questions. The companies I interviewed with didn’t seem to care that that I was majoring in chemical engineering. They just wanted to see whether I could code.
From there I got to work. I sent out nearly 100 applications over the next month. I was willing to take any opportunity available. As of January, I had received nothing but generic rejection emails. Not a single interview!
But I couldn’t really blame them. I was a chemical engineering major and my only relevant experience was taking two introductory computer science courses. So I decided my best option was to accept a summer research position in my school’s chemical engineering department.
photo by Sai Kiran Anagani
On the outside, it felt like I was giving up. But in actuality, I was doubling down on my new found passion for programming. In my head, I vowed that next year would be different.
Over winter break, I worked my way through an Android programming course on Udemy. I started devoting way more time to my Computer Science courses. Once summer break hit, I was off to the races.
Putting in the work
I knew from the year prior that I would need to build some projects on my own in order to get an interview. I also knew that I would need to get good at coding and algorithms questions so I could pass my technical interviews.
I used a simple but effective pattern to improve the areas where I was lacking:
- Set a goal related to what you want to learn.
- Find the best learning resources available (within your budget) for this subject.
- Set a consistent schedule to make use of these resources.
A real example of this for me during the past summer looks like:
- Build a quality portfolio of web apps
- Free Code Camp is free and pretty awesome
- Code every day, either in the morning or after dinner
One of my earlier projects, a pomodoro clock
I applied a similar practice to improving my technical interviewing skills using Cracking The Coding Interview, Pramp.com, and Leetcode.com.
Coding Every Day
During the summer, I made a point to write code nearly everyday. Most days I would wake up thinking about my current project, excited about the features I would be working on. But there were definitely some exceptions.
“Amateurs sit and wait for inspiration, the rest of us just get up and go to work.” ― Stephen King
On these days I would usually force myself to code for at least 30 minutes. Most of the time after the 30 minutes I was immersed and happy to continue. But if not, I gave myself complete permission to stop and move away from the computer for the rest of the night.
I also made a point to spend every Saturday or Sunday off campus in nature with friends. As Cal Newport talks about in Deep Work, spending time in nature away from technology has been shown to have rejuvenating effects.
The article didn’t seem complete without a sweaty picture of me doing a headstand in the alps
It’s also worth noting that I took two weeks off from work and coding in the middle of the summer to take a family vacation hiking in the alps.
From the end of May until now, I’ve pushed code to my GitHub more than 250 times.
By the end of the summer, I had built 21 new front-end websites to show off. I knew I had a shot at getting an internship. But with chemical engineering at the top of my resume, I was scared I wouldn’t be given a chance.
I brushed up my resume to show off my new projects and got feedback on /r/cscareerquestions. I made a spreadsheet to keep track of where I had applied, and my application status.
On August 20th I giddily sent out my first application to Belvedere Trading. It seemed laughably early, but I was not about to make the mistake of applying too late like I did the year prior.
An entertaining “zombie shooter” game I built with a few friends
A week later they sent me a coding challenge. I aced it.
We scheduled a phone interview a few days later.
The day after that, I booked a flight to Chicago for my first ever on-site interview.
I slept less than 4 hours the night before the interview — both out of anticipation, and fear of missing my 8 a.m. flight.
When I made it to the office for the start of the interview, I met a handful of other students who were interviewing the same day. I scanned their name tags: Carnegie Melon, Cornell, and UMichigan. Did I really belong here?
The next afternoon I got an incoming call from Chicago. They wanted to make an offer.
For the second night in a row, I could barely sleep — this time out of excitement. Just a few weeks prior, I had been nervous that I wouldn’t be able to find anywhere to intern. And now it was only mid-September, and I already had an offer.
But I wasn’t done yet. I had recently read Haseeb Qureshi’s article on salary negotiation and I decided to take his advice. I cold-emailed a few of my “dream” companies and let them know that I had just received an offer, but that I would rather work for them.
A few days later, a recruiter at Braintree responded to my message. A similar process ensued: coding challenge -> phone interview -> another trip to Chicago.
It didn’t hurt that the office was pretty sweet…
In my taxi from the office back to the airport, I got another call. They wanted to extend an offer. I accepted shortly after, and negotiated to work at their office in San Francisco.
Lessons learned along the way
Lesson #1: I didn’t get the internship because I’m a genius, or a naturally gifted programmer. I got it because I put in the time and hard work.
A non-chemical engineering major who was passionate about chemistry could have gone through a similar process to my coding regiment and become a better chemical engineer than I will ever be.
If you start focusing on things you enjoy, you’ll have a huge advantage over everyone else.
Lesson #2: Don’t be afraid to set goals that seem out of reach.
Bold goals are exciting. The rush you get when taking action to reach your goal will far outweigh the downside that you might not reach it. Even if you fall short, you will get further than you would have otherwise.
Lesson #3: Try something new.
I had no idea that I would fall in love with programming a year ago.
Be willing to take a chance and try something out of your comfort zone, you just might find something you love.
Some resources I’ve found helpful
- Software Engineering Daily — My favorite podcast for keeping up with new trends and topics in software.
- Choose Yourself by James Altucher
- Deep Work by Cal Newport
- How to Break Into the Tech Industry by Haseeb Qureshi
- CS75 Harvard Lectures — an introduction to how the internet works and scalability issues (especially useful for systems design interview questions).
A massive thank you to all of the people who helped me along the way, and to you for taking the time out of your day to read my article.