Applying the Learning Stages to Learning a Programming Language

Facebook share
LinkedIn share
Twitter share

As described in our first article on Learning Stages, learning any particular subject is not (as most people believe) an atomic activity. Instead, learning is a process that progresses through stages.

Our second article, Studying in the Learning Stages: A Guide for Students, explained how to proceduralize the process - how to study and learn in each of the stages.

This article describes how to learn a programming language, based on your understanding (and implementation) of the process.

This is an especially relevant example, as software-related careers (developers, architects, admins...) are characterized more or less by constant change, and thus a need to learn continuously. Most of this learning tends to be done independently - outside of a formal learning program. Understanding and applying the Learning Stages framework is thus as (or even more) important for self-learners as it is for traditional classrooms.

This article is organized in four sections:

  1. Programming Language Learning Stages
  2. Instructional Resources Required for Each Stage
  3. Learning Techniques Beneficial to Each Stage
  4. What Does This Mean for the Student?

1. Programming Language Learning Stages

It is best to have a good understanding of the Learning Stages process before you read this article. To recap, at the top level, the three Learning Stages are:

  • LS1: Introduction - Initial exposure to the subject's topics and concepts
  • LS2: Absorption - Internalizing the concepts and their details
  • LS3: Application - Using the concepts to solve problems

The student's understanding develops (deepens) as they advance through these stages. Specifically, their understanding develops through study, and by performing tasks of increasing complexity and sophistication.

It is important to understand that the stages describe learning at the concept level, rather than the level of the entire subject. IOW, you go through these stages as you learn each new concept. We discuss this methodically in the Learning Stages Study Guide.

In the context of learning a programming language:

LS1 (Introduction) is about understanding what things exist in, or are employed by the language. These things include data types, functionality (keywords, libraries, error handling, etc), structural paradigms, and execution paradigms.

LS2 (Absorption) is about understanding how to use those things - what you can/can't do with them, how they compare/contrast with each other, etc.

LS3 (Application) is about developing comfort in working with those things, and competence in solving problems using them.

2. Instructional Resources Required for Each Stage

Each stage requires that the student find and use different types of instructional resources. Most of these are general purpose, but some (in this example) are specific to programming/programming languages.

Each stage prescribes a category of resources, in which the student must use at least one resource in order to be able to learn at that stage. But using more than one at each stage is helpful, because all resources have flaws.

LS1 (Introduction): books, classes, recorded lectures, MOOCs

LS2 (Absorption): concept-specific adjunct sources (e.g. articles, blog posts), FAQ lists, educational software (e.g. interactive visualization tools), study groups, Q&A sites, forums, chatrooms

LS3 (Application): reference documents, tutorials, HOWTOs, structured practice exercises (e.g. Euler Project, Ruby Koans), programming projects, educational games1

As the student progresses through the stages, their use of the resources is cumulative/additive - they use new resources in addition to those from the prior stage(s).

3. Learning Techniques Beneficial to Each Stage

In each stage the student benefits from using different study/learning techniques. Most of these are general purpose, but some (in this example) are specific to programming/programming languages.

LS1 (Introduction): reading/viewing, note-taking, highlighting, SQ3R

LS2 (Absorption): rereading/reviewing2, summarization, spaced repetition (SRS), self-explanation, concept mapping techniques

LS3 (Application): reading/understanding other people's programs, modifying existing programs, writing new programs, testing, experimenting

Each stage prescribes a category of techniques, in which the student can employ one or more techniques in order to learn more efficiently/effectively at that stage. Some of the techniques are roughly interchangeable (e.g. note taking vs highlighting) and do not really benefit from combined use. Others (e.g. SRS and concept mapping) provide substantial benefit in combined use.

As the student progresses through the stages, the use of new study techniques tends to replace those used in the prior stage(s).

4. What Does This Mean for the Student?

The essential thing to understand from this article is that you need multiple instructional sources, and multiple learning techniques, to learn a programming language. The question is not "should I read a book or should I write programs?" The question is "which book(s) should I read, and which programs should I write?"

There is no magic instructional source, or study technique, that will teach you all that you need to understand in learning a programming language - or anything else.

As you may expect, though, we here at SRSoterica understand spaced repetition (SRS) to be the most effective technique for LS2 (Absorption) learning. There is a substantial and growing body of research to support that claim.

Finally, although this article describes how to apply the Learning Stages to learning a programming language, it generalizes to learning any technology topic (tools, frameworks, platforms...). Indeed, it generalizes to learning any subject.

  • 1 - The difference between educational software and educational games is that the purpose of educational software is to demonstrate something to the student - to help them develop knowledge. The purpose of educational games is for the student to demonstrate that they have acquired the knowledge - by working their way through the game.
  • 2 - The difference between reading/viewing and rereading/reviewing is that the goal for the former is reading through the description of a concept to gain a shallow, but otherwise coherent understanding of what is described. The goal of the latter is reading/viewing for depth of understanding. The former proceeds mostly linearly. The latter is targeted, nonlinear.

Learn More


Michael Reichner is the Founder of SRSoterica (this site), and the author of spaced repetition system (SRS) flashcard decks for absorbing the concepts that underlie complex programming subjects.

Discuss this article on the site that it was linked from, or at the SRSoterica subreddit.

Last updated: April 18, 2020

Tell your friends and colleagues about this article:

Facebook share
LinkedIn share
Twitter share

Would you like to be notified about new articles?

Do You Need to Learn Python? Do You Need to Learn it Better?

SRSoterica makes peerless Spaced Repetition System (SRS) flashcard decks for learning complex technology subjects. With our Python decks, you don't just memorize facts, you learn the concepts that are described by the facts. You learn when, why and how to use Python functionality, in everyday situations.

Browse our Python SRS decks

Our products are targeted at the Absorption stage of the learning process. We bring subject matter expertise, SRS expertise and instructional design expertise to every deck that we craft. You will come to understand Python at a much deeper level than most other programmers.