This week, another attempt is underway to create a competitive programming site on the Stack Exchange network.
It’s been tried before. In early 2013, a similar proposal was put forward. But a year later, the proposal still hadn’t met the minimum activity requirements defined by Area 51, the part of Stack Exchange where new sites are proposed and discussed. In keeping with Area 51 policy against keeping old proposals around, the 2013 proposal was deleted. It lives on as a snapshot at the Internet Archive, and as a Codeforces blog post.
Will things turn out differently this time around? It’s not clear that popular demand for a Competitive Programming Stack Exchange (CP.SE) site has increased in the last few years. And if a new site is going to make it past the Definition phase on Area 51, there will need to be demand. Stack Exchange rules require that a potential new community demonstrate that it can sustain question and answer activity. That’s to prevent underused sites from hanging around the network but not providing any value.
So we’ll see what happens as people start following the CP.SE proposal. In the meantime, it’s worth considering what other sites are out there to fulfill the need for competitive programming Q&A, and whether we need another option. That’s the topic for today.
The Goal of Stack Exchange
For programmers trying to get their code working, Stack Overflow was as significant an invention as Usenet was for early Netizens. No other Web resource for programmers came close to providing the explosion of useful information that Stack Overflow offered.
The popularity of Stack Overflow made possible the Stack Exchange network and its collection of sites on various topics. With the original Stack Overflow site as a guide, the other sites adopted specific rules for building successful Q&A communities. Here are a few of the rules from the What makes good questions? section of the Area 51 FAQ:
Target your site at experts
The FAQ has this advice about getting experts to support a Q&A site:
To attract experts, you need a site where people are asking very interesting and challenging questions, not the basic questions found on every other Q&A site. Your goal is to make it clear that this is a professional site.
The word professional shouldn’t be taken too literally. There are Stack Exchange sites about video games, home improvement, and speculative fiction, and they aren’t restricted to pro gamers, general contractors, and published authors. However, actual professionals should still find the questions on those sites “interesting and challenging,” even as they share the site with enthusiasts. And for some sites, there is an explicit policy separating experts and non-experts. For example, Stack Exchange has two math-oriented sites. Math.SE is for enthusiasts and students. MathOverflow is for professional mathematicians.
“Ask real, expert questions“
Stack Exchange recommends challenging questions rather than basic questions based on the following claim: “pro sites WILL attract the enthusiasts, but not the other way around!” In other words, if site participants ask questions that are interesting and challenging enough to attract experts, then enthusiasts will show up too. Enthusiasts will be interested in reading the experts’ answers, and maybe writing answers as well. But if a site contains only questions that experts have seen countless times on forums, the site won’t hold their interest. That leads to a site with just enthusiasts, which is not the audience you need to get the hardest questions answered.
I’ll propose this definition of expert for a competitive programming Q&A site: an expert is a competitive programmer who performs at a level that requires dedicated training and practice over a medium to long period of time. For example: the programmers who make it to (and stay in) Division 1 in Topcoder or Codeforces are competitive programming experts. When they answer questions, they do so based on their experience in upper-division contests, not just based on what they have heard from others. In contrast, Division 2 contestants are competitive programming enthusiasts. That division is open to everyone, so it includes people who have started recently, or who have not yet mastered the subject.
“Ask questions that can be answered“
Here’s a Stack Exchange policy that clearly separates it from Quora and other competing sites:
Avoid asking questions that are subjective, argumentative, or require extended discussion. Stack Exchange does not work well with questions like “Which is the best…”
Quora thrives on subjective questions. Consider these questions, which are some of the most popular in the Competitive Programming topic:
- How is competitive programming different from real-life programming?
- What are some of the best websites to learn competitive coding?
- What is the best strategy to improve my skills in competitive programming in 2-3 months?
- What sucks about competitive programming?
It’s hard to keep questions like these off a Q&A site, because they are fun and they attract attention and activity. Even some experts spend time answering them. But they are not a good long-term investment for a site, because they don’t help with the central goal of a professional community: helping people get better at what they do. A serious competitive programmer trying to make it to the next level isn’t going to get any useful information out of a question like “What sucks about competitive programming?”
Once you remove the subjective questions, you have to replace them with something. But serious and objective questions are hard to ask and answer. A Q&A site trying to succeed without subjective questions will need dedicated effort from people who accept the Stack Exchange premise about building a professional community. Participants will need to find competitive programming problems, try to solve them, and ask well-researched questions when they get stuck. Other participants will have to read the questions, understand what is being asked, and formulate good answers. It’s a lot of work.
Why Another Competitive Programming Q&A Site?
A core principle at Stack Exchange is that building a successful Q&A site requires building a successful community. The values and rules that a community embraces will affect how the site evolves far more than the software that the site is built on. And once community standards are in place, they can be hard to change.
So as useful as the Stack Exchange software is, it’s not reason enough to create another competitive programming Q&A site. The main reason to create CP.SE is to build a community of programmers with a shared understanding of how competitive programming Q&A should work. To clarify what that means, let’s take a look at the competitors to a potential CP.SE site:
Quora’s Competitive Programming topic (Quora CP)
Quora CP is the place to go to ask and answer general questions about competitive programming. More than a few experts (ACM-ICPC medal winners and coaches, and people at Topcoder/Codeforces red level) actively participate. There’s a lot of good content there.
However, Quora community rules aren’t as strict as those on Stack Exchange. As a result, Quora CP contains a lot of noise, in the form of:
- Duplicate questions: A few times per month, someone discovers Quora CP and decides that they want a personal answer to the question of how they should improve their skills. And they immediately get answers, because there’s not enough peer pressure on Quora against providing new answers to duplicate questions.
- Silly questions like Does Gennady Korotkevich have a girlfriend?, which clutter up the topic.
- Strange questions like Is it possible to be a good programmer without competitive programming?, which get a lot of attention.
The best reason to create another competitive programming Q&A site is to exclude subjective, argumentative, off-topic, and duplicate questions. Otherwise, we might as well stick with the Quora CP topic. It’s well-established, has over 180,000 followers, and has a lot of good content along with the clutter.
When I’m stuck on a specific programming puzzle, I usually look for an editorial about it on someone’s blog. I also write such editorials. For general information on algorithms and data structures, I have Sedgewick’s textbooks on my bookshelf. If neither of those cases applies, that probably means I’m looking for help on language syntax or libraries. That leads me to Stack Overflow. I don’t even have to ask a new question there, because competitive programming solutions use simple syntax and standard libraries, and questions about those topics have all been asked and answered years ago.
Stack Overflow is useful when you have an idea of how to solve a programming puzzle, but you’re having trouble with implementation details. Unfortunately, if you happen to mention that you’re working on a competitive programming problem, or your question involves any competitive programming details, you can run into trouble. So as useful as Stack Overflow is, it’s not a perfect competitive programming Q&A site.
One possible use case for CP.SE is as a venue for people to ask Stack Overflow-type questions without worrying about hiding their competitive programming context. For example, CP.SE site participants would understand that the questioner cannot provide all of the input data because online judge test data is hidden. Similarly, idiosyncratic syntax (e.g., C/C++ macros) used by competitive programmers would be accepted as standard practice. On Stack Overflow, competitive programmers have to explain those things, and they don’t tend to find a receptive audience.
Other Stack Exchange sites
There are three Stack Exchange sites that potentially overlap with CP.SE:
Programming Puzzles & Code Golf (PPCG) is a site “for programming contests and challenges,” which sounds like an exact match for competitive programming. But the rest of the explanation on PPCG’s on-topic page, and the actual questions that are asked on the site, make it clear that the PPCG community uses the site for hosting original contests, not for discussing contests from other sites. There were some early discussions on PPCG Meta about the relationship between competitive programming sites and PPCG. The community brought up concerns about 1) copyright protection for contest questions, and 2) cheating on contests by reading answers. But in practice, neither of these concerns became a problem because competitive programming content never took off on PPCG. During the 2013 Area 51 attempt at creating a CP.SE site, there was another PPCG Meta discussion on the relationship between PPCG and competitive programming, but again the discussion didn’t go anywhere due to lack of interest from the PPCG community.
Puzzling (Puzzling.SE) is a site “for puzzle-makers and puzzle enthusiasts of all levels.” That sounds like it could be relevant to competitive programming, and the site does have a computer-puzzle tag. But in practice, like PPCG, this site is mainly about inventing and answering puzzles, not discussing puzzles from someone else’s contest.
Code Review (CR.SE) is a site “for seeking peer review of your code.” It sounds like CR.SE might accept questions about programming contest solution code. They even have a programming-challenge tag for “off-site challenges meant to offer programmers educational experiences while testing their abilities.” People have submitted their CP solutions and gotten good feedback on CR.SE (example). So of all the Stack Exchange sites, CR.SE seems to be the most relevant to serious competitive programming Q&A.
There are plenty of other sites where people ask questions about competitive programming:
It’s obvious why the Topcoder Forums are used for that purpose.
Other online judges and puzzle-related sites like Project Euler have their own forum-type sections.
Some people even use Reddit as a competitive programming Q&A site.
For discussing a site’s proprietary content, using that site’s discussion software is sometimes the only polite or legal option. For example, Project Euler has forums that unlock once you have solved a challenge, and they have a strict policy against discussing problems elsewhere.
But for general competitive programming Q&A, there’s no reason to use forum software. Stack Overflow was invented to give people a way to do Q&A without having to fight with software like phpBB that wasn’t designed for that purpose. The online judges want to focus on contest software, not Q&A software. As many other communities have done, CP.SE could let Stack Exchange handle the Q&A. Furthermore, a Stack Exchange site would bring competitive programmers together in one place. Some competitive programmers prefer Codeforces over Topcoder, or only like Project Euler. A CP.SE site could be a place to discuss issues that are common to all algorithmic competitive programming practice.
Starting up a new Stack Exchange site is a lot of work. It requires recruiting a critical mass of participants who are willing to ask and answer questions. Hard choices have to be made about what questions are in and out of scope. If the scope is too strict, some people may leave because their favorite question type is off-topic. That makes it harder to keep the site alive. But being too lenient can make the site less appealing to experts, which reduces the quality of the site content.
The existence of the popular Competitive Programming Quora topic makes the task of starting a new community even harder. The same experts that CP.SE would need to be viable have already invested time answering questions on Quora. They have followers there and an answer history, and they’re familiar with the way Quora works.
So what’s the incentive for experts to move to a new platform? As the Area 51 FAQ says, experts look for “interesting and challenging questions.” People become experts by studying and learning. Answering good questions can help them do that. If they see a site filled with questions like Is it too late to start programming at age 10?, they might decide to just move along.
The only way to get a site full of interesting and challenging questions is for people to ask them, and then engage with the answers when they appear. At the same time, moderators have to use their powers to remove questions that don’t meet the quality bar. But they have to be flexible, since there’s no foolproof way to decide whether a question belongs on the site. Even after eight years, Stack Overflow is still making adjustments to their moderation criteria.
Topic and audience
CP.SE is currently in the Definition phase, which means “the topic and audience are still being decided.” People are following the proposal. Some of them are writing sample questions, which others can upvote or downvote based on how well they think each one fits their understanding of the site topic. In this way, the topic gradually takes shape according to the opinions of the community.
My opinion is that CP.SE should focus on the following narrow topic: how to solve specific competitive programming problems. When you eliminate subjective questions, which Quora CP already covers extensively, what’s left are mainly questions and answers about designing and implementing solutions.
The model for this topic idea is Stack Overflow. The Stack Overflow on-topic help page says that the best questions ask about code. The next best questions ask about a specific programming problem, an algorithm, a programming tool, or some other practical and answerable software development problem.
Similarly, the best CP.SE question would include code that the questioner is working on to solve a competitive programming problem. If that isn’t possible, the question would cover a potential algorithm for such a problem, an online judge or other technology used in competitive programming, or another issue specifically related to a competitive programming problem. If a potential CP.SE question can’t be linked to a specific problem, it should get extra scrutiny.
Why the strict rules? It’s all about making the site useful to serious competitive programmers. If I’m trying to get better at competitive programming, I’m going to be spending a lot of time solving competitive programming problems. If CP.SE is going to help me, it will be with ideas for solving those problems. Basic, general questions like What is competitive programming? or Am I a bad programmer if I can’t do competitive programming well? aren’t going to make me any smarter.
If this sounds interesting, the proposed site is waiting for you to define it over at Area 51.
(Image credit: Niranjan)