Computer programming is a skill that has been largely ignored by education, especially from elementary to high school levels. Fortunately, schools are starting to offer computer science curriculum. But, what is computer science?

CSTA K-12 standards outline 5 strands which aim to make it clear that computer science is not just programming.

Computational Thinking Collaboration Computing Practice and Programming Computer and Communications Devices Ethical Impacts

Collaboration, Devices, and Ethics are topics for a different article.

Computing Practice and Programming refers to the use of computers both as a tool and also creating tools with programming languages.

A novel concept presented by the 5 strands is Computational Thinking.

Computational Thinking

Computational Thinking approaches teaching problem solving first by reducing larger problems into smaller instructions. Students are encouraged to break down every day tasks, often times without a computer into a sequence of instructions. For example, brushing your teeth or navigating a supermarket.

Using logic to describe and solve problems is fundamental to becoming a computer scientist. Computational Thinking is an especially powerful concept for those not already familiar with computer science.

This concept, however, was always fundamental to learning programming. Regardless of the language you choose to use, languages are tools of communication. Learning the syntax of a programming language is not the same thing as learning to code.

Programming versus Coding

When teaching programming as a topic in Computing Practice and Programming, many lessons will refer to this as coding.

There is a largely unrecorded history behind the use of the terms programming versus coding. The definition of these words depends on who you ask. There are those who describe a programmer as a high level designer or inventor using predefined functional blocks to solve a problem. Then, they describe a coder as a person who translates tasks into machine readable instructions, like an assembly line worker — a code monkey.

There are those who think the roles are reversed. Today, learning to code has become a softer more fun way to approach computer science with interactive activities. A programmer for many has become the word to describe the person grinding out syntactically correct code.

I propose that the activity of inventing with predefined functional blocks is the same process as encoding them into instructions that are understood by something else. The only difference is the level of assistance that you are provided.

Programming Assistance

Highest Level

At the highest level of assistance, using tools like Scratch or Blockly allow you to draw shapes, move sprites, and play sounds. These high level functional blocks guarantee a syntactically correct program even if the program does not solve the semantic goal.

The experience is inspired by Logo turtle graphics, a programming education tool of the past. A limitation of these high level tools is that they only work within their own context. You cannot use a Logo turtle, or Anna skating on ice to make a mobile application.

Lowest Level

At the lowest level of programming assistance you have a blank input surface like a terminal, punchcard or tape, and a machine to execute the code. The machine will either give you a result or it will not. Finding the correct solution by trial and error is a long and tedious process.

Using a computer text editor, compiler program and terminal is a similar experience to running a punch card, but faster and perhaps with debugging tools.

Middle-Ground: Interactive Programming Editors

A middle ground that is currently being explored are interactive programming editors that automate the task of iterating solutions. Many reevaluate your code every time you make a change, even if the change breaks what you might have had working before. The most powerful potential this concept has is to give the programmer a sandbox to play with working code and not have to context-switch between researching documentation and manipulating the example to do something new.