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:
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:
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.
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).
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).
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.
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:
Would you like to be notified about new articles?
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.
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.