Skip to main content

Coding Instructional Approaches

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.


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

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.

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

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!

Comments

Popular posts from this blog

Tippe Top Design

The physics behind the tippe top toy have been the subject of studies by scientists for years - dating back to the early 1890s. The tippe top is spun just like any other top, but pulls a surprise stunt. The top flips over and spins on its stem when given a strong twist. Why does the tippe top flip over? What does this mean for anyone planning to make one on a 3D printer? Nobel Prize winners, Wolfgang Pauli and Niels Bohr, take a break with a tippe top at the 1954 inauguration of the Institute of Physics in Lund, Sweden. Early Top Patents The first patent for the top, listed as “Wendekreisel”, was filed in Germany by Helene Sperl in 1891. While the patent seems to describe the top’s inversion property, reproductions of the top have proved unsuccessful. The patent expired after one year because the fee wasn’t paid. During a trip to South America, Danish engineer Werner Østberg noticed kids spinning a small, round fruit. While spinning, the fruit would flip over (or...

micro:bit Fireworks with Python

I used the MicroPython editor to program a fireworks animation that controls the brightness of the LEDs as the firework explodes on the LED display. For young computer science students, this is a great introduction to text-based programming, arrays, and animating LEDs. Code # Display message and show pacman with firework option from microbit import * firework1 = Image("00000:00000:00000:00000:00200") firework2 = Image("00000:00000:00000:00200:00100") firework3 = Image("00000:00000:00200:00100:00000") firework4 = Image("00000:00000:00900:00000:00000") firework5 = Image("00000:07870:08580:07870:00000") firework6 = Image("60706:01210:72127:01210:60706") firework7 = Image("30503:00000:50005:00000:30503") firework8 = Image("10201:00000:20002:00000:10201") all_firework = [firework1, firework2, firework3, firework4, firework5, firework6, firework7, firework8] while True: if button_a.is_pressed(): ...

Sprites & Games

Any graphical object or character in a video game is known as a sprite. Code provides instructions for sprites. A game’s program can tell the sprite how to move or react when a button is pressed. Every time Mario bops his head on a box and a mushroom appears, sprites (Mario, the box, the mushroom) are interacting with each other and responding accordingly based on the game’s code. You can create your own sprites to use in your video games! I used Piskel , an online sprite creation tool, to create my m4ttbit sprite for a blob-catching game I made using Scratch . Piskel lets you create an 8-bit or pixelated sprite and even animate it. To create an animated sprite, you’ll want to develop a frame for each movement. A frame toolbar in Piskel lets you easily create a frame for a standing sprite or a series of images to make it look as though your sprite is running, jumping, or flipping. When you’re finished creating the frames or series of images for your sprite, export them by savin...