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!
I spend most of 2020 preparing for job interviews and being interviewed (besides my day job). Since I didn’t have to commute to work anymore, I used the extra 2-3 hours for studying daily. It did pay off.
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 in the offices. So, I did manage to get an interview with them. But, unfortunately, I bombed my first interview very badly. I was transitioning from Electronics engineering to Software, and data structures knowledge was pretty much arrays and strings. My first 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 on your own. Eventually, I got other jobs in Software Engineering, and I procrastinated studying DSA for years.
I had a dream, but I 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? Since It takes so much time to write a book, I had to see if people were willing to pre-buy the book. It turned out around 50+ people got interested and pre-bought the book! That kept me motivated to start the book. Halfway through, I had some issues rendering a PDF and ePub format. However, I didn’t want to let down all the (pre-)buyers that believed in me. 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! If I’m going to interview again, let’s do it big. I was aware of how hard the interviews were. So to maximize my chances, I applied to all the top tech companies I could and more, E.g., FAANG (Facebook, Apple, Amazon, Netflix, Google).
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. I completed the first exercise about solving a problem with a Hash Map and some other things. The second problem was complicated. 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 quickly.
I doubled down on doing exercises to do better on my subsequent interviews in other companies. I was getting better after a couple of months of doing Leetcode.com exercises every single day. When I interview Facebook, I got two questions that I had to solve in under 45 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 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 two months 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 following 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!
NOTE: Even if you are interested in one company, interview at many. Having multiple offers gives your more room for negotiating.
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. The programming language was new to me, and 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 them. 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 (including my family and friends). 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 now and then.
- Be constantly 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). I 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 made sure I was learning for the long term.
- Github contributions:
- 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 circumstances 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.