CPFAQ: Question Categories

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.

As I mentioned last week, I have been writing and categorizing canonical questions for the FAQ. In this week’s post, I’ll describe the categories I have so far.

I have written before about collecting, cleaning up, and classifying topics in the Quora topic ontology. Although I think I’ll be able to improve the QTO using my ongoing categorization work, there are a few differences between Quora topics and the categories described in this post:

  • Although Quora topics are arranged in a hierarchy, child topic names often include the parent topic name or other identifiers. For example, Algorithms in Competitive Programming is a child topic of Competitive Programming. They can’t just name it Algorithms because there’s already a topic with that name. For my purposes, I don’t have to worry about disambiguating my topic names, since they’re all implicitly related to the master topic of Competitive Programming.
  • Quora topics can be nested to (as far as I know) any depth. For my categories, I’m sticking with a fixed four-layer depth: the implicit master topic (competitive programming), the primary category (described below), the canonical question title, and the Quora question title.

Primary Categories

A Primary Category is the main topic of a question. Although questions often address multiple sub-topics, I’m selecting one as the main topic. Here’s the list of primary categories, with the scope that each one covers, example questions, and notes about when to choose one category over another. Where applicable, I also list the corresponding Quora topic.

Algorithms

Quora topic: Algorithms in Competitive Programming

Scope: Algorithms (e.g., binary search), data structures (e.g., tree), and techniques (e.g., dynamic programming) for solving competitive programming problems.

If a question asks for a list of problems that use a particular algorithm or data structure, it belongs in the Problems category rather than this one.

Questions in this category cover areas such as learning a specific algorithm or technique (How can I get good at dynamic programming?), getting better at algorithmic thinking in general (What can I learn right now in just 10 minutes that could improve my algorithmic thinking?), and deciding which algorithms to learn (What are the algorithms required to solve all problems (using C++) in any competitive coding contest?).

Books

Scope: Books to use while studying competitive programming. Books in this category may be specifically about competitive programming (e.g., Competitive Programming 3), or about related topics like algorithms (e.g., CLRS) or mathematics (e.g., Concrete Mathematics).

Example question: What are some good books for competitive programming?

Coaches

Scope: Competitive programming coaches — finding a coach, coaching a team, the role of coaching, and the coaching process.

If the question mentions a specific person who happens to be a coach, the question should go in the People category. If the question is not about a specific coach, but asks how coaches approach some other topic (like algorithms), then it should go in the category related to that topic.

Example question: Where can I find a competitive programming coach in Latin America or via the internet?

Competitive Programming vs. Professional Programming

Scope: Comparing competitive programming with professional software development.

Example questions:

Contests

Quora topic: Competitive Programming Competitions

Scope: Programming contests with a specific start and end time, held in person or online.

This category is closely related to Online Judges, since several major online judges also host programming contests. Questions about a specific contest, even if hosted by an online judge, belong in the Contests category. The Contests category also clearly applies to questions about contests like ACM-ICPC or Google Code Jam.

Example question: What is a good way to prepare for Google Code Jam?

Courses

Scope: Courses to take while studying competitive programming.

Example question: What is the best online data structure and algorithm MOOC, or course in C or C++?

General

Scope: Competitive programming in general, not any particular topic related to competitive programming.

Example questions:

Getting Better

Quora topic: Training for Competitive Programming

Scope: Improving competitive programming skills.

This is the subtext of almost every category in this list, but people sometimes just ask about it directly.

Example questions:

Getting Started

Scope: Getting started with competitive programming.

This category is for questions whether the author identifies as a competitive programming novice.

Example questions:

Interviews and Jobs

Quora topic: Programming Interviews

Scope: Programming interviews, online interview sites, and using competitive programming to prepare for programming interviews.

Competitive programming is useful for many reasons, but the most popular reason is getting a software job. The similarities between programming contests and programming interviews are just too clear to ignore, even if studying competitive programming may be overkill for the types of problems asked in interviews.

This category covers a wide range of subtopics related to interviews and jobs. Examples include:

Languages

Scope: Programming languages in the context of competitive programming. What languages to use, what language features to use, pros and cons of each language, and other language-related topics.

Example questions:

Math

Scope: Math as it is used in competitive programming.

You can’t do well in programming contests if you only have math skills and haven’t done much programming (there are separate contests for competitive math). However, competitive programming problems do tend to be math-oriented, so having a math background will give you an advantage compared to people who only focus on programming.

Example questions:

Online Judges

Scope: Web sites that present competitive programming problems, accept a solution, and judge whether a solution is correct or incorrect. Some online judges also hold real-time competitions.

This category is closely related to Contests, since some online judges host programming contests. The Online Judges category is for questions about the pros and cons of each online judge, how to use an online judge, and similar questions.

Example questions:

Organizations

Scope: Competitive programming as it relates to an organization like a company or university.

Many universities train competitive programming teams. Software companies also have an interest in competitive programming, though most questions about companies belong in the Contests or Interviews and Jobs category. If a question is about a company and competitive programming specifically (not a company’s programming contest or online hiring tool), then it belongs here.

Example questions:

People

Quora topic: Competitive Programmers

Scope: The competitive programming advice, opinions, or background of specific people.

One way to approach the canonical How do I get better at competitive programming question is to ask how a specific person achieved success, or what advice they have for others. Those are the most popular question types in the People category. Besides those, this category is also for questions that mention specific people or groups of people.

Example questions:

Problems

Quora topic: Solving Competitive Programming Problems (there’s also a topic called Competitive Programming Problems, but it currently has 0 questions)

Scope: Questions about competitive programming problems in general, or about what problems can be used to practice a particular algorithm/data structure. If a question describes a specific problem (usually asking how to solve it), it belongs in the Specific Problems category.

Example questions:

Specific Problems

Scope: Specific competitive programming problems. Usually these questions describe or reference a problem, and ask how to solve it. So these questions aren’t very useful unless you’re already working on that problem, or you plan to.

Example questions:

Time Management

Scope: Time management techniques for studying competitive programming, and examples of how others have managed their time.

Learning competitive programming, like learning any challenging technical subject, requires more than just assembling the right content. It requires techniques to free up focused time for concentrating on the topic. Questions in this category deal with quantity and quality of study time.

Example questions:

Tools

Scope: Software tools for competitive programmers.

Example questions:

Websites

Scope: Online resources for learning competitive programming.

This category list is about questions on an online Q&A site that cover a computer-related topic. So almost everything listed above will have some relation to websites and online resources. This category is for online resources that don’t fit in another category.

Example questions:

(Image credit: Gael Varoquaux)