How I got my internship at Facebook

It is November 10th of 2020 and I finally got the Facebook internship offer I was looking for 2 years, and well... I am sad. Why? Because it was easy.

Let me explain what I said above. To get there I had to:

And those things are not easy at all, but what I meant, is that the discipline you must have is really simple: you must study.

From my experience I would say that there isn't any clear or specific path to follow and reach the internship, I will just tell you mine, then you can pick up your next move.

First try (Sept 2018)

My best friend told me about an acquaintance who got an internship at Facebook the year before and earned almost 16K USD, a US visa, flight tickets and an apartment sponsored and even a laptop, cellphone, bike and other stuffs along his stay... bla bla bla. It sounded like the dream offer to any university student, and it is, but I was focused in something else, I was flying to Poland in 2 weeks to do my Erasmus (academic exchange).

I went to the Facebook talk in my best friend's university, and they told me that my CV was bad (how to write your cv), but they were going to give a talk in my university (not in my faculty) the day after, so I went there with my improved CV and felt more confident. (Note: you don't need to go to a Facebook talk, you can just apply in their website or email a Facebook recruiter by LinkedIn).

At the end of the talk, I had the opportunity to reach my recruiter, I must say I love her so much, because she had faith on me since the very beginning, she was so cheerful and relax, she accepted my CV just by seeing my enthusiasm when I told her "I like to code, I made some projects..., I was in the math olympiad...".

After 5 weeks I got an email scheduling an interview. I was already in Poland and I though it would be easy, it was going to be just another easy coding test like printing stuff and coding random formulas (suuuuureeeeee...), so I started to studying the Python syntax (a certified python course, use mine as a complement) around 2 hours per day for my interview that was 2 weeks away...

The summary of my interview: the most embarrassing and shameful 45 minutes of my life so far. It was bad. The problems were not that hard, they were about recursive and trees, but I did not have a clue of how to answer them, I was just too dumb in data structures and algorithms. One of the biggest life-slaps ever for underestimating something.

Second try (Feb 2019)

After that, I didn't study for the following months until the next Facebook talk, when I reached my recruiter again and I asked her for a new oppotunity. Thankfully, she put faith on me once again. Then I was like again in the previous situation: "almost 0 coding knowledge and a month to study". So I started to learn theory and to solve problems in InterviewBit, because you can know how to code, but the skills for coding in university are not the same as that the ones you need for the coding interviews. You need to study in a website that focus on coding interviews. I solved like 5 problems for each topic and I felt ready (suuuuureeeeee...).

The summary of my interview: luckily, I did solve the problems, but I got a rejection email. I don't blame them, I did it just "good", but I didn't offer the "plus". And the way to be able to give that plus is simple: You must practice the interview. To practice it, you will need a friend who plays the role of the interviewer, he will ask you a problem and gives you a feedback on your mistakes and where you can improve (example).

Because you can know the theory, the problems, be able to hack the NASA, but you need to learn how to code as you explain your lines, you need to control your nerves, you need to manage your time and you need to practice it.

Third try (Sept 2019)

A year has passed since the first time I applied, I emailed my recruiter to ask for a new interview and she scheduled it (she is so lovely). After the last interview, I was kind of frustrated. So I decided to study more, I was solving like 3 problems per week, I read a lot, learned the topics, I practiced a lot and was feeling ready.

The summary of my interview: I solved the first problem but not the second one, it was just a basic algorithm that I didn't know... everything is affected by luck / probability / universe / randomness (explanation).

I learned something that month: you can play your best and still lose the game. Life is not fair.

Fourth try (Sept 2020)

Okay, after the last interview I was indeed frustrated, what sort of bullshit was that? What the heck do you want from me universe?

Well, I had to stand up and face the truth: "I was not prepared enough". So I went to LeetCode and started to solve a lot of problems and practice all the topics.

I wrote to my recruiter in February 2020, but I was not able to apply at that moment because of Covid. Too bad. Anyways, more time to get ready, so I keep learning and practicing. I bought the book "Cracking the Coding Interview", and I would say that its problems are ok, but the best part of the book is the first part, where it explains the reasoning behind the interviews, that will truly help you to give a plus in the interviews.

I thought I was good at coding, and then I reached the coding competitions... and you won't know how bad you are until you solve 1 problem in 4 hours and there is a random guy from the other side of the world solving the 4 problems in 30 minutes. There are a lot of people who started before you, trying hard and putting much more effort than you. So, what should you do? You must practice. At some point of their lives, that people were at the same level as you are.

I practiced 139 days in a year, one of my best time investments.

I recommend LeetCode as the best place to practice, you can solve problems by difficulty or topic, read theory, the solutions of some even other user's posts about their experiences in their interviews. I really like it. Moreover, it has coding competitions, and those are cool you can practice your coding performance and compare yourself with other coders around the globe, and for sure you will learn something new each time you try... if you don't, it's because you are really good and you should probably already work for Google or Facebook.

I practiced in the Google contests and I set my goal to reach top 1000.

I learned a lot in the Google problems, it's hard to know what track to follow in order to solve the problems. I really love their problems because they are so unique and beautiful at the same time. First you need to solve the problem in paper, then you need to find the proper data structure and apply an efficient algorithm (my favourite problem ever).

So, I was finally feeling ready, like hit me with whatever you want... I wrote to my recruiter and she scheduled me another interview (I will name my first daughter after her for all the chances). This time was a bit different because I had a coding assesment before the actual phone interviews.

Coding assessment: I had a big trauma with a past coding assesment of Google (it was really hard for 45 minutes), so I studied like a crazy nerd. The platform was Code Signal. The problems of this assessment were not really hard, and luckily, I was able to solve 3 1/2 of the 4 problems, I got 1080 out of 1200 points. I just missed that an array was bigger than another one. Anyway, I was feeling ready but not 100% sure, so I kept studying (good decision).

The summary of my first interview: the problem was hard and from an area that I wasn't familiar with... but hell yeah, I had such strong knowledge and practice that I was able to figure out what was the best data structure, and my interviewer was kind enough to help me with some simple hints so I could deduce the best algorithm. But to be honest, I was so worried because I used all 45 minutes, and I didn't see an edge case, but I guess I was just lucky and I did just good enough to pass.

The summary of my second interview: the first problem was easy, I solved it like in 15 minutes, and then I got the same problem but backwards and it changed the complexity to the hell, but it was like the last interview, I had strong knowledge and practice that I was able to figure out what was the best algorithm and I did it well. I didn't have enough time to finish it, but I left the easy parts as pseudocode and I liked both problems. Two weeks after, I got an email that we would have a talk to give me more details about the offer.

My personal conclusion

Okay, I did not have any chance of passing the interviews the first time I applied, but it was totally my fault that it took me 2 years. I did not study hard enough. I wasted my time on other stuff and I underestimated the coding topics.

I want to be honest, something that I hate about all of us humans, is that we want to do things for an immediate reward. And here, you don't have any idea of when you will get any of your efforts back, but you must continue learning and practicing until you pass the interviews, and even after it, you will need to keep learning in order to do a nice job in the company.

If you are reading this is because you are interested, don't lose the motivation! I can tell you that it is possible. If you keep working hard, the good luck will find you.

Don't lose the floor, remember from where you come, know who you are, and work hard to get to the place you want to be.