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.
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.
- 05/11/2017 I submitted my resume on Facebook Careers.
- 08/21/2017 I was contacted by a Facebook recruiter and we setup the phone interview.
- 09/26/2017 Phone interview.
- 09/29/2017 The recruiter informed me that I passed the phone interview and we setup the on-site interview.
- 10/16/2017 On-site interview.
- 10/23/2017 I was told that Facebook need an additional phone interview to decide on my case and we scheduled another phone interview
- 10/30/2017 Phone interview.
- 11/09/2017 Recruiter told me I was hired.
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.
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.
I did not have a CS degree, but I did read one algorithm book (Algorithms by Robert Sedgewick and Kevin Wayne) and finished several CS courses on Coursera and Udacity even before my first job. I would definitely recommend 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.
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.
In the first two weeks my preparation strategy was to bang my head on the questions. I tried to solve the questions by myself "organically". This was definitely not the right mentality. This approach was just too time consuming. And I did not learn too much since I just tried to solve those problems by myself.
After about two weeks I realized that there was just no way I can solve a significant amount of questions (300 was my goal) with my hard core strategy. I decided to read the solutions from leetcode forums. The leetcode forum is an absolute gold mine! The top solutions are very elegant, a lot of the solutions contain detailed explanation and some authors summarize and generalize for a class of problems!
After about one month, I realized that there are different topics for the problems, for example, dynamic programming, binary search, etc. I can cover more types of problems to go over each of the topics instead of just try to solve the problems by their index number which in hindsight seems sort of arbitrary. So I started to solve several problems from each topics.
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.
I would recommend Java if you are not familiar with C or C++ already. Here are the reasons:
- During my Facebook interview, the language did not matter. But it mattered for my Google interview. At Google, core languages, such as Java, C or C++, were required skills which I was only aware of at the last interview.
- Most of the folks working at the top tech companies hold CS degrees and more often than not they know Java because of their education. Using Java makes things easier for them.
- Spend less time stuck on a problem, get solution from the forum quicker (Spend 15 mins without any clue is a good indication to seek for help)
- Spend more time reading solutions in the forum since the best solutions are very elegant and worth learning even if I solved the problem my self
- Spend more time reviewing the previous solved questions instead of trying to conquer more problems, reviewing systematically and following a plan focused on the algorithms when reviewing instead of coding the solution again which is really time consuming
- Buy the subscription and use the categorization by company feature
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.
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.
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:
- system design interview
- coding interview
- lunch with a engineer (I was not evaluated during lunch)
- coding interview
- coding interview
- coding interview
Each interview lasted around 45 mins. The whole process was intensive.
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.
I did not prepare too much for the system design interview except went through this.
- One reason was that it would be hard to prepare for a very interactive, fluid and relatively high level conversation from reading articles.
- The other reason was that I have several projects under my belt. This interview actually went well for me.
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.
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:
- Be prepared. Having a plan is always a good thing even the plan did not end up working.
- Be relaxed. Getting rejected is really not a big deal. You may already had a job that you like. And you could always apply again. Do not get discouraged when rejected (And I was rejected by Google previously). There was a lot of luck involved including the interview questions, interviewers and the company's hiring plan.
- Be cooperative. The goal of the interviewer is to evaluate your capability as accurate as possible. Tell the interviewer what you think and listen for subtle cues when you get stuck.
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!
If you enjoy reading it, here is my blog https://trentyang.com/from-a-self-taught-developer-to-facebook/