One year ago, I started writing here on the topic of deliberate practice techniques for software developers. This is my 52nd weekly post for 2015. With the year coming to an end, let’s review the story so far.
From time to time, I’ll run across a UVa problem description that makes liberal use of mathematical notation. UVa 927, the first starred problem in uHunt Chapter 3, is one of those. uHunt classifies it as a Level 4 problem, but most of the challenge is in interpreting the problem description. Once you figure out what it’s asking for, the problem itself is straightforward.
Here are two approaches you could take to learn something new:
Passive review: Consume an explanation of the topic you’re trying to learn. For example, read a textbook chapter, watch a video lecture, or read an online article on the topic.
It shouldn’t be hard to guess which of these approaches is more effective at reinforcing what you know about a topic. Although you have to consume new information at least once through a lecture or other means, continuing to passively consume the same information repeatedly doesn’t help you learn it much better. The brain seems to take retrieval more seriously than storage: neural connections are strongly reinforced when information is actively used, but information that merely arrives through the senses receives a comparatively weak boost.
It’s impossible to measure developer productivity. At least, that’s what the experts say. Martin Fowler came to that conclusion over 10 years ago in a classic article, and the consensus hasn’t changed since then. My favorite recent article on the subject is by Jim Bird, a development manager and CTO.
So let’s take that as a given: Measuring developer productivity reliably and objectively is a hard problem, maybe an impossible one. But rather than rehash the standard arguments, I’m going to change the rules a bit.
Which of the following statements best describes your opinion of competitive programming?
-2: It is harmful to the software industry, and should be abolished.
-1: It’s no worse than any other form of entertainment, but it has no educational value.
0: It may help some people get better at programming, but it’s a niche hobby.
1: It’s a good way to get better at programming. Every programmer should try it out a few times to see what they think.
2: It should be a required part of all college algorithms classes.
I’m not conducting a survey. These are just statements representing the range of opinions that I have seen while reading the Competitive Programming topic on Quora. (Actually I’m not sure if I have ever seen (2)).
As with any controversial topic, it’s common for people to talk past each other when discussing the pros and cons of competitive programming. In this post, my goal is to express the various arguments as clearly as I can.
That’s not to say that I am neutral on the matter. My opinion is closest to (1). I have written a post about reasons to study competitive programming, and of course much of the content on this blog deals with using competitive programming puzzles for learning. However, I’m always interested to hear differing opinions, especially when they have good arguments to back them up.
With that framework in mind, let’s take a look at what people are saying about competitive programming.