Students need pedagogical versions of programming languages to practice coding and avoid a dropoff in high school computer science enrollment

Coding instruction should follow educational principles


Students need pedagogical versions of programming languages to practice coding and avoid a dropoff in high school computer science enrollment

A programming language is math. It’s a system for writing human logic in a way that a computer can work with.

A computer program is a list of instructions written using the programming language’s mathematical system. When a computer runs a program, it’s called software. Because computer software is so important these days, it’s vital that we teach our kids to code.

A programming language is a mathematical tool for creating software. But programming languages are designed for software engineers and professional programmers. They were not built for and are not suitable for middle and even high school introductory courses. If you make a mistake, a programming language will not tell you what it is: It will just sit there, with a cryptic message on the screen (“RangeError: Maximum call stack size exceeded”) and wait for you to fix the problem. How does this apply to learning to code in today’s middle and high schools?

According to pedagogical theory, learning is maximized when the student stays within their comfort zone. They should be asked to follow directions in a carefully limited, “scaffolded” environment. In this environment, the student can make mistakes–but not too many. If they do make a mistake, they get immediate, helpful feedback. Students practice in this scaffolded environment until they are ready to move on to the next step, which involves a little more responsibility. When they have learned enough, they move on to the next stage–and so forth.

Because of these issues, a standard programming language is not useful in the early stages of the learning process.

But…we want students to learn to write computer programs! What can teachers and schools do?

The solution is simple–though not yet in common use.

We need to give students pedagogical versions of programming languages to practice on. This is different from the “real” professional programming language. A pedagogical version of a programming language, whether it be Python, C++ or Javascript, is engineered to be helpful. In their first interaction with these teaching systems, the student is directed to write a single line of code; then another, and another. In a little while, they can run their program, and see the result – a red circle appears on the screen!

Eureka! The student has created software!

As they continue to practice, their programs grow longer and more complex, yet at each stage the student is simply following instructions. If they make a mistake, the computer responds with a simple explanation of the problem. As the student learns more of the language of programming, the instructions grow more complex, and gradually less specific; the student writes more complex programs. The red circle bounces around the screen, changing color as it goes!

Along the way, the students are learning to use a tool similar to the ones programmers use to fix problems in their code. The problems are called “bugs,” and the tool is a “debugger.” In the educational version of their programming language, the debugger they use is more friendly than those used by the pros.

At a certain point, students are ready to progress to a less structured format. With the help of the friendly debugger, they can start to write their own programs – with more flexibility, and less scaffolding – but still a well-defined problem and general instructions for solving it.

Students continue to progress through a scaffolded, safe environment that gradually gives them more responsibility. They learn jargon and techniques, do projects, and work with classmates, creating their own games. At last, after many projects they are ready to learn to work with a “real” programming language–a language made by and for engineers. This is quite an achievement; but given time, all students can do it.

Unfortunately, in high school, the professional (and very unhelpful) programming languages are the system students usually start with. This leads to frustration and a dropoff in high school CS education.

This is all new, and the educational system has done its best to address this sudden need for a subject. Overall, it may be time to step back and ask if our CS pedagogy is up to the standard set by other subjects such as math, foreign language or science. And if it does not, then change is needed–and inevitable.

Want to share a great resource? Let us know at submissions@eschoolmedia.com.