CPFAQ: Defining Competitive Programming Terms, Part 2


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 wrote a couple of weeks ago, the CPWiki now has a competitive programming glossary. This week, I’ll be discussing goals and standards for the glossary.

Defining Terms

The most obvious purpose of a glossary is to define words. When reading Quora or another Web resource, it’s useful to have a single page defining common competitive programming terms. Someone new to the space might want to get a quick summary of the difference between Topcoder and Codeforces. And even a regular visitor to Quora’s competitive programming topic might want a reminder about what Codevita is, or how Amritapuri relates to the contest scene. So the first priority for the glossary is to present short definitions for a set of competitive programming terms.

Putting Terms in Context

The difference between a glossary and a general-purpose dictionary or encyclopedia is that a glossary defines terms in a particular domain. This includes terms specific to that domain, and also terms with both a general and a specific meaning. For example, problem, contest, and judge are common English words, which might make it difficult to look up their specific competitive programming meanings. The glossary can help by defining each term only in the context of competitive programming.

Maintaining Consistency

The glossary exists alongside a range of competitive programming resources that includes the CPWiki, the CPFAQ, the RedGreenCode blog, and Quora answers. When I’m contributing to those resources, I want to be consistent in how I use terms. For example, I want to be clear about the relationship between a programming contest and an online judge, and which of those terms applies to each event or resource.

Creating a Comprehensive List

Because the glossary consists of short definitions, making it comprehensive will be easier than meeting a similar standard for the CPWiki. As an inclusion standard, I’m starting with the assumption that it’s worth defining any term that people mention on Quora in competitive programming and related topics. This is more inclusive than Wikipedia, which requires that topics be notable (covered in depth in a reliable third-party source). It’s also more inclusive than the Awesome Competitive Programming list, which rejects contributions that aren’t sufficiently notable based on the editor’s standards.

Capturing the Current State of Things

Finally, the glossary should reflect the current state of competitive programming terminology. So if people start discussing a new online judge on Quora, it should have an entry in the glossary. And older entries should be kept up to date.

(Image credit: Quinn Dombrowski)