The benefits of learning programming or coding in schools are quickly becoming accepted by education professionals. As more studies point to the cross-curricular applications of computational thinking skills, teachers of all certifications and licenses are starting to seek out resources, coding instruction programs, and extra curricular opportunities to provide learners with the opportunity to learn these skills. Given this uptick in teaching computer science, it’s imperative that educators understand instructional approaches for coding. Let’s take a look at two different approaches and a third that I’d like to propose.
I strongly believe young learners should learn code and algorithmic thinking skills, but programming alone does not constitute computer science education. Therefore a true computer science education requires attention to more practices than just coding. Focusing on coding instruction only, I won’t go into detail on other computer science practices in this post.
Two instructional approaches share terms also used to describe software development strategies - bottom-up and top-down. In software development, a bottom-up approach refers to the practice of developing out individual elements or features of a software first and then combining those efforts to create a finished application. The top-down approach to software development begins with creating an overall idea or vision for the whole program. Working from that high-level view of the application, the developers work downward, building out each component as they go.
While there are similarities between these software development strategies and the instructional approaches I share in this post, I use the terms “bottom-up” and “top-down” to describe coding instructional approaches only.
Often found in college courses, the bottom-up approach can be beneficial to beginners as they develop their own computational thinking skills and construct personal understandings of each programming concept. While this instructional approach is an excellent way to begin understanding the common concepts found throughout programming languages and various systems, it’s often slow to provide learners with immediate satisfaction, engagement, and authentic learning opportunities.
While learners get more immediate satisfaction, engagement, and authentic learning opportunities with the top-down approach, they may not fully understand how their program works without a basic understanding of fundamental programming concepts. The top-down instructional approach can get learners hooked on coding and may be quite motivational for them. However, if tutorials and instructions lack crucial steps or details, learners may find themselves frustrated - continuously trying to debug their programs without knowing how it works.
I challenge young coders to first decide and plan what they want to create - a website, a roving robot, or maybe a paper circuit birthday card with programmable LEDs as candle flames. Whatever their project goal, learners ask themselves, “What do I want my program to do?” They may have to revise or revisit this question throughout their project, but they should consider it before constraining themselves to the coding concepts they already understand. It allows them to be more creative. I often have learners document their program ideas, algorithmic flowcharts, and project design away from the computer. Like the top-down software development strategy, it’s important for learners to think about the program holistically first.
Then, once a plan is developed, learners break up the components of their program and begin seeking information to learn how to program those components. This might be in the form of online tutorials, code snippets shared by others, or additional resources. When working in Scratch, I would often provide my students with Scratch Cards to explore coding concepts for elements they might want to use in their project.
As learners create their programs, they’ll likely add components to their project if they discover a new way to code something. But they also might remove or revise components in their original project idea if they discover better ways or restrictions to programming it. The entire process is iterative, social, and exploratory. With each new programming concept students discover, they may want to read or dive deeper into it. This is where we’d step into a bottom-up approach to more fully understand a concept or analyze applications of that concept in other programs.
An element of tinkering with code and playful learning has to be present with any coding instructional approach. One of the best ways to learn code is to read it. Download and review shared source code on sites like GitLab and GitHub. Try to follow a program’s logic and understand the coding elements used. When unknown code is seen, then it’s time to do some online research. Coding and learning are both social experiences. You or your learners should remember to share your source code and projects, offer feedback and assistance to other coders, don’t be afraid to make mistakes and receive advice, seek out solutions, and always celebrate what you learn!
Some Clarification
Before we dive into coding instructional approaches, let me clarify a couple of important points.I strongly believe young learners should learn code and algorithmic thinking skills, but programming alone does not constitute computer science education. Therefore a true computer science education requires attention to more practices than just coding. Focusing on coding instruction only, I won’t go into detail on other computer science practices in this post.
Two instructional approaches share terms also used to describe software development strategies - bottom-up and top-down. In software development, a bottom-up approach refers to the practice of developing out individual elements or features of a software first and then combining those efforts to create a finished application. The top-down approach to software development begins with creating an overall idea or vision for the whole program. Working from that high-level view of the application, the developers work downward, building out each component as they go.
While there are similarities between these software development strategies and the instructional approaches I share in this post, I use the terms “bottom-up” and “top-down” to describe coding instructional approaches only.
Bottom-Up Coding Instruction
The bottom-up approach to learning code focuses on fundamental programming concepts. As the learner progresses through the instruction, they build a foundation for code that’s applicable in a variety of programming situations - developing an online game, a smartphone application, or a dynamic website. Each programming concept is learned in isolation, but scaffolded throughout instruction to build on prior coding knowledge.Often found in college courses, the bottom-up approach can be beneficial to beginners as they develop their own computational thinking skills and construct personal understandings of each programming concept. While this instructional approach is an excellent way to begin understanding the common concepts found throughout programming languages and various systems, it’s often slow to provide learners with immediate satisfaction, engagement, and authentic learning opportunities.
Top-down Coding Instruction
The top-down instructional approach centers on immersing the learner in authentic programs with the goal of creating something quickly. Many self-taught coders prefer the top-down approach when they first begin learning to code because it allows them to hone in on a specific programming purpose and how to develop it quickly. They might follow a set of instructions or tutorials to develop a website, app, or game. Unlike the bottom-up approach, top-down instruction doesn’t focus on programming concepts applied in a variety of programming situations. Rather the learner focuses on the code needed to develop a program for a specific goal.![]() |
My daughter completing an activity for Hour of Code |
Just-in-Time Learning
Another instructional approach I believe complements the top-down coding instruction is just-in-time learning. Learners tackle a task or goal and learn skills and concepts as needed during development of a project. Like the top-down approach, just-in-time learning is great for self-driven learners and can even empower others to take charge of their own learning. Using readily-accessible information like online tutorials, learners seek out solutions to their own coding questions and construct their own understanding of programming concepts. The personalization of just-in-time learning makes this is a powerful way to learn and can increase retention of programming skills.Blended Coding Instruction
When developing computer science curriculum or teaching young coders, I tend to use a blended approach. Combining the strengths from both the bottom-up and top-down approaches with just-in-time learning in mind, I provide learning opportunities that keep learners motivated and engaged in coding by giving them immediate feedback and personal satisfaction in the programs they create.I challenge young coders to first decide and plan what they want to create - a website, a roving robot, or maybe a paper circuit birthday card with programmable LEDs as candle flames. Whatever their project goal, learners ask themselves, “What do I want my program to do?” They may have to revise or revisit this question throughout their project, but they should consider it before constraining themselves to the coding concepts they already understand. It allows them to be more creative. I often have learners document their program ideas, algorithmic flowcharts, and project design away from the computer. Like the top-down software development strategy, it’s important for learners to think about the program holistically first.
![]() |
My daughter designing a video game with Bloxels |
As learners create their programs, they’ll likely add components to their project if they discover a new way to code something. But they also might remove or revise components in their original project idea if they discover better ways or restrictions to programming it. The entire process is iterative, social, and exploratory. With each new programming concept students discover, they may want to read or dive deeper into it. This is where we’d step into a bottom-up approach to more fully understand a concept or analyze applications of that concept in other programs.
An element of tinkering with code and playful learning has to be present with any coding instructional approach. One of the best ways to learn code is to read it. Download and review shared source code on sites like GitLab and GitHub. Try to follow a program’s logic and understand the coding elements used. When unknown code is seen, then it’s time to do some online research. Coding and learning are both social experiences. You or your learners should remember to share your source code and projects, offer feedback and assistance to other coders, don’t be afraid to make mistakes and receive advice, seek out solutions, and always celebrate what you learn!
Comments