CPFAQ: Question Categories, Part 2

Books

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.

Using my QuoraClassifier tool, I’ve gotten about 25% of the way through my question list. So I thought it was the right time to revisit the criteria I’m using to assign primary categories.

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:

Algorithms

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.

Books

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.

Examples:

Coaches

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.

Contests

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.

Courses

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.

Exclude

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.

General

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.

Getting Better

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.

Example: Is practice mean everything for competitive programming, or do I have to have an Einstein brain?

Getting Started

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.

Languages

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.

Math

Most questions that mention math topics should go here, unless they’re about math-related algorithms (in which case they go in Algorithms).

Online Judges

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.

Organizations

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.

People

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.

Problems

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.

Psychology

This is a new category for this update. It’s for questions about the mental game of competitive programming.

Examples:

Specific Problems

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.

Time Management

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?

Tools

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).

Training Camps

I’m seeing enough questions about competitive programming boot camps and training camps that I created a separate topic for them in this revision.

Example: What is it like to attend famous programming camps like Petrozavodsk camp, USACO camp, or Chinese IOI camp?

Websites

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)