Nowadays I'm getting a lot of messages on Quora and Facebook about competitive programming. People ask me "I'm yellow on Codeforces, I applied to many companies but no luck. I never got shortlisted for any company what should I do?". Today I'm going to write my own 'personal thoughts' about competitive programming and development.
Well, I realized competitive programming is not for me and I have totally stopped Competitive Programming. I do participate occasionally and I solve practice problems on different coding problems in free time to improve my Algo and DS concepts. Now I'm more involved in development I love open source. I love the feeling of creating something for the community it gives me more pleasure than seeing those green tick marks.
There is big hype of competitive programming in India. Students think that doing well in CP will give them the best jobs in big tech companies. Most of the students start CP without having any interest in it, they force themselves to participate in coding challenges to get good rankings so that they can mention it on their resume. They search for solutions on different online platforms which leads to cheating in coding competitions. Ask yourself at least once, do you really like competitive programming? Why are you doing CP? Just because few amazing people have got jobs in big companies like Google, Facebook and Microsoft through CP? Will Directi hire an engineer if he has 55 percent, considering the fact that he is a very good programmer and has solved 400 problems on SPOJ? There are many such questions are Quora.
CP improves your logical and analytical skills.
It improves your algorithmic knowledge.
You can "pass" through interview of big tech companies because interviews are mostly algorithmic based and that's what you train for.
You get free T-shirts in coding competitions and people give you respect.
You get addicted to competitions. In real life when you work in a company with lots of responsibilities, you can quickly lose motivation, when there is no one to beat.
You get used to small rewards and short-term goals. In real life when you work on a project it takes months before you get rewarded for the project you're working on.
You know a programming language exceptionally well but you don't know any frameworks. It is more practical, time-consuming and more boring to learn and you need to do it a hell-lot more often!
In CP you see WA, AC or TLE on a problem but in real life, it takes a huge effort in testing a software on different data sets, platforms, and devices. It takes months in testing and finalizing a software.
Machine learning, Artificial Intelligence, Image processing and cryptography - you never used these in coding competitions. These are highly used branches of computer science in big companies.
Software development is the process of computer programming, documenting, testing, and bug fixing involved in creating and maintaining applications and frameworks involved in a software release life cycle and resulting in a software product.
Software development is the process of designing, building, testing and shipping a software that makes the world a better place.
If you're making something using your programming knowledge to makes anyone's life easier and simpler then you are a software developer.
Here I'm referring to Open source development
Solving Problems: This gives you a sense of accomplishment, at the end of the day, you can look back and point at something that you did or made or finished and many people are using your software.
Learning: You work on a real life projects whether it's a simple android app, plugins, integrations, new frameworks or bot. You learn how to work on a real life project using different languages and frameworks following a software process. There are many awesome new technologies and framework available and people are coming up with new technologies and frameworks daily.
Open Source Community: Open source community is so huge and there are thousands of projects available on Github to contribute and work on. When you start working on open source projects you'll get to learn how do big organizations work and maintain large codebase, Git and SVN version control mechanism, you interact with software engineer and developer from all around the world.
Absolutely Not!! (Assuming that you don't any contacts in top companies, those who can refer you for the interviews!)
The toughest part in getting a job is to get shortlisted for the interviews. Big tech companies receive thousands of resume for one single position. You can get noticed by recruiters only by doing CP if you perform exceptionally well (ACM-ICPC WFs, Regional winners, CodeJam and FB HackerCup top 50s), but still, have to go through those 5-6 rounds of interviews and it depends on lots of other factors too.
A very good resume so that you get shortlisted for the interviews.
A very resume can be built by doing some awesome projects.
Some awesome projects requires knowledge of new generation languages like python, Go, Dart, JS, php etc and other frameworks.
* To learn these languages you have to give time and best way to learn something is by doing. * Once you get shortlisted then you also need to have good knowledge of algorithms and data structures. * To learn Algo and DS you need to read and practice on website like [Geeksforgeeks](https://www.geeksforgeeks.org), [CodeChef](https://codechef.com), [TopCoder](https://www.topcoder.com), [LeetCode](https://leetcode.com), [CareerCup](https://www.careercup.com). * You also need a medium level communication skills.
In conclusion, I think both are very good for personal development. Through Competitive programming, you will be well versed with data structures and algorithms and this will surely help you in cracking job interviews. If you choose Open Source and if you pick the right project, you'll learn to write better, cleaner code (not necessarily faster), that's broadly acceptable. You'll learn to organize and document your code better, which is a critical skill. You'll gain meaningful experience on your resume, which will lead to more interviews at good companies, whatever your experience or education level is. I'd suggest you try both if you're doing only CP aim for ACM-ICPC, CodeJam, and HackersCup and keep doing if you really love it.
Anudeep Nekkanti describes CP perfectly:
“I see that a lot of Indians are putting a lot of effort into competitive programming (mainly for placement offers) with not so good results. Trust me, do it with complete concentration for a month, by then you will exactly know if you have to continue in this field or not. If you feel you should not continue, stop it, do not hang on to it hoping for offers. Use your time on other stuff.“
Don't forget to share this post with your friends. Let's help everyone in figuring out what, which one is for them. Also, if anything is not clear and you want more in-depth information about something, please join our community - Computer Science students group on Fb. There will be open discussion everyday at 9 PM and there are many other people to help and guide.