CP journey update on 11 Oct 2019

I have been away from Competitive Programming for a long time (about 2 years). No, not because I lost interest in it. I was simply too busy with university coursework. This break was also beneficial in another way - I realized that there are so many things that are much more valuable and important in Computer Science than Competitive Programming.

Competitive Programming, while fun as a hobby, does not have much practical use in most real-world applications.

My reasons for saying this are as follows:

  1. Many real-world problems are NP-hard (i.e. do not have efficient solutions) and it is more practical to solve such problems by approximation rather than computing an exact solution. However, in Programming Competitions, most of the time, we are given problems that have known efficient solutions and the results simply depend on who can discover and implement the solution the fastest. In the real-world, we need the patience and resilience to try different approaches to problems for which an optimal solution may not even exist. This runs counter to the "Programming Competition mindset" which penalizes failures and rewards successes.
  2. While Programming Competitions do teach people some Computer Science fundamentals, the "AC-and-forget" mindset cause people to neglect details. I have personally studied under various highly-rated Competitive Programmers. These people are certainly no slouch when it comes to algorithmic details, but they tend to hand-wave (gloss over details) when it comes to deeper details such as mathematical proofs. Furthermore, I feel that Competitive Programming tends to encourage people to "know how it works" rather than "know why it works". This is a very bad mindset to take on in the real-world.
  3. Competitive Programming skills are not so useful when trying to create real-world products (at least not in most settings). Competitive Programming does not teach people about topics that are actually relevant in the real-world such as AI, Machine Learning, Compiler Design, etc. The most likely reason why a Competitive Programmer would want to venture into these fields is that he or she wants to optimize his or her code's runtime. In a nutshell, Competitive Programming skills do not help people to actually create a useful product.


I figured that, as an average joe in academia, it is very hard (if not impossible) for me to match the standard of world-class players (such as ACM ICPC finalists). Furthermore, the Competitive Programming community can be very unhelpful and unfriendly. For example, editorials are often badly written by highly-rated authors who think that everything is trivial and clarification often goes unanswered. As such, it is very hard to obtain help in Competitive Programming if one does not have a mentor or senior for guidance.

Nonetheless, as I mentioned, Competitive Programming is a fun hobby. I have gained many benefits from it. Some of which include: 100 wpm typing speed, ability to understand spaghetti code and the ability to devise more clever solutions.

I will post more solutions to Competitive Programming problems as I solve them. Stay tuned!

Comments

Post a Comment

Popular posts from this blog

USACO - Broken Necklace

HackerRank - Search in a 2-D grid

Efficient learning in Competitive Programming