This is the first time I write a post about reviewing a year. I usually keep my posts about technical topics or tutorials, but this year has been unusual so let’s do unusual things!
Most of 2020, besides my day job, I spend it preparing for job interviews and being interviewed. Since I didn’t have to commute to work anymore, I used the extra 2 hours daily for studying.
So here’s a little backstory that leads me to this point.
Since 2011, one of my dream jobs has been to work at Google. I was fascinated by the number of innovative products they released, the Ester eggs, free food, and amenities on the offices. So, I did manage to get an interview with them. I bombed my first interview very badly, as I was transitioning from Electronics engineering to Software. My data structures knowledge only encompassed arrays and strings. However, my interview was about a linked list implementation, so I had to improvise. After my big failure, I still wanted to try again in the future. I knew I had to study computer science topics and learn Data Structures and Algorithms (DSA) for real. However, those topics are tedious to study. Eventually, I got other jobs, and I procrastinated studying DSA for years.
I still had the dream but didn’t find the time to put in the work. In 2018, I had an idea to motivate myself. I started writing posts about my learnings. That way, I can keep myself motivated. I wrote a couple of posts: 1, 2, 3, 4, 5, 6, 7. I noticed it got some traction, so I got another crazy idea. Would people be interested in an ebook version of my content? It takes so much time to write an eBook, so I had to see if people were willing to pre-buy the book first. It turned out around 50 people got interested and pre-bought the book! That kept me motivated to start the book. Halfway through, I was very tempted to abandon the project because I had many issues producing a book in PDF and ePub format. However, I didn’t want to let down all the people that believed in me and bought the book. So, I pushed through the finish line and delivered what I promised.
In March of 2020, I got an email from a Facebook recruiter. So, I thought: Hmm, I’m ready to get into a top tech company this time. E.g., FAANG (Facebook, Apple, Amazon, Netflix, Google). I was aware of how hard the interviews were to maximize my chances, I applied everywhere I was interested.
The first interview was with Amazon. It was an online assessment. I thought I was ready since I was studying algorithms on-and-off for a couple of years. The first exercise I was to complete it, finding the most common word in a paragraph and some other things. The second problem was hard. It was a graph algorithm, and I was able to do a brute force solution. Unfortunately, It was not good enough, so I was rejected.
Lesson learned: to do well in interviews, you not only need to know the theoretical concepts, but you must be able to apply them on time.
I doubled down on doing exercises so that I can do better on my next interviews. Indeed I was getting better after a couple of months of doing Leetcode.com exercises every single day. When I interview with Facebook, I got two questions that I had to solve in under 35 minutes. There’s one that I had seen before (or at least was similar). However, I got nervous and only did the brute force solution. I was rejected again! Also, I was frustrated because I practiced hard this time and still ended up using the same brute force solution I knew before preparing.
Lesson learned: Learning is not a straight line. If you want knowledge to stick in your head, you need to use an iterative approach. Use spaced repetition. Learn and quiz yourself again after a couple of days.
I started writing down my sticky points and learn from my failures daily. I kept a spreadsheet of the last time I attempted an exercise and how long it took me to finish it. After a month or so of doing that, I started seeing a noticeable improvement in myself. I was learning, and the knowledge was sticking with me for the long run.
My next interviews went well, and I got offers!!
To sum up the whole process:
- Applied positions:
8(2 never replied, 3 said no, 8 said yes)
- Interviewed w/recruiter:
7(1 replied too late in the process)
- Phone screens:
- Onsite interviews:
I accepted my dream job at Google!
Once I joined Google, I kept learning. Everything was so jaw-dropping! However, everything was so different from what I did before that I felt overwhelmed by the number of new things I needed to learn. Not just the programming language was foreign to me, but also the build system, CI, version system (perforce/mercurial-like instead of git), and many internal tools. I made a list of new things and have been going through it. After a month or so, I feel like I can do things now. I submitted my first change to production, and my 2nd one is on the way. It’s great to work on something that billions of people use daily. I feel like what I do matters. Of course, there’s so much to learn, but I’m enjoying the new journey.
- Data Structures and Algorithms (DSA) are essential when your code runs on thousands of servers worldwide. Inefficient code won’t scale well and cost more CPU-time.
- Systems design is critical too. I need to keep learning more about this topic. I might do a couple of posts about what I’m learning.
- Design patterns and learning to refactor code is a very needed skill. Projects that have decades of ever-increasing requirements need to be revisited and improved every now and then.
- Be always learning. Don’t be afraid of starting from scratch. Failure is an option. Learning is a choice. Consistent tries (failures + learning) leads to success eventually.
- Studied Data Structures and Algorithms (DSA) and did exercises:
- Leetcode submissions:
- 903 submission of 202 problems (I repeated many every few weeks). Did 90 easy, 100 medium, and 12 hard problems. I participated in 6 programming contests.
- I noticed many of the things I learned I forgot in a few weeks. So, I kept a spreadsheet (Notion Database) to keep track of my mistakes, learnings, and make sure I was learning for the long term.
- Github contributions:
- (Still reading) Software Engineering at Google: Lessons Learned from Programming Over Time by Titus Winters
- Elements of Programming Interviews (EPI)
- A tour of C++ by Bjarne Stroustrup
- How Google Works by Eric Schmidt
- Why we sleep by Matthew Walker
- Zero to One by Peter Thiel
- Atomic Habits by James Clear
- Quit like a millionaire by Kristy Shen
- Principles by Ray Dalio
- Financial Peace Revisited by Dave Ramsey
- The Magnolia Story by Chip Gaines
- Capital Gaines by Chip Gaines
- The 10x Rule by Grant Cardone
- Think and Grow Rich by Napoleon Hill
- Happy Money by Ken Honda
- The Infinite Game by Simon Sinek
- Becoming Supernatural by Joe Dispenza
- Breaking the Habit of being yourself by Joe Dispenza
- Trillion Dollar Coach by Eric Schmidt
- The millionarie next door by Thomas J. Stanley
- Sapiens by Yuval Noah Harari
- The Little Book of Common Sense Investing
- The Richest Man in Babylon by George Clason
- You are a badass by Jen Sincero
- You are a badass of making money by Jen Sincero
- Crysis 3
- Chess 5D
- Among Us
- Weightlifting (before gyms were closed): Stronglifts 5x5
- Focus T25 (after gyms were closed).
Considering the uncertain global situation, there are still ways to use circunstances for good. For instance, we can use the extra time at home to study and spend more time with family.
Failure is natural when you go out of your comfort zone. Try to learn from your mistakes and keep trying new things until you succeed. Don’t give up on your dreams and try to enjoy the journey. Always keep learning, and don’t be afraid of starting over.