Red-Green-Code

Deliberate practice techniques for software developers

  • Home
  • About
  • Contact
  • Project 462
  • CP FAQ
  • Newsletter

The Benefits of Demystifying Tacit Knowledge

By Duncan Smith Leave a Comment Oct 5 0

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 »

Aggregation of Marginal Gains

By Duncan Smith Leave a Comment Sep 28 0

Bikes

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

By Duncan Smith Leave a Comment Sep 21 0

Skills

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

By Duncan Smith Leave a Comment Sep 14 0

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

By Duncan Smith Leave a Comment Sep 7 0

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 »

Competitive Programming Training Tips

By Duncan Smith Leave a Comment Aug 31 0

GolfBalls

Over the past couple of weeks, I have been writing about deliberate practice as described in Peak by Anders Ericsson and Robert Pool. The book describes three types of practice: Naïve practice, purposeful practice, and deliberate practice. The latter two types of practice are both effective, but there’s a key difference that makes deliberate practice the best choice. The difference is where your training plan comes from. Purposeful practice can be used with any reasonable plan. Deliberate practice requires that you practice using a plan that has been proven to work by an expert who has gone before you and achieved success in your target field.

How might we find an expert training plan for competitive programming? This type of programming is different from regular software development. So it won’t do to use a standard programming training plan, as provided by a university curriculum or a programming boot camp. Competitive programming is taught as a specialty in some universities, where coaches devise their own training plans to build winning teams each year. But that’s only useful if you’re a student at one of those universities. There are a couple of books specifically about competitive programming, including Competitive Programming 3, which I’m in the process of writing a chapter-by-chapter summary for.

But for today’s purposes, I’m going to cover training advice provided by competitive programming experts on Quora, specifically in answers to the question What is the best strategy to improve my skills in competitive programming in 2-3 months? Over time, that question has become a merge target for a number of similar questions, and quite a few experienced competitive programmers have weighed in with suggestions.

« Continue »

Achieving Peak Performance in Competitive Programming

By Duncan Smith Leave a Comment Aug 24 1

Peak

Last week, I wrote about the concept of mental representations, an important topic in Peak by Anders Ericsson and Robert Pool. According to the authors, learners seeking expertise should have as their goal a virtuous cycle between mental representations and deliberate practice: Deliberate practice should produce more effective mental representations, and more effective mental representations should drive better practice.

This week I’ll be covering the other half of that virtuous cycle, deliberate practice.

« Continue »

Mental Representations for Competitive Programming Practice

By Duncan Smith Leave a Comment Aug 17 0

Brains

Psychologist and deliberate practice pioneer K. Anders Ericsson has been studying and writing about deliberate practice for decades, and his landmark 1993 paper provides an accessible introduction to the topic. This year, he published his first book-length exploration of deliberate practice for a general audience. Peak: Secrets from the New Science of Expertise explains the idea of deliberate practice from the ground up, and provides examples of how people have used it in different fields. I started this blog with the goal of studying and explaining deliberate practice techniques for software developers. This week and next, I’ll be applying the ideas from the book to that end. As usual, I’ll be drawing my examples from competitive programming practice.

The topic for this week: Mental representations.

« Continue »

Three-Dimensional Dynamic Programming for UVa 10755

By Duncan Smith Leave a Comment Aug 10 0

Cuboid

Two weeks ago, I introduced the concept of memoization for dynamic programming, using as an example UVa 787. That problem involves operations on a sequence of integers, a one-dimensional structure. UVa 10755: Garbage Heap increases the problem complexity by organizing its integer data into a three-dimensional shape, a rectangular parallelepiped. Nevertheless, we can use memoization in a similar way to solve this problem.

« Continue »

Getting Answers to Your Competitive Programming Questions

By Duncan Smith Leave a Comment Aug 3 0

QuestionTheAnswers

This week, there was a question on Meta Stack Overflow about the right way to ask Competitive Programming questions on Stack Overflow. To the uninitiated, Stack Overflow might seem like a good place to ask questions about Competitive Programming. It’s the standard place on the Web to ask programming questions, and competitive programming is about programming, right?

« Continue »

  • « Previous Page
  • 1
  • …
  • 39
  • 40
  • 41
  • 42
  • 43
  • …
  • 50
  • Next Page »

Stay in the Know

I'm trying out the latest learning techniques on software development concepts, and writing about what works best. Sound interesting? Subscribe to my free newsletter to keep up to date. Learn More
Unsubscribing is easy, and I'll keep your email address private.

Getting Started

Are you new here? Check out my review posts for a tour of the archives:

  • 2023 in Review: 50 LeetCode Tips
  • 2022 in Review: Content Bots
  • 2021 in Review: Thoughts on Solving Programming Puzzles
  • Lessons from the 2020 LeetCode Monthly Challenges
  • 2019 in Review
  • Competitive Programming Frequently Asked Questions: 2018 In Review
  • What I Learned Working On Time Tortoise in 2017
  • 2016 in Review
  • 2015 in Review
  • 2015 Summer Review

Archives

Recent Posts

  • Will AI Coding Assistants “Deskill” Us? January 30, 2026
  • Stateless by Design: How to Work With AI Coding Assistants December 31, 2025
  • Do Coding Bots Mean the End of Coding Interviews? December 31, 2024
  • Another Project for 2024 May 8, 2024
  • Dynamic Programming Wrap-Up May 1, 2024
  • LeetCode 91: Decode Ways April 24, 2024
  • LeetCode 70: Climbing Stairs April 17, 2024
  • LeetCode 221: Maximal Square April 10, 2024
  • Using Dynamic Programming for Maximum Product Subarray April 3, 2024
  • LeetCode 62: Unique Paths March 27, 2024
Red-Green-Code
  • Home
  • About
  • Contact
  • Project 462
  • CP FAQ
  • Newsletter
Copyright © 2026 Duncan Smith