The 8-month plan to get an internship in your dream company

Ishan
6 min readDec 18, 2019

--

Photo by Safar Safarov on Unsplash

Hello all,

I am Ishan, a 4th year Undergraduate Student from the Department of Computer Science and Engineering enrolled in the Integrated Dual Degree course at IIT Kharagpur. This article is regarding the preparation of coding for the internship based on my journey. I got an internship offer from Google and Uber for the Summer of 2020 through the CDC internship drive ( of IIT Kharagpur ) and accepted the offer from Google.

I will begin by saying that it isn’t too late and probably the best time to start preparing even if it is from scratch. I too started in December’18 from scratch for college internship interviews in August’19, starting from C++ only, so I will cover most of the stuff from the start.

Let’s get started!

  • Getting started with C++: Well mainly you can always start with any tutorial or online course and practice on Hackerrank while looking at geeksforgeeks side by side. The way I did it was by starting with ladders in A2OJ ( <1300 rating one ). There you will find very easy questions thus you get to learn small mistakes and some implementation of STL in C++. You can easily do something like 10–15 questions in a day here and also as the questions are easy enough it keeps you motivated. My complete December went by in getting familiar with C++ and believe me, it was worth it.
  • Getting familiar with the basics — There are many simple logics, algorithms, data structures, implementations, etc. The major problem here is that you will be tempted to cover all too soon but you should try to take things a little slow initially and allow the new things to come in your way naturally. So basically while you are practicing questions then you will come across many new topics. There you should carefully understand the topic and then implement it, this approach will help you in the long run rather than just gobbling up all the algorithms at once which you will forget later.
  • Getting familiar with advanced topics — The major algorithms can be found on cp-algorithms and many more will come in your way as and when you are solving questions. Learn about the core of the algorithm or data structure used, try to think widely in a diverse way i.e. solving the same problem some other way if possible. Also, the best way to learn the algorithm is to implement it on a test case of your choice on a paper and then track what the algorithm is doing. Eventually, what matters is how well you understand the algorithm and hence how easily you can modify these algorithms according to the needs of the problem statement.

Now you can do many problems but it still might not matter as maybe you were focused on doing more questions or just remembering the name of the algorithms rather than understanding them in depth. Also, how do you know if the way you did the question was the best? So here, I used to implement this strategy ( on Codeforces ):

  • Tags: These provide you some insight or give a direction to your thoughts on solving the problem. This also tells you about the various approaches to the same question which eventually widens your view.
  • Tutorial: This is the exact idea of what was supposed to be done. If your idea was the same then kudos you are doing great!
  • Fastest solutions: This can be checked in all submissions sorted by execution time. Here you can see what practices those elite coders used and what all small implementations or ideas made their code run faster.

In my opinion, try to follow these steps. Even if you solved the problem, it might still give you a better idea.

One of the most important things which I will personally recommend is participating in contests. As you are excited and are provided with a limited amount of time, so you try to learn new algorithms and data structures faster too. This also improves your typing speed and thinking out of the box under stress. For contests, you can use clist.by to keep track of all the contests and can participate in contests hosted by Codeforces, Codechef, Topcoder, and anyone else you like.

Some of the useful references:

So all of this is for Interviews and still, I haven’t mentioned Interviewbit. It is mainly known for practicing for interviews. Personally, I advise to take it up in the summer vacations or basically 2–3 months before the interviews as there are topics starting from basics and implementations that you don’t use normally but only for questions asked in interviews. Now as these are not the normal questions you will end up forgetting them and revising again later. So instead I would suggest to practice normally and take up Interviewbit at the end and practice those topics more which you fear or you are weak in. If you were dedicated then it will take you max 50 days to complete all the questions which will leave you with good enough time to practice your weak topics. Another good list for that time is Codemonk v2.0 by Hackerearth.

The major things to keep in mind are:

  • Focus on quality, not quantity. Rather than doing many questions in a day focus on doing a few but with absolute clarity. Similarly giving just 3–4 hours of focused attention is better than 8–10 hours of diverted attention.
  • Keep the negativity aside. There will be days you might do just a single question in a contest or maybe some of your friends did a lot better, just don’t let that slow you down as what finally matters is you being better every day. This takes time but you will see the change in a few months only.
  • Be consistent and determined. The only reason why you can still beat those coders practicing for 2–3 years will be because they have slowed down and not doing much now.

One of the biggest advice is to have at least one good circle of determined people or maybe even just one friend. Here you must feel free to share your thought process or ask others their thought process in solving any problem. Encourage each other to be consistent and do more. Have exciting discussions about algorithms or contests. Below is a strategy my group opted to keep each other motivated by keeping track of progress.

Keeping track of progress with two of my friends

Finally, I would like to propose an idea for all of you. Add your coder friends or any coder around you in Codeforces or any other platform. While in contests, keep track of how many questions they did and how much time they took. This will motivate you a lot and give you an idea about how much more you need to improve. It will also help you in getting faster monitoring of how much more time you took in solving the same problem. For Codechef, you can apply the institute filter.

Don’t be demotivated at any time initially as what you are aiming for is the result after a few months of hard work and believe me, it will all be worth it.

--

--

Ishan

4th year Undergraduate Student from the Department of Computer Science and Engineering enrolled in the Dual Degree course at IIT Kharagpur