Foundational Concepts of Computation
Concepts that should inform how we teach programming from kindergarten to college.
We are in the middle of a historic opportunity in computer science education, with initiatives such as K12CS, CS4all, CAS, code.org, and national CS standards or curricula being developed in many countries including the UK, New Zealand, Australia and Israel. For that push to have the intended positive effect, the educational curricula and materials being developed have to be coherently built upon the foundational concepts of computer science. However, identifying the concepts (examples below) that are truly foundational has proven to be very difficult.
Computer scientists have an obligation to educate the wider community about the principles of computing. We, as programming languages researchers, more specifically have an obligation to contribute to the computer science education community our understanding of the foundational concepts that underlie and should inform any use of programming languages.
Call for Contributions
Goal of SPLASH-E 2016
SPLASH-E will be a one-day working meeting, with the following goals:
- Building on prior work, identify and enumerate the foundational concepts of computation.
- More ambitiously, for each concept, create a detailed plan for a lesson (or short sequence of lessons) for 8 year olds, to teach the concept.
We do not solicit publications, but we ask prospective participants to submit a one-paragraph position statement.
We will disseminate our findings, however we will have no proceedings.
SPLASH-E includes a set of keynote talks to provide a background on computing education. These talks are scheduled in two special “education” sessions of SPLASH-I:
- Simon Peyton Jones: The dream of a lifetime: Shaping how our children learn computing
Video of Simon’s talk
- Brian Harvey: Snap!: Scheme Disguised as Scratch
Video of Brian’s talk
- Emmanuel Schanzer: Bootstrap: Build Bridges, not Walls
Video of Emmanuel’s talk
Given that we are SPLASH-E, we will focus on concepts related to programming and programming languages, including key concepts of the theory of computation. The reason is that almost all computer science-related curricula involve some form of programming, which means that such concepts are relevant across the entire spectrum of foundational computer science education.
We focus on foundational concepts, concepts that form the basis of any introductory programming curriculum taught from kindergarten up to university.
We specifically exclude the broader computer science context (operating systems, computer architecture, HCI, computer graphics, …) and we exclude equally important practices (software engineering approaches, problem solving practices).
Any curriculum, learning activity, programming language, or assessment related to learning to program should be informed by, based on, and aligned with the foundational concepts of computing. But what are those concepts? Coming up with such a list is the first goal of SPLASH-E 2016. However, to get the discussion started, here is an incomplete and imperfect list:
- Concepts for structuring computation and data: The idea of sequence, selection, and repetition (e.g., regular expressions: ab, a?, a*; or imperative languages: statement sequences, conditionals, and loops; or functional languages: conditionals and recursion)
- The concept of types (selection and repetition often depend on Booleans; school arithmetic and algebra usually use numbers)
- How the concepts of variables differ between imperative languages (with assignment), functional languages (with let expressions and function arguments), and math (x in equations)
- Models of computation underlying pure functional languages (lambda calculus) and imperative languages (Turing machines), and their equivalence, how evaluation/execution works in each of them, and their relationship to school mathematics
- Abstraction as exemplified endlessly in programming and programming languages.
- Names. Names allow abstraction. Using descriptive names is common in programming (but less common in math).
- Information and data. Algorithms + data = programs, computation + information = computer science.
The concepts should be something that every programming curriculum, learning activity, language, or assessment should be based upon. No matter what language is used to teach programming. No matter which curriculum is used. No matter which activity students do. It ALWAYS should be informed by and should never contradict those concepts.
Teaching the Foundational Concepts
Enumerating the concepts that we find foundational is not enough. To contribute our understanding to the computer science education community, we will create a detailed plan for a lesson (or short sequence of lessons) for 8 year olds for each concept we identify. Although without input from expert educators this would not be suitable for consumption by children, it serves as a litmus test for whether a concept truly is foundational.
We are encouraging everyone interested in programming languages and in teaching to submit a short position statement.
Mon 31 Oct
|10:30 - 11:20|
Simon Peyton JonesMicrosoft Research, CambridgeMedia Attached
|11:20 - 12:10|
Brian HarveyUniversity of California, Berkeley