Trent Yang

From a self-taught developer to Facebook engineer

2018-01-01 cover photo

If you are an experienced software developer without a CS degree like me, here is how you can get a job from top tech companies like Facebook.

Background

I had been working at Poetic Systems, a Houston based consulting company, for three years before I applied for Facebook. Here is my Linkedin if you want to know more about me.

Timeline

Find the right job

The job I applied for was “Software Engineer, Enterprise”. In my previous company, I was exposed to different kinds of web applications. One project I was really proud of was a custom enterprise application builder. And I thought my expertise on this area can give me a better chance since this project is relevant to what they are trying to hire.

Write a concise resume

Here is the resume I submitted to Facebook Careers. My awesome friend Jerry Shi at Google helped me a lot on my resume. One important thing I learnt was that my resume should be a one pager. Recruiters do not have enough time to go over every projects that I worked on. I needed to help the recruiter by condensing my value into quickly consumable pieces of info.

I have a habit of documenting projects I worked on on Linkedin. This helped me prepareing my resume. Also before in-person interviews I reviewed my previous projects in order to bring up interesting problems I solved and lessons I learnt. The preparation calmed me down and boosted my confidence. Both the recruiter and the interviewers asked about my previous experience on some level of details. Being able to talk about some interesting projects was definitely a plus for me.

Interviews preparation

Leetcode

Read an algorithm book

I did not have a CS degree, but I did read one algorithm book (Algorithems by Robert Sedgewick and Kevin Wayne) and finished several CS courses on Coursera and Udacity even before my first job. I would definitely recommened any software engineer to read an algorithm book especially when you do not hold a CS degree. This is not just tremendously helpful for the interviews, a software engineer absolutely need to know the fundamentals if he/her wants to develop decently complicated programs.

Preparation strategy

I mainly used leetcode to prepare for the interview questions since they have real interview questions. Geeksforgeeks is another website I used to understand the fundamentals of algorithm implementations.

I started preparing for the coding interviews around October 2016. Initially I was preparing for a Google interview around March 2017. It was a close call but unfortunately I did not get an offer.

There was a lot of back and forth from solving leetcode problems and brushing up my basic algorithm skills from re-reading the algorithm book. I felt it’s a harding process for my understanding of algorithms. When I first read the book and followed the courses, I never solved an extensive amount of algorithm problems with real code. The leetcode challenges felt a long over due exercise.

Algorithm training was a time consuming process. And I had a full time job to do and a new born baby to take care of. Luckily for me, my family were super supportive! My mother-in-law and my wife took care most of chores at home. I was really grateful!

I end up coding the first 400 problems more than two times in python and Java. As a result the coding problems in the interviews did not feel too hard for me. Some of the interview questions actually were very similar to those from Leetcode.

Code in Java

I would recommend Java if you are not familiar with C or C++ already. Here are the reasons:

What I could have done better

Talk out loud in interviews

Surely I could not have guess what the questions would be in the interviews, but I could prepare a strategy. One important thing to keep in mind is that the interviews are meant to evaluate your capability. And the best way you can help interviewers is to talk out loud. Whatever you are thinking, you should make it explicit. Coding correctly with the most efficient algorithm on a white board is very important, but conveying our thought process is also very valuable in an interview since this send more helpful signals to the interviewer, expecially when you are not doing very good at coding.

Interviews process

Interview from https://media.giphy.com/media/FcTdv3xQKhCIE/giphy.gif

Phone interview

Phone interview is a screening process. It seems Facebook use this interview to quickly filter out unqualified candidates. I was asked to solve a algorithm problem in a coding environment like Google Docs. This interview is not too changeling for me.

On-site interview

After I passed the phone interview I was invited to the onsite interview. Since I lived in Houston, I had to fly to Menlo Park just for the interview. Facebook scheduled and paid for the entire trip which was very generous of them.

Here is the schedule on the day of the on-site interview:

Each interview lasted around 45 mins. The whole process was intensive.

coding interviews

The coding interviews are similar to leetcode problems just on a white board. I thought I did OK on three of them. And for one of them I presented several non-optimal solutions but eventually was guided to the optimal solution.

system design interviews

I did not prepare too much for the system design interview except went through this.

Additional phone interview

The additional phone interview was rare. The reason for this interview was to gather more signals for the hire committee did not agree on the hiring decision. This interview was exactly like the first phone interview I was given.

Tips during interviews

It’s easy to be nervous when under pressure and the stake is high. I was more excited than nervous this time. Here’s what I did to reduce the anxiety:

Summary

I tried to document my experience of getting a job at Facebook. The process should be very similar to the other tech giants. It would be my pleasure if you can get any value out of this post. Never stop improving!