Author – Sanyam Garg (Google Munich)
The title of this post is entirely bullshit. This was just to bring all you lazy peeps to read this post. It may take several months/ years to be good at programming but this post is meant to give you the correct path based on the questions I receive each day. I intend to make this the most fun read for anyone enthusiastic about programming and if you are here you surely are enthusiastic.
This is for all the people looking for good jobs or the ones who just entered college or the ones who want to start up with the sport named COMPETITIVE PROGRAMMING.
Path to Success
Please have the courage to read it entirely(not leaving it mid-way).
Path to Failure
You can just press Ctrl+W or Cmd+W (not hurting Mac guys :P).
Why am I writing this?
Good question. For the past year and a half, my Facebook, Whatsapp, Instagram and LinkedIn have been flooded up with messages revolving around everything related to programming and this post is meant to cover each and every detail. It will be an honor to help you guys personally as well, you can message me personally anywhere. Yet, I will try to cover each and every detail in this post.
What you need to do?
You can comment and ask any question which is not covered in this post already. If you find this post good enough you are always welcome to give me good reviews :P. Never hesitate to suggest any changes/ giving bad reviews (I want them bad :P). And please share this as much as possible.
This section will have the titles (questions asked by you guys) and answers to them. The answers completely reflect my point of view, and may not always be politically correct. Rest assured this document will be worth your time and is entirely designed for your benefit. These are all questions that I have been witnessing for a while. I will try to keep the questions and answers crisp and concise so that it is fun to read. Also expect witnessing some memes :P.
I will refrain from providing many of the links in this post because you can always use keywords to GOOGLE :P.
Note: The “I” in questions refers to you guys who asked me the question, and the “I” in answers refers to me. Start giving it a read and you will understand.
Q1.I just came into university and I saw the posters of these XYZ guys getting placed into so good companies ( Google, Facebook, Amazon, Microsoft). How can I be there?
A1. First of all, getting into any of these companies is not the end of the world, so please don’t overhype it. Please focus on getting good at programming, and each of these companies will approach you for interviews. So I would say this question is wrong :P. The correct question is “how to start programming”.
Q2. I don’t know any language, how should I start?
A2. I have witnessed a lot of questions revolving around this. Learning a language is not a big task. So don’t be like the guy in this meme :P. Your choice should be one of C++, Java, or Python. Prefer C++ and Java ( my point of view).
- Get the basics like for loop, while loop, if-else etc. ( Time Required: 1 day)
- Get familiar with the concept of time and space complexity ( Time Required: 1 hour)
- Start focusing on STL ( Standard Template Library) in C++ or Collections in Java. The main point is to get familiar with data structures along with a good knowledge of how they function, their time and space complexity. Implement small programs. I started with these very simple problems( this will help you get into the feel of programming). ( Time Required: 1 week)
Note: The time estimates are totally realistic ( considering that you have a life, a girlfriend/boyfriend (HURT 😛) or friends to hang out with and coding is not the only thing in your life).
Language Learning is a long process and it does not come to you in a day, you need to practice as much as possible to be good at it.
Q3. I don’t know any language, can I join some XYZ coding institute to learn it? ( MVP :P, asked at least 100 times)
A3. No institute will teach you more than what I told you in Q2. And guys, there are so many online tutorials to this. I started with Codecademy at my time. You will find at least 20-30 YouTube channels teaching any programming language along with data structures. Above all, guys you are out of school( so no more spoon-feeding is required to you). However, if you have already committed this mistake, I can bet you are no better than the people who will dedicate 1.5 weeks as mentioned in Q2.So some reasons for joining coding institute can be:
- You are incapable of sitting yourself and need someone to guide you. ( My suggestion is to grow up)
- You need a girlfriend/boyfriend (you can get them if you join some coding institute)
- The coding institute is near your boyfriend/girlfriend’s house 😛
Q4. I know a programming language, what should I do now?
A4. Start with Codeforces by solving some ad-hoc problems. This video by Errichto and this one by William Lin can provide you a quick overview of what you can do and how you can start with competitive programming.
Q5. How is competitive programming different from interview preparation stuff?
A5. There is a very thin line between competitive programming and interview preparation. However, I always love to call competitive programming as a SUPERSET of the interview preparation stuff. If you are a good competitive programmer then you can clear almost any interview with just some interview specific additional knowledge.
Fun Fact: Most of the interview questions these days involve DP(Dynamic Programming) and Graphs. And these 2 topics constitute a good portion of competitive programming.
Q6. What is the additional interview specific knowledge required apart from competitive programming?
A6. Let’s have a good example for this. Let’s assume you get a question to reverse a linked list while you are doing competitive programming.
My solution will look like: reverse(list.begin(),list.end()) -> done 🙂 easy life
However, in interviews they might be expecting internal implementation of the linked list: https://www.geeksforgeeks.org/reverse-a-linked-list/.
Competitive programming is mostly a sport, and in that the main motive is to solve problems quickly (code quality can be compromised). Also, you don’t care if your solution is O(n) or O(nlogn) or even O(nsqrt(n)) until it passes.
However, in case of interviews the code quality can not be compromised and in some cases the most optimal solution is required by the interviewer.
However, if you are already good at competitive programming, trust me you can wrap the interview specific stuff in like 60 hours(2 hours daily for one month). You can study from interviewbit.com or geeksforgeeks.org (don’t forget about Leetcode)( whichever UI suits you 😛 ).
For Amazon and Microsoft, leetcode, geeksforgeeks is more than enough.
For SystemDesign: gainlo.co or interviewbit.com ( both are great)
Q7. Do I need some good projects for my interviews?
A7. One or two good projects should be more than enough. For the people who are applying for jobs and already had an internship experience, you guys need not worry because you can just show up your internship project. For the people applying for internship or the ones who did not have prior internship experience and are applying for jobs, you guys can just google search and get a bunch of good ML/Android/Web……. projects. Trust me, in a week’s time you can have a really amazing project on your resume.
Note: You can work on open source rather than copying some projects online. This will really help you understand the big code base and how to make changes there. This skill is a must for any software engineering job. Also it can open up your way for some really cool stuff like GSOC.
Q8.How can I be great at competitive programming?
A8. I am not worthy of answering that question. However, to be at a significantly good level in competitive programming all you need is just practice. I would highly recommend you to practice on codeforces.com regularly because the questions there really help you sharpen your thinking skills. However, you can feel free to give contests on every possible site: hackerrank.com(Hackerrank doesn’t organise rated contests anymore, they are mainly company challenges), codechef.com, topcoder.com, atcoder.jp, hackerearth.com, leetcode.com and so on. I can bet you will get addicted to the rush of a competitive programming contest. Just always make an effort to solve that one extra question which you weren’t able to solve in the last contest. Read editorials and other people’s solutions(it really helps).
Note: Participating in short-contests(2-3 hours) is quite similar to the interviews where you have some problems and you need to solve them in a fixed duration of time. Solving problems in contests really helps your mind to perform well in pressure.
There is hardly any company you can’t crack after this. You are all set to give some interviews….
Q8. How can I apply for jobs off campus?
A8. There are two simple ways:
- Apply on the careers site of that company: It is an easy way, but not a recommended way. The logical reason being that a company gets thousands of resumes each day and there is no good filtering process that can bring up your resume to the eyes of the recruiter even if it is the best resume among all.
- Take a referral: This is what I did and is a highly recommended approach. In this case, you ask someone who is in that company to refer you for a particular job opening that you can see on the careers site of the company. This method is at least 10X faster, efficient and fruitful than method 1.
Note: Never hesitate to ask for a referral, because if you get selected then the person who referred you gets money. So it is a win-win situation for anyone to refer to you.
Q9. What is the “GOOGLE REFERRAL”?
A9. I have seen people being too confused about the google referral. It is a bit different from other companies. Note that Google Referral is a generic referral. After someone refers you, you have the privilege to apply to any location/position using that referral. So you need not ask someone to refer you to a particular position in a particular location. If you can see that job opening on careers and you feel yourself as a perfect fit for it, then you can ask someone to refer you. You then apply to that opening yourself.