Freshman to Google SWE Journey

Ayush Mahajan
13 min readMar 20, 2021

--

Let me share my journey on how I started my journey from a Freshman at Maharaja Surajmal Institute of Technology to an offer from Google for an SWE role. I am sharing my journey because I think it is better to know the why, how, and impact of making decisions rather than directly knowing the decision I took.

Note: Before college, I was introduced to C++ in my school. One can learn that much in 1–2 months if they don’t have any prior experience in programming.

Freshman Year

Let’s start with the Freshman year in 2017. I joined college with a big goal of becoming a kickass programmer who would one day work on big things. So like any beginner, I went to one site where all questions were answered regarding such queries, Quora. I read tons of answers on how to become a better programmer, how to crack Google or Facebook, and many more similar questions.

I learned that we can very basically categorize the programming we do in college into two basic categories, that are Competitive Programming which focuses on solving some pre-defined solved problems (in most cases) using classical algorithms and Development which constitutes the part where we actually build things. But one big thing I learned was that no matter how much work you do yourself, your real learning will start once you start working.

I decided to go with the gut feeling to start working as soon as possible so that when I graduate with a huge amount of experience. In June 2017, when all entrance exams were over, I started learning basic HTML, CSS, Javascript, Bootstrap Library, and jQuery Library from FreeCodeCamp. By the end of the month, I started applying for internships from Internshala. After applying to nearly 50 companies I was selected for the interviews in 3–4 companies. In the end, I finally got an offer for a Front end role with a stipend of Rs. 2000 per month working Monday to Friday after college.

The internship was a fun experience where I learned how to quickly make a front end of the website and also how to make websites using pre-built templates. I learned many cool things about setting up a better and more productive environment on my PC. But soon it started to feel like a dead-end because I saw people in my college as well as my friends in prestigious colleges working on cool technologies like Machine Learning, Blockchain, Electronics, and other stuff. So it was a time to call the internship to an end and start exploring other technologies.

Starting with Arduino, I learned some basics like turning on LED lights, connecting using a Bluetooth module like HC06 (or something similar, don’t remember now). But now I was focusing on learning multiple technologies so that I get ideas of them. I then started with Machine Learning and headed into Andrew Ng Machine Learning Course. And after looking at the complex math I was sure that it is not something I am going to continue deeply. Then I started with Full Stack development by adding backend technology to my Front End Skills. I started learning NodeJS and continued learning it from late December 2017 to March 2018. After that, I thought of applying for internships again. I had a contact who had a friend whose startup was doing well and working on BlockChain. I was not selected but I got the advice that my resume only contains simple front-end projects till now. I have no edge in algorithms and data structures which is a very important skill for a programmer. As I already researched earlier, I knew this links to competitive programming. I didn’t know back then that you can learn data structures and algorithms without trying competitive programming. Believe me, it is so far the best misinformation I had. So I started reading various answers on how to improve in competitive programming (just reading). And I think I know you can guess that I did not improve.

Sophomore Year and Competitive Programming

After facing multiple failures in trying to improve competitive programming I was again researching how to become better at competitive programming. Every answer was the same saying that one needs to practice more questions just in a different way. One day I encountered this person, Bohdan Pryshchenko. He was a great programmer in competitive programming and realized that this person has solved tons and tons (in thousands) problems. It hit me that people when say solve more problems, they don’t mean 10 or 20 but hundreds and possibly thousands. So I decided, it's time that I will not look into becoming better competitive programming but rather solve tons of problems from now on. So I started the easiest A2OJ ladder. I just started solving it day and night. If I was stuck on a question for more than 1 hour, I read its editorial, read someone else’s code, started pinging people to ask them doubts in their code. I started reading about other people’s journeys and understood where they were wrong and why were they wrong with that approach. If I knew someone did competitive programming, I went to them, with fear of judgment and asked my doubts, but the worst that could happen was that they are not resolving my doubts. Slowly I learned various C++ STL features just by trying to understand different programmers' code. Soon, I started performing better in contests. I started participating in every possible contest I could. I went to tech fests of college even if I was to be the last ranked there. I still remember the day in IIIT-D fest when a candidate master ( a rank on codeforces ) entered the lab and everyone was like a god has just entered and I knew that is the skill level I want to go for and I will go there no matter the hard work required. And believe me, I am really a noob at programming contests at this time because I Google searched for the second question of the contest which was not allowed and on top of that I was caught doing it.

A new ICPC dream

As I participated in more contests, I started getting more experience and more sets of questions I couldn’t solve. But learning how to solve them also meant that I learned a new set of problems that I couldn’t solve earlier. These problems started repeating and thus I started identifying problems to previously solved problems. When I could map a problem to a simpler problem or started getting an idea by reading the problem only, I was looked like a genius. This is the time in my life when I started to dislike the word “genius” because I realized there are no geniuses, just people who have worked really hard and are now having trouble solving the harder problems. It's just a journey of moving ahead.

But since I had joined various programming forums and started interacting with various competitive programmers, I learned about the most prestigious programming contest for college students that is International Collegiate Programming Contest (ICPC). It required a team of three people to participate. I knew about this contest since Freshman year and tried teaming up but failed. This time I was very serious about going for it. I wanted to compete with India’s best. I wanted to be one of the best (while at that time I was not even the best in college, but dreams are not bounded by reality after all).

I teamed up with my seniors and we clashed for sites with other teams and we ranked 2nd in our online qualifications and unfortunately couldn’t qualify. My teammates soon then started focusing on their software development skills since they were seniors and had other priorities. So I was left with no team for next year and didn’t even know people in my college who share the same interest level in ICPC or even competitive programming.

But the fun thing about good, great, or even best competitive programmers is that they all started at level 0. So if I could find 2 people willing to learn no matter the level they currently at we could go to lengths. So I volunteered to teach for Special Interest Groups (SIG) in my college to find people interested in learning. Fun thing was that the first person I was confident to take in my team met me before even starting the SIG. He was curious enough to contact me to clarify doubts just knowing that I code. When SIG started, it started with a full class ranging programmers from Freshmans to Seniors. I gave my best to teach but won’t rate my teaching skills here. Soon classes reduced to the strength I could count on my fingers. But these people were genuinely interested. They were participating in contests and wanted to improve. I didn’t need to put effort to make friends with them because our understanding and a shared goal of learning more made us better friends without anyone noticing and I think that’s how it works when you are in a circle of people who are all working towards a common goal. I met my final teammate here and soon we were a team.

Soon we started practicing together and solved problems that were harder for us and started learning at a very fast rate, my competitive skills grew more and more with practice. This increase was now majorly because of the consistency of practice and trying harder questions. I went as high as 1878 rated on codeforces (okay, it was high for me at that time since I was very close to my goal of reaching candidate master) but then there was the only downfall for over a year.

Junior Year

In Junior Year, life took multiple turns which gave me a completely new perspective. At the end of freshman year, we were asked to do industrial training and I was overconfident that competitive programming skills will help me crack tons of companies. Fast forward to May 2019, I am almost done with every exam with no offer in hand and am just desperate for any opportunity. But then two unexpected events of my life happened. I was scheduled for an interview opportunity with Google Japan and I got an internship offer from Metvy.

Failing First Attempt at Google

Google interviews are of good difficulty are mostly focused on Data Structure and Algorithms, for which I had overconfidence. I conveniently solved the first coding round which looked for only brute implementations of the problems. In the first interview itself, we discussed a difficult Binary Search Question. I was able to solve it and go to the next round. The fun thing happened in this last round, I was asked a very simple and easy question, and I couldn’t solve it, which lead to rejection. I literally was heartbroken because overconfidence made me lose an opportunity. For the next 6 months, I used to think about the solution again and again to that problem and how I will easily tell the solution to the interviewer this time.

A new interest

Soon I started my internship in Metvy as a Backend Intern. I had no idea how to work on the project I was given and that too was required to be done by the deadline. I just knew one thing that if I give up, I will be always running from challenges. I would fail trying but I will give my best. It was the first time I was working professionally and I wanted to work with the best professional behavior I could. I learned a lot building the backend for Metvy. I took the responsibility for solving slow parts, talked to my mentors about issues (not telling about the task but the problem only like slow processing is the issue, how to handle). I learned about Redis and RabbitMQ, which actually made me look more into the scalability side of the backend servers. Though I didn’t learn much about them after the internship and then Internship at Metvy ended.

The Depressed days

After the internship at Metvy, there was nothing much except ICPC preparations. But I was not improving in the contests. My performance was getting worse day by day. I was stuck on the current Expert rank for about 8 months now. I was recently rejected by Google. My friends in prestigious institutes were getting placed one by one. Those who dropped a year with me were getting internship offers while others were getting FTE offers. My roommate also left and I couldn’t find a new roommate from college as well. I started living alone in the apartment. My social life only consisted of talking about some development idea or ICPC with my teammates. I was gaining weight day by day. We prepared for ICPC only and did that day and night. We had our strategies and worked on them. And when we participated in ICPC online regionals, we qualified. But social life and health were taking a lower hit every day. I was seriously not getting any offer to summer internship from any company. And soon it was December 2019 and we were in Kanpur for ICPC regionals. We were confident that after this much practice we will come at least in the top 20 if not the top 10. Guess what was our rank? We were in the 60s out of some 80 teams. So we were seriously in the top 20 from the bottom. After the contest, we were actually sad, and all were wishing we could have helped our team even a little more maybe we could have been better. But still giving that contest was like giving a very important exam, now we cannot do anything about what has happened. I still don’t understand what happened that day, maybe it was the competitive programmer who has already seen enough failure and was just getting used to being a failure. Now I am okay with failure, will feel sad but what can I do. I was there like, let’s plan for the next ICPC now. I was just feeling like maybe I am at a moment where I have had enough failures that now better things ought to happen. I decided that I will start living a better life from now on. I will work out, eat healthily, get rid of bad habits, start talking to people about things other than programming and do my best.

A new life

The next day I came back to Delhi on 1st January 2020. I started doing my best, eat better, work out. And soon change in lifestyle made me happier and better. Since I started talking to various people, I got to become friends with some really awesome peeps, who deserve a very big credit for my career. With a happy life and also putting a great amount of effort in competitive as well, magic happened. It was April and in codeforces contest, everything just went smooth and I came 13th in the contest, giving me a 200+ rating boost, pushing me through ranks, and made me a Candidate Master with a 2000+ rating. This was the moment, I knew my hard work has finally paid. And soon I was a happy person, with a little mental peace. Soon COVID made it clear that we have no idea about ICPC so it was better to give up on the dream and start focusing on the next big thing, which was placement.

Placements Journey in Senior Year

I started planning what do I need to learn for placements. My friends went out of their way to help me learn concepts like OS, DBMS, and Networks so I could understand them and answer questions on them in interviews. I started practicing Leetcode. I made sure that I will solve many interview questions that I will make the possibility of being asked an already solved question very high.

I started giving placement tests for various companies, including Goldman Sachs, Infosys, TCS, Codenation, ShareChat and many others. and I failed in all of them (except Infosys but still didn’t get the highest package there as well). I asked for referrals on LinkedIn for companies like Google, UrbanCompany, HackerRank, Amazon, and many many others. Other than Google and HackerRank I didn’t get even a coding test for them. I just didn’t know what was missing. I got my resume reviewed tons of times by the seniors working in big companies and everyone said it’s pretty good. But soon I realized that I don’t need selection from dozens of companies. I just need to clear 1–3 companies and that gave better hope to me during placements.

Soon I got an offer from Expedia in September 2020. My first offer gave me a big confidence boost. I was now more mentally prepared for other interviews. With time my process for Google also started in November 2020 and I gave my first telephonic screening round. It went very well and soon the dots started connecting themselves and life and previous efforts started making sense. In December I applied for an internship at CRED which itself had a very awesome test. It was the first time I gave programming round to build a simple application but with a time limit. My first part of the onsite for Google was also scheduled in that month which had 3 back to back rounds. My first round went very well as I could very easily map the asked questions to a variation of previously solved questions. The second was rather simple but one question was again simple but the solution wasn’t hitting. My interviewer gave a hint and thanks to competitive programming experience I had enough practice to get to the solution if my brain gets a hint of the correct direction(for div2As only). The third round was more difficult but again competitive programming helped me here. I remember reading about a very cool approach to solving a question. Though questions were different I could use some calculation optimizations from there and I solved the question. I was also selected for Zeta Internship but I had already started working with CRED and I love working here very much. In January before the start of my internship at CRED, I had my last technical round and one Googlyness round. I will swear I smiled when I listened to the problem statement by the interviewer that day because I recently learned treap data structure and I was like oh my god, we that with balanced binary search tree. Though the question was more than that. Just knowing data structure is never a solution to any problem. I was able to go ahead and solve the problem. I didn’t solve in expected time complexity of O(nlogn) but still, O(n(logn)²) is also cool. The next round went smoothly as well. I was asked technical questions here as well. I think there was some miscommunication but still, it was a fun problem to solve using Z-Algorithm which I heavily use. I was told that my data is missing from my packet for the Hiring committee and thus was asked to give another Googlyness round. And then after that, I soon received an offer from Google.

So that’s my journey so far, don’t know what will happen next. I can just do hard and consistent work for my life goals. And I do not even expect other things from myself as well. Just live, work and see what happens.

--

--