Aggregation of Marginal Gains


If you want to get better at something, you need a plan. Improvement doesn’t happen on its own. But once you have that plan, a bigger challenge is executing on it along with your other responsibilities.

One way to increase your chances of following through on changes is not to try to make big changes all at once. Instead, make small changes, but make them regularly. Let’s see how that works.

« Continue »

Programmer Skills (and Salaries) According to Stack Exchange


In July of this year, Stack Exchange Inc. released an online tool that lets you calculate how much money you would make if you worked there. The number you get out of the tool is based on four factors. There’s a salary floor based on the position you select (e.g., Developer or Product Designer), an adjustment based on your years of professional experience, and a bonus for living in one of a few high cost cities (New York, San Francisco, or London). Finally, the tool takes into account your skills.

Having written in the past about skills for programmers, I was interested to see what Stack Exchange decided was important for success in a programming job. Here’s what I found.

« Continue »

Getting Past a Competitive Programming Plateau


In the Peak book, the authors describe the following learning challenge in a section called “Getting Past Plateaus”:

When you first start learning something new, it is normal to see rapid — or at least steady — improvement, and when that improvement stops, it is natural to believe you’ve hit some sort of implacable [immovable] limit. So you stop trying to move forward, and you settle down to life on that plateau. This is the major reason that people in every area stop improving.

The concept of the learning plateau is one way to describe how people approach learning, work, and self-improvement. With a new skill, there’s an initial period of excitement driven by how easy it is to make progress. Then a plateau arrives, and you have to decide whether to push through it or stick with your current skill level. And even if you push through it, you can look forward to another plateau where you’ll get to make the same decision again.

Skill Components

For most skills in life, there’s no need to push through plateau after plateau. It’s not worth the effort to become an expert in driving a car unless that’s your hobby or profession. But for the field that you specialize in, you probably do want to keep getting better. So what’s the secret to avoiding or conquering a learning plateau? The authors of Peak have something to say about that as well:

Any reasonably complex skill will involve a variety of components, some of which you will be better at than others. Thus, when you reach a point at which you are having difficulty getting better, it will be just one or two of the components of that skill, not all of them, that are holding you back.

According to this approach, the way to resist the plateau effect is to break down your target skill into its constituent parts, and be prepared to target those parts individually. In the book, the authors use typing speed as an example. Everyone who learns to type eventually reaches a speed plateau. Physical constraints mean you can’t keep increasing your typing speed forever. But you may plateau at a speed that is below your physical limits, or at least is slower than you want.

One idea for increasing your typing speed is just to push yourself to type faster whenever you get the chance. But according to the authors, there’s a more effective way. Rather than trying to type faster 100% of the time, try typing faster for just 15-20 minutes per day. During that time, document the mistakes you make. It’s likely that some letters or letter combinations will trip you up more than others. Once you identify them, you can more efficiently target those components, rather than trying to get better at the skill all at once.

Typing happens to be one component of the skill known as competitive programming. If your typing skills are slower than average, or if you’re competing at a high level in timed contests, working on your typing speed might be worthwhile. But for most competitive programming enthusiasts, working on other skills is more likely to produce results. What are those other skills?

« Continue »

Three Ways to Solve UVa 108

Window Grid

UVa 108 is rated as a Level 1 (easy) problem by uHunt, but its solution nevertheless contains some interesting techniques. Here’s a summary of the problem statement:

Given an $N \times N$ array $A$ of positive and negative integers, print the sum of the nonempty subarray of $A$ that has the maximum sum. The sum of a subarray is defined as the sum of its elements.

uHunt lists this problem in the section called Max 2D Range Sum, a subcategory of Dynamic Programming. But before we get into the dynamic programming solution, let’s examine the Complete Search approach.

« Continue »