What is Mastery Learning, and How Does It Apply to Coding?
January 25, 2023
Everyone reading this article has personal experience with education — at some point you learned how to read, how to multiply, how to write, and how to experiment. Given your firsthand experience, it’s easy to overlook the intricacies of the learning process. There are innumerable studies on education that investigate the most effective instructional strategies and frameworks. Your schooling likely followed at least one of these educational models without ever cluing you into it.
As a developer, you’ve signed up to be a lifelong learner. Continuing your education outside of the classroom is a necessity of the career. This time around, though, you’re the one who decides which educational model works for you. It’s crucial you know the most effective ways to pursue your education.
Like mentioned above, there are countless strategies to enact and endless frameworks to follow, but which is right for you and your continued learning? One example for consideration, especially fitting for developers, is Mastery Learning. Mastery Learning is the idea that you need to master one concept before moving on to the next. Mastery Learning’s effectiveness comes from using iterative, hands-on subject matter practice, assessing and analyzing knowledge gaps, and leveraging insights gained from failures to fully understand the concept at hand. Then, you can move onto the next concept and repeat the process.
Think of it like building a pyramid. You need to lay a strong foundation before you begin building the next level, repeating the process until you have completed the entire structure. If you have a faulty foundation, your structure is unsound and vulnerable to collapse. Applying Mastery Learning to your personal code education will build a strong knowledge foundation to support you throughout lifelong learning.
What is Mastery Learning?
Mastery Learning is a teaching technique created by Benjamin Bloom based on the idea that each student should master a concept before moving on to the next. It was developed to contradict traditional views on student aptitude and decrease achievement gaps. Traditional teaching methods focused on students’ ability measured against a predetermined amount of time needed to learn. If a student is unable to grasp the subject within the provided time period, they receive a lower grade, and move on to the next unit. If the next unit depends on prior knowledge, the student’s struggle is compounded.
Bloom formalized his "learning for mastery" strategy, today known as Mastery Learning, in 1968. Bloom believed that students' aptitude for a subject followed a normal distribution, with the majority of students somewhere in the middle and outliers both who learn faster and slower. If you gave everyone the same uniform instruction (lecture, reading, video, etc.) then their achievement on the unit would also follow that same normal distribution. Bloom's goal was to adjust the time and style of the instruction (Optimal Instruction) per student so that far more students would master the content.
Guiding Principles of Mastery Learning
For classroom instruction, teachers are encouraged to follow The Five Stages of Mastery Learning (Pre-assessment, Initial Instruction, Formative Assessments, Corrective Instruction, and Summative Assessment). Within the five stages, there are several actionable principles anyone can leverage while learning:
Clear and measurable learning objectives
The learning goals for each unit of instruction should be clearly defined and measurable, so that students and teachers can track progress and determine when mastery has been achieved.
Active student engagement
Students should be actively engaged in their own learning through activities such as problem-solving, critical thinking, and self-reflection.
Students should receive instruction that is tailored to their individual needs, with opportunities for differentiated instruction and support.
Students should receive immediate feedback on their performance, so that they can make adjustments and continue to improve.
Students should have opportunities to learn from and with their peers, fostering a sense of community and collective responsibility for learning.
Learning by doing
Students should be actively engaged in doing and applying what they have learned.
Assessment as learning
Assessment should be used as a means of understanding what students have learned, what they still need to learn, and how to adjust instruction to meet student needs.
Mastery Learning Applied to Coding
Mastery Learning is a strategy applicable to any subject. It’s even shown to have greatest success in math oriented subjects. Regardless what subject or code exercise Mastery Learning is applied to, though, the grounding principle stays the same. Master before moving.
Coding lends itself particularly well to Mastery Learning because of its incremental nature. A Mastery Learning approach to a coding education encourages a deep understanding of fundamental concepts and principles of computer science, which can then be applied to different contexts and projects.
In an industry where the ability to adapt to new technologies and programming languages is essential, it’s crucial to have a strong foundation supporting you. For this exact reason, lifelong learning and Mastery Learning go hand-in-hand. The biggest difference between the two is who’s doing the teaching.
You’ll often have to be your own teacher and create your own self-paced “curriculum” and coding classes. This gives ample opportunity for you to truly personalize your education to best fit your needs, interests, and capacity. You may not have a teacher giving explicit instructions, but you do have the internet, peers, open-source resources, tutorials, videos, etc. You can still implement mastering before moving.
Let’s say you’re brand new to coding, and you want to learn Python. In a Mastery Learning approach to Python, you would progress through a series of learning activities that build upon one another and gradually increase in difficulty. For example, a learning progression for Python could look like:
Introduction to the basic syntax of the Python language, such as variables, data types, and control structures.
Practice beginner Python challenges to reinforce understanding of basic concepts, such as writing simple programs to perform mathematical calculations.
Introduction to more advanced concepts, such as working with functions and modules.
Practice exercises to apply concepts, such as creating more complex programs that use multiple modules and functions.
Introduction to specific Python libraries, such as NumPy and Pandas for data analysis.
Python practice exercises to work with real-world data using these libraries.
Introduction to object-oriented programming in Python
Practice exercises to apply object-oriented programming concepts to create more complex programs.
And so on…
Imagine as you progress in your career, you want to switch to a data scientist role. Like seen above, you’ve already mastered the basics of Python. Now it’s time to build upon the Python foundation you’ve laid by working on more advanced data science concepts like:
Data collection and wrangling
Exploratory Data Analysis, Business Acumen, and Storytelling
Applied Statistics and Mathematics
Machine Learning and AI
And so on…
This is an example of Mastery Learning in action.
Incorporating Mastery Learning to your personalized education
If you’re learning to code through a university or a bootcamp with a rigid curriculum, you won’t have much control over the teaching strategy.
Your instructor may recognize Mastery Learning as a useful educational tool, or your instructor may favor other strategies for the sake of time constraints. Remember: you’re a lifelong learner. Even if your formal education adheres to a different teaching strategy, you can still apply Mastery Learning to your projects and coding practice outside of the classroom.
It’s also important to recognize that you don’t have to attain a formal education to learn to code. Many successful developers are self-taught and learn to code with the help of code challenge sites. Or, maybe you’re participating in a self-paced bootcamp that lets you complete the curriculum at a rate that works for you. Favoring personal progress over schedule adherence is at the heart of Mastery Learning, making self-study and self-paced options great opportunities to incorporate Mastery Learning into your individualized education.
How do you apply Mastery Learning to code?
Bootcamps and universities don’t go on forever, but your commitment to learning does. Remember the 7 guiding principles of Mastery Learning discussed earlier? Below you’ll find those same ideas reframed to reflect actionable ideas you can use to personalize your code education through Mastery Learning:
Clear and measurable learning objectives
Think of this as designing your personal curriculum. Pick a clearly defined subject, like a language or concept you’d like to learn, and set measurable objectives based on assessing competency, not meeting calendar date. For example, let’s say the larger goal is to learn functional programming. DON’T create objectives like:
Learn Immutable data by April 25th
Learn Second-order function by May 2nd
Learn Constructing and destructuring by May 9th
Learn Function composition by May 16th
Learn First-class functions and lambdas by May 23rd
Instead try something like this:
First, learn about immutable data
Next, learn about second-order function
Then, learn about constructing and destructuring
And so on…
Competency is more valuable than speed.
Active student engagement
With Mastery Learning, your work input determines your output. You can’t passively consume information and expect to succeed. Success requires being an active participant in your education. Coding practice sites are an incredibly useful tool for active learning.
Engagement goes deeper than sheer will, though. Another piece of active engagement is self reflection. Ask yourself, “Which strategies are working?” “Which ones aren’t?” “What areas need more attention?” “What areas are strengths?” Glean insights from your reflection to improve your learning process.
Based on your active reflection, you’ll be able to identify concepts that require extra effort to master. This is a great opportunity to reassess the tools you’re using to learn, too, and pivot to alternative strategies.
This is your education, so make it make sense to you. This may look like using video tutorials instead of reading or changing perspective with the help of a peer when feeling stuck. Not everyone learns the same, so don’t be afraid to experiment with alternative learning approaches.
It’s important to incorporate ways to objectively garner immediate feedback. Feedback allows you to gauge what you know and what you don’t. People, even strangers, are more likely to help than you think. You can get immediate feedback by requesting a colleague, peer, or a stranger on the internet to review your code/project. There are also plenty of tools to assist with code review, too. Here’s a list to get you started.
A great example of collaborative learning is utilizing pair programming. While one person types, the other person can catch errors and free their mind to consider edge cases that could be an issue. There are impressive real-world examples of companies like Facebook being more productive when using pair-programming. Finding community and mentorship are also great examples of collaborative learning.
The gold standard for mastery learning is one-on-one learning with a tutor/mentor. For example, Breakout Mentors offers personalized one-on-one kids coding classes. Engagement and creativity are important for kids in particular, but adults can also benefit from using their skills on larger code bases. You can find a more experienced mentor to help identify a good project for your skill level and provide support along the way.
Learning by doing
One of the best ways to learn to code and gain real world experience is by incorporating project-based learning. By working on a project, you have the opportunity to apply your learned concepts and reinforce them through hands-on practice. The project doesn’t have to be monumental – consider a project that solves a problem for you. You can also clone an app to better understand its systems. Codewars is another prime example of learning by doing. Completing code challenges or try out code golf based on language, skill level, and concept is a great way to engage in hands-on practice. Plus, you can learn from what others have done. Examining kata solutions offers incredible problem solving perspectives and creative insights.
Assessment as learning
Throughout your education or lifelong learning, assessment is the key to measuring what you have learned and what you have not. Pause often and conduct a self-inventory of concepts you’ve confidently mastered and identify your next steps. You can learn the most from yourself and turn failures into learning opportunities.
Is “Mastery” Realistic?
Total mastery implies perfection. That’s impossible. It’s also unsustainable to expect yourself to remember, let alone totally master, everything you learn. Stack Overflow exists for a reason! It’s a resource that all developers utilize.The point of Mastery Learning isn’t to strive for perfection; it’s to practice building solid foundations that will help you reach greater heights throughout your journey of lifelong learning.
Take Control of Your Education
Understanding education research can allow you to supercharge your learning rate. Mastery learning is an excellent model to follow for coding, which comes with its own unique challenges and hands-on practice required.
The biggest take away is that you shouldn't expect to advance at the same exact pace as those around you. Take assessments to understand where you are, then circle back to give yourself more time at a given difficulty if needed. In the long run, this will build an excellent educational foundation for you to continue to build upon, setting you up for long term success in developer interviews and your career.
Share this post
Feeling inspired to start coding? Check out some kata that have been hand selected based on this article.
Your non-profit company has assigned you the task of calculating some simple statistics on donations. You have an array of integers, representing various amounts of donations your company has been given. In particular, you're interested in the median value for donations.
The median is the middle number of a sorted list of numbers. If the list is of even length, the 2 middle values are averaged.
Write a function that takes an array of integers as an argument and returns the median of those integers.
Consider the word "abode". We can see that the letter a is in position 1 and b is in position 2. In the alphabet, a and b are also in positions 1 and 2. Notice also that d and e in abode occupy the positions they would occupy in the alphabet, which are positions 4 and 5.
Given an array of words, return an array of the number of letters that occupy their positions in the alphabet for each word. For example,