If you have a question about competitive programming, Quora is a good place to find the answer. Quora’s Competitive Programming topic attracts experienced competitive programmers, and they have written answers to a variety of common questions that beginning and intermediate programmers have about the subject.
It has been a few years now since the Quora topic was created, and most questions about the fundamentals of competitive programming have been asked and answered. While there are still new questions about specific problems, and about current events, it’s rare to see a new question about fundamentals.
Introduction: Question Topics
Quora questions about competitive programming fall into four main topic areas, and ten or so total categories divided among those areas. When I see a new question arrive in the Competitive Programming topic, it almost always fits into one of those, even if it’s not a duplicate question. The four areas are:
- Getting Started
- Getting Better
- Pros and Cons
- Tools and Resources
1: Getting Started
Competitive programming is popular enough that it comes up regularly in Internet discussions (e.g., on Reddit or Stack Overflow), but it’s not so mainstream that everyone knows exactly what it is. This can lead people to Quora for information on the basics of the topic. That’s what this part is all about. These questions about competitive programming basics fall into three categories:
What Is It?
Some people just want to know what competitive programming is, or how it compares to other types of programming.
A famous Quora question: How is competitive programming different from real-life programming?
The basics: What is competitive programming?
(Also, my blog post on the question): What is Competitive Programming?
Other questions ask for definitions of terms or other specific aspects of competitive programming. For example:
How Do I Get Started?
Once a programmer finds out what competitive programming is, they may wonder how they can get started at it. That’s what these types of questions are about. The canonical question for this category is How do I learn competitive programming as a beginner?
What Are the Contests and How Do They Work?
People who have spent some time trying out competitive programming may have questions about what contests are available, or specific aspects of contests. For example:
- What are the various online programming contests?
- What can be the value of n in competitive programming when it is said that it should pass under 2 seconds?
2: Getting Better
This section covers the main topic of competitive programming practice: how to get better. Quora has advice in a number of areas for getting better at competitive programming:
How should I practice?
The canonical question about competitive programming practice is What is the best strategy to improve my skills in competitive programming in 2-3 months? I wrote a summary of the advice in Competitive Programming Training Tips.
What should I study?
Some questions ask what topics are most useful for getting better at competitive programming. An encyclopedic example: What basic data structures and algorithms should one learn before starting competitive programming?
How did specific people train?
It’s reasonable to think that, by studying and applying the practice technique of a successful competitive programmer, one might be able to replicate some of that success. This happens to be the approach that is generalized in Cal and Scott’s Top Performer Course.
Here’s the Quora question that usually comes up as an example of this study technique: How did Anudeep Nekkanti become so good at competitive programming?
Tips and techniques
Some questions ask for tips about specific aspects of competitive programming. For example:
Algorithms, data structures, and math topics
This is a huge section, since there are so many different topics that competitive programmers need to learn about. Here are some examples:
- Which is the best way to learn graph theory for competitive programming?
- How does one become better at dynamic programming problems for competitive programming?
- How to sharpen my mathematical skills in the context of competitive programming
- How to learn Algorithms for competitive programming
Mistakes to Avoid
Why not learn from other people’s mistakes?
Time and age
It’s strangely popular on Quora to ask questions about whether one is too old to do something. That trend continues in the Competitive Programming topic. For example: Can one start competitive programming at 16?
Even more popular is asking how long it takes to get good at competitive programming. Maybe this is inherent to people who want to learn programming, as Peter Norvig wrote in his famous essay, Teach Yourself Programming in Ten Years. Some examples of questions in this vein:
- Is two months enough to get well-versed in competitive programming?
- How much time should I spend daily for competitive programming?
Nature vs. nurture
Debates about nature vs. nurture are popular both in scientific journals (as I wrote about in Making Sense of the Deliberate Practice Debate) and in Quora questions. Here’s how one questioner puts it:
3: Pros and Cons
Because of the nature of online discussion, it’s not enough just to talk about how to start and improve one’s competitive programming skills. People also love to debate whether competitive programming is even worth spending time on. That’s what this topic is all about.
What are the Pros and Cons of Doing It?
There are plenty of people on both sides of the usefulness question, though Quora users on average have a more positive opinion of competitive programming than Stack Overflow users do. Here are some questions from both sides:
Cons with attitude
This is a valid FAQ (2nd on the list) on competitive programming because it is a counter point to the perception many students and others have. If you remove it from the FAQ in Competitive Programming it will be put back on by one of the answers. If you do not agree take it up with the Quora admins. (Only an official note from the admins with an explanation to why it is not a FAQ will prevent it from being put back on. See FAQ discussion.)
Someone really wants to make sure the “con” point of view is represented.
Some questions are looking for both pros and cons:
Should I Do It?
Quora users (and people in general) like to ask their questions from a personal point of view. So a pro vs. con question is often posed in terms of what competitive programming can do for me.
Should I spend time on competitive programming or something else?
People who take a serious interest in competitive programming must dedicate time to practice that they could use for something else. That’s the perspective that these questions come from. For example: Career-wise, which option is better: Open source contributions or competitive programming?
Is it worth doing in general?
Some people question the value of competitive programming independent of its effect on the time available to pursue other interests:
Is it worth doing to prepare for a specific goal?
Questions in these section want to narrow down the “should I do it?” calculation to a particular area where they want to improve:
- Can competitive programming help you become better in theoretical computer science – algorithms research?
I’ve heard it’s useful. How do I make myself want to do it?
Everyone is doing it, and I don’t want to miss out:
- What are some good motivations to encourage oneself for competitive programming?
- Should I do competitive programming when I have lost the interest in it?
How do I balance it with other activities?
Finally, some people just want to fit it into their schedules.
How Is It Related to Programming Jobs?
This pro vs. con subtopic is about programming jobs, and the activities that precede them (like university studies and interviews).
How is it related to programming interviews and resumes/CVs?
It’s no secret in the programming world that competitive programming has more than a few similarities with coding interviews. As a result, there are a ton of Quora questions on the practical benefits of competitive programming in this area. Here are a couple of popular ones:
For a software engineer who doesn’t find competitive programming interesting but would like to join one of the big tech companies (for example Google, Facebook or Microsoft), what options do I have? Is it still possible to land a job at one of those companies?
How is it related to programming work and programming jobs?
While few amateur athletes go on to become professionals, it’s rare for a competitive programmer not to use their programming skills at work. The large number of questions relating programming jobs and competitive programming reflects this. Here are a few of them:
How is it related to university admissions and studies?
Some programming competitions target high school students. How does that experience relate to getting into and doing well at university? Quora users want to know.
- What is the importance of competitive programming for a BTech computer science student?
- What are the advantages of competitive programming for college students?
It may even be relevant for graduate students:
- Does a good profile in competitive programming help in getting admission in top MS/Phd program at top US universities for Algorithms/Theoretical CS/Systems?
4: Tools and Resources
Competitive programming study requires a combination of academic resources like textbooks, and computer tools like compilers and editors. This topic area consists of questions asking for recommendations on the best tools and resources to use.
For another summary of these types of resources, see the Awesome Competitive Programming list.
What Tools Should I Use?
To practice competitive programming, you need a programming language. An editor and compiler may also be required, though online programming sites may hide these from beginners.
What language features and techniques?
Using a language for competitive programming is different than using it for writing regular software.
Learning a programming language for competitive programming
IDEs, editors, and other tools
What Study Resources Should I Use?
Not every competitive programming problem can be attacked with logical thinking alone. Sometimes you need a specific algorithm or technique. Quora has a lot of recommendations for where to find those.
Books and other printable references
Blogs and Other Websites
Competitive Programming Sites and Online Judges (including sources of practice questions)
Who Does It?
Quora is a bit like a social network, and competitive programming questions sometimes focus on people rather than programming. Here are a few notable ones:
Conclusion: Asking Questions
A few weeks ago, I wrote a post called Getting Answers to Your Competitive Programming Questions, where I offered some advice on how to do just that. Since Stack Overflow is so good at answering specific programming questions, Quora is best reserved for general questions. It should be obvious by now that most of the good general questions have already been asked. Nevertheless, there may still be a few interesting ones out there. If you think you have one, go for it.
(Image credit: Dan Taylor-Watt)