I’m working on a project this year to build a competitive programming FAQ. This is one in a series of articles describing the research, writing, and tool creation process. To read the whole series, see my CPFAQ category page.
Primary Category Updates
The recommendations from my first post about categories has held up well as I categorize more questions, but I have a few adjustments to make. Here are some additional notes about each category:
Two common types of questions from the list are: (1) Questions that describe a short programming problem, as one might find it in a textbook, and ask for the answer; and (2) Questions that ask for the solution to a more general algorithm problem. Questions of type (1) go in the Specific Problems category, as described below. Questions of type (2) go in the Algorithms category.
An example of a type (2) question: How can I encode a tree into a string format such that the tree can be constructed back from the string encoding? Also encoding should be efficient both time and space-wise.
If a question mentions a book, I usually put it in this category, even if it’s also related to topics like algorithms or interviews. People don’t ask about competitive programming books as often as they ask about other topics, so it doesn’t hurt to give this category a few extra questions.
- How do I get the most out of the book “Cracking the Coding Interview” by Gayle L McDowell?
- I want to learn data structure and algorithms, should I start with CLRS?
This is a small category, but there are enough specific questions on this topic to justify separating them out. In addition to coaches, it’s a good place for questions about other people who provide competitive programming advice. For example: How can I find a mentor to help me prepare for IOI?
Competitive Programming vs. Professional Programming
Not all questions in this category deal with professional programming directly. Sometimes people are preparing for a professional programming career using activities like personal projects or open-source contributions. For example: Between competitive programming and projects, which is more important?
Popular questions in this category ask about topics like the benefits of competitive programming compared to other types of programming, transitioning from a focus on CP to a focus on programming as a job, whether CP is good preparation for work, and what distinguishes the CP approach to problems.
The key element of competitive programming contests as compared to other CP activities is that contests pit competitive programmers against each other in real time. A contest might last hours or days, but participants work on a fixed set of problems under a deadline. In contrast, a question about working through a set of problems at one’s own pace would not appear in this category, even when that set of problems is public and available for other competitive programmers to work on.
Questions in this category cover topics like preparing for contests, contest rules, contest schedules, pros and cons of different contests, team strategy, people’s experiences at a particular contest, whether it’s worth preparing for a contest, and lists of topics for a contest.
There are only a few courses that specifically cover competitive programming, and people want to know about them. Other questions in this category ask about courses that don’t cover competitive programming directly, but teach algorithms.
I collected my question list based on topics assigned to questions by Quora users. But these topic assignments aren’t always accurate. Question writers or Quora bots sometimes assign CP-related tags to general programming questions. In those cases, I put the question in the Exclude category. Often I’ll also remove the incorrect topics in Quora. But I can’t stop people from adding them back, so the Exclude category ensures that it won’t show up again in my list.
This category is for questions about CP at a meta level, rather than a specific aspect of CP. Questions in this category ask things like what CP is, whether it is useful or not, whether to quit, why it gets so much attention, and what various people or groups think about it.
Since questions comparing CP with other types of programming are so common, they go in their own category, Competitive Programming vs. Professional Programming.
People often ask about improving their competitive programming skills without reference to an algorithm, contest, online judge, job, language, or other specific target. That’s the reason for this category.
It’s common in the Competitive Programming topic to see questions about when to start working on CP, what to learn before starting it, and how to approach it as a beginner. Those questions go in this category.
Interviews and Jobs
This is a large category that I could split into subcategories like algorithms for interviews, getting started at interview preparation, etc. but I’m leaving it in it’s own category so it doesn’t overwhelm the others. While I want to include this category because of the close relationship between competitive programming and coding interviews, the FAQ is primarily about competitive programming.
One change in this revision: I’m including in this category questions about how CP experience affects admission to university (undergraduate or graduate), which is analogous to being hired into a company.
If a question asks for specific information about a programming language (doesn’t just mention a language), I usually put it in this category.
For questions about language-related tools, like compilers and editors, there’s a separate Tools category.
Most questions that mention math topics should go here, unless they’re about math-related algorithms (in which case they go in Algorithms).
If a question is specifically about an online judge, how it works, its schedule, etc., it belongs here. If mentions an online judge but is really about algorithms, problem lists, or getting better at competitive programming, then it belongs in one of those categories.
Sometimes a question asks about a company or other organization, but isn’t about interviews and jobs at that company, or about the people who work there. Examples include questions about the business model of a CP-related company, or the pros and cons of joining an organization from the perspective of someone with a competitive programming background.
This category is for questions about named individuals or specific groups. Examples of groups include employees of a company, students at a school, or citizens of a country.
This is for questions about problem-solving in general, not questions asking how to solve a specific problem. Examples include how long to work on a problem before looking at the solution, where to find problem lists, and requests for favorite problems.
This is a new category for this update. It’s for questions about the mental game of competitive programming.
- How do I control anxiety during programming competitions?
- I have lost my appetite for coding. What can I do to bring it back?
As mentioned above in Algorithms, questions that ask how to solve a specific programming puzzle go in this category. I also include specific interview questions in this category.
In addition to traditional time management questions and questions about practice schedules (e.g., How do I solve 300-400 problems on SPOJ in 120 days?), I’m also including other time-related questions in this category. For example: Is one year sufficient to be a top level competitive programmer?
Questions in this category are mainly about software, but I did see one hardware question: Which laptop do all top class competitive programmers use? (No guarantees on how useful that question is).
I’m seeing enough questions about competitive programming boot camps and training camps that I created a separate topic for them in this revision.
This is for questions about websites not associated with online judges, organizations, people, or other previous categories. For example: Which channel/tutorial on YouTube is best for learning algorithms or data structures?
(Image credit: The City of Toronto)