Why is Competitive Programming Hard?

Difficulty

When I came up with 12 Reasons to Study Competitive Programming, I picked the following for reason #3: Studying competitive programming gives you a way to practice solving hard problems.

(As I pointed out in the article, this is also a reason that some people give for not studying competitive programming. They claim that most software developers work only on trivial problems. So they don’t see any reason to practice solving hard problems. That has always seemed to me like a backwards argument).

What does it mean for a problem to be hard? To answer that, I’ll borrow part of the definition of deep work: a problem is hard if it requires specific training and experience to solve. While some ad-hoc competitive programming problems can be solved by any programmer willing to spend an hour or so thinking and coding, modern contests contain problems that only programmers who have spent considerable effort practicing can solve in a reasonable amount of time.

That’s the type of hard problem that I’m talking about. To be hard, a programming problem doesn’t have to involve an unsolved research question. But it does need to provide a challenge to people who spend a lot of time solving puzzles.

What makes competitive programming hard? Here are some factors.

« Continue »

Questions About Competitive Programming

Topics

If you have a question about competitive programming, Quora is a good place to find the answer. Quora’s Competitive Programming topic attracts experienced competitive programmers, and they have written answers to a variety of common questions that beginning and intermediate programmers have about the subject.

It has been a few years now since the Quora topic was created, and most questions about the fundamentals of competitive programming have been asked and answered. While there are still new questions about specific problems, and about current events, it’s rare to see a new question about fundamentals.

« Continue »

The Benefits of Demystifying Tacit Knowledge

Knowledge

Can you learn anything you want by reading a book? A blog post by Scott Young last week got me thinking about claims that some subjects are unteachable. Here are some examples:

Claim: Some knowledge and skills can only be learned using an apprenticeship approach.

  • Scott contrasts two learning techniques. One is the standard school model that we’re all familiar with: a student reads textbooks, attends lectures, and turns in assignments. The other model has more in common with apprenticeship: a student finds an expert practitioner, observes what they do, and tries to replicate it.

Claim: You have to figure out your own path to success. You can’t learn the path from someone else.

  • In his book Linchpin, Seth Godin writes: “Telling people leadership is important is one thing. Showing them step by step precisely how to be a leader is impossible.”

Claim: It’s not always possible to teach someone to be a top performer, despite the best efforts of teacher and student. Factors other than practice time explain why some people perform better than others.

  • In her contribution to the deliberate practice debate, psychological scientist Brooke Macnamara published a meta-analysis arguing that practice doesn’t have a large impact on the performance differences between expert performers.

« Continue »