From New Math to GNU Math
I started learning mathematics in the 1960s here in Portland, Oregon, well before computer languages were shared with elementary schoolers. Computers were mysterious room-filling devices one might look forward to meeting in college. I met my first computer at Princeton in 1976, an IBM mainframe with terminals strategically placed around campus.
In 2018, I visit schools in this same city to share MIT Scratch, Python, and Javascript with elementary, middle and high school students. A lot has changed. We have easy access from Chromebooks, to the cloud. Learning to Code is a thing.
However, most of the content I'm sharing is considered after school enrichment. I show up with a tub of Chromebooks and pass them around. Sometimes we'll use the school's computers.
I know Portland Public Schools has some fascination with MIT Scratch, because a veteran teacher, now retired, shared a thumb drive full of programs she had used in her classrooms and teacher training courses. Also some parents tell me their kids are using Scratch while the school is in session. That's encouraging.
What's not so encouraging is this phony wall that runs between mathematics and computer science, contributing to stagnation, unnecessary redundancy, and disintegration. Concepts that should be connected are kept apart.
The common wisdom is mathematics is something we learn to do in our heads, without executable notations. The symbols sit passively on the page whereas the computations take place in our minds. Once a mind is trained to compute, only then does it make sense to shift some of the burden to technological devices such as calculators and computers.
However since we cannot keep all the details of problem solving in our heads, right from the start we're committing symbols to paper, drawing diagrams, perhaps manipulating colored blocks or an abacus.
We start using these technologies early. Writing with a pencil on paper, or with chalk on a board, or with markers on a plastic surface, all constitute a use of technology. The algorithms we learn involve the manipulation of symbols.
We start with arithmetic and gradually add more concepts and techniques, building up skills through algebra, trigonometry and calculus. At some point, students are allowed to use calculators, but computer languages are something else again, and are properly learned within the domain of computer science. That's a dumbing down we should counter.
This dichotomy, between computer languages and mathematics notations, is what we need to challenge, if we're to free mathematics to keep up with the times and stay relevant. Computer languages are executable mathematics notations and should be treated as such. In practical terms this means introducing "dot notation" as a logical construct and math-oriented grammar. I have written a lot more about this agenda at the Math Forum (math-teach), in my blogs, and on Medium.
"Dot notation" is quite ubiquitous in programming and follows the noun.attribute or noun.verb format. A noun is a thing, an object, with internal state. As such it has properties such as position in space, color, weight. Things also have behaviors. In learning to solve problems, we come to know the types of objects we need. We have numbers of course, which come in many flavors. We also have functions, vectors, matrices and polyhedrons. A triangle is a thing with behaviors and attributes. So is a tabular arrangement of data. So is a web page, per the Document Object Model.
Given "dot notation" comprises a grammar, we have another possible way to connect the dots: Communications Arts. If mathematics textbooks insist on boycotting dot notation, perhaps we can enliven communications with Jupyter Notebooks and introduce dot notation along with data visualization. We'll link through literature to the tools and objects we need.
Thanks to Jupyter Notebooks, programming has become a literate activity, wherein code is interspersed with prose. We tell stories, going back and forth between "markdown cells" and "code cells". We can treat HTML and CSS as extensions to publishing instead of as topics in computer science. Automation and animation go together. We're teaching art.
Look for schools that seek to promote synergy among existing skills and topics, in contrast to those emphasizing isolated islands. Learning to Code makes a lot less sense when treated as a standalone subject. Treat coding as part of mathematics, or as integral within language arts. We don't need further fragmentation and specialization. The ability to code is a generic skill and does not imply a specific career choice such as "computer programmer".