We don’t know what it means to learn to code

Geo Miller
6 min readOct 11, 2015

--

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.

  1. Computational Thinking
  2. Collaboration
  3. Computing Practice and Programming
  4. Computer and Communications Devices
  5. 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.

https://studio.code.org/s/frozen/stage/1/puzzle/10

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.

http://social.technet.microsoft.com/wiki/contents/articles/29933.small-basic-the-history-of-the-logo-turtle.aspx

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.

https://upload.wikimedia.org/wikipedia/commons/0/06/Punch-card--fortran.jpg

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.

Spaces where this seems to fit best are when the output is visual. Visualizations quickly allow one to appreciate the artistry of both the output and the programming itself.

  • CodePen.io shows you code and output in one place and reevaluates your code on modification. This removes the need for configuring editors and output windows to be in the same file context. It automates the development iteration loop: save code, switch context, refresh output, determine successes and failures, switch context, edit, repeat. Perhaps even more importantly, it makes the code sharable instantly with a URL.
  • Block Builder, a project refined from Tributary, allows you to explore D3.js visualization code saved in blocks. It provides a code execution context for data visualization, automates iteration, shares code, and provides an interactive user interface to play with variables called Inlet.
  • Apparatus is both a graphical editor and programming tool. Variables and functions are not quite abstracted completely away into blocks, but the return values of those expressions are exposed as properties to visual objects.

Interactive code editors are important because they let you jump in and play with code. They are figuring out how to make the process of programming one where you can see and play rather than one where you must sit and study. Interactive coding has made great headway into closing the gap on coding to results, but still has a long way to go in visualizing the code and execution itself.

People understand what they can see. If a programmer cannot see what a program is doing, she can’t understand it. — Bret Victor, Learnable Programming

The Art of Programming

Lost or not yet defined

While academics has already defined computer science as an applied math, we are truly in a formative stage of defining what it means to be a computer scientist. The Association for Computing Machinery when describing the need for computer science for all students in New Educational Imperative: Improving High School Computer Science Education, has to start with “What is Computer Science Anyway?” It is clear that computer science has not established itself in what people consider common knowledge.

In the pursuit of defining computer science, many find it necessary to point out that computer science is not only the process of writing code. This is a true statement. It is made clear by showing how Computational Thinking can be explored without the use of a programming language.

A key difference between learning to express a process logically with Computational Thinking and Programming is the language you are using. Computational Thinking takes advantage of a language context you already have installed in your head. Learning to code also includes learning to communicate with something that does not have the same language installed.

However, with such great emphasis on Computational Thinking, I fear that many will divorce logical exercises from programming because programming languages are hard to learn. We should not avoid teaching the language of programming. Programming should not be shunted to the side as the application step.

Programming’s potential for expression is infinite and commands an artistry of its own. We need to build better ways to interact with programming to make thinking computationally and programming the same process.

About the author

Geoffery Miller (Geo) is the founder of codeslam and a contributor to the open source project Inlet. After teaching programming to non-majors at Florida State University for 5 years, he is working on making coding a more fun and creative process with games and toys.

Thanks to Larry Weru for editing and advice.

--

--