CPFAQ: Good Answers to Bad Questions

42

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 at the end of last week’s post, it’s hard to write a good canonical question title. Fortunately, there’s a Quora tradition in which answer writers provide high-quality answers to questions that might be less than stellar. I can take advantage of such questions in CPFAQ by reading all the related questions (and associated comments and answers), writing a canonical title that clearly expresses what the question writers want to know, and including links to the original questions.

Here are some categories of bad question/good answer pairs I have observed on Quora.

What are they asking?

Summary: The question almost makes sense, but the wording is ambiguous enough that you can’t tell exactly what the author is asking.

Example: How can I decide if I get $O(n)$ solution for a problem?

The two most likely interpretations of this question are:

  • How do I know if my solution runs in $O(n)$ time?
  • How do I know if an $O(n)$ solution exists for the problem?

The second interpretation is more interesting, and it’s the interpretation that the popular writer Brian Bi uses in his answer. But another writer who answered this question seems to interpret it as How can I decide whether to use an $O(n)$ solution to a problem? That could be something to consider if you have an $O(n)$ solution, but choose to use a simpler and slower solution to save implementation time.

Are they really asking that?

Summary: It seems unlikely that the question writer intended the question to mean what it literally says.

Example: Is it possible to be a good programmer without competitive programming? How is it possible?

Quora users have merged several questions into this question. One of the merged questions expresses more clearly what the question author probably intended to ask: To become a good programer, is it necessary to participate in programing contests?. That question received a simple answer: “There were software engineers long before there were programming contests.”

It’s hard to tell if people write questions like this in a deliberately provocative way to attract attention to it, or if they’re just writing what they’re thinking. But whether or not the wording is intentional, it attracts numerous answers, mostly from people eager to prove how little they care about competitive programming. Even well-known competitive programmer Bohdan Pryshchenko writes in an answer that he doesn’t “see much connection between” competitive programming and professional programming. That seems overly critical.

Question title needs editing

Summary: The question is clearer than in the first category, but still needs editing.

Example: How many hours do top coders code?

Hours per day? Total hours to win a contest? Are we talking about people who compete on the Topcoder online judge, top competitive programmers, or all top programmers?

This question’s answer writers interpreted it as referring to all top programmers. The question has TopCoder and Competitive Programming tags, but the Quora Topic Bot added them, so perhaps they don’t reflect the question writer’s intention.

The top-voted answer suggests a tool called WakaTime that measures time spent in an IDE. At the top of the leaderboard are developers who spend an average of almost 12 hours a day coding. That doesn’t sound healthy.

Question is a Quora meme

Summary: The question is not an exact duplicate of an existing question, but it’s similar to questions that people often ask on Quora.

Example: I am 20 years old who just started programming. Am I too old to be able to be good at competitive programming?

Competitive programming topics and other programming topics on Quora seem to attract these “Am I too old” questions. Someone even collected 30+ examples and listed them in a Quora blog post.

Why do people post these questions? I like this answer from John Delaney:

I believe the question is overloaded.

Some, perhaps most, folks are not really questioning their ability to learn, they are questioning if the benefit (a good job with a good pay rate) is worth the cost in terms of money, time, effort, and forgone opportunities.

Some are worried about being able to get hired at an older age as a developer.

Some are concerned about having enough time left in whatever career or life stage they think they are in to master the profession.

Question contains a mistaken assumption

Summary: The question contains an incorrect assumption which is correct by the answer writers.

Example: Why doesn’t scanf() and printf() work in competitive coding?

This is the simplest type of bad question/good answer pair. The question writer made an incorrect assumption about scanf and printf, and it led them to ask this question. Answer writers correct the assumption, thereby answering the question. The answer, in this case: there’s nothing wrong with using scanf and printf when writing competitive programming solutions in C/C++. The question writer simply made a C/C++ syntax error.

(Image credit: Mariela De Marchi Moyano)