Related Resources

There’s no question that computational literacy is incredibly important today, and yet is less prevalent than it should be. Unfortunately, solutions to this today focus unevenly on all aspects of computational literacy — the “learn to code” camp being one of the biggest offenders. The main purpose of this site is highlight these other aspects of computational thinking, in the hopes of redirecting focus towards more effective efforts in supporting our population’s computational literacy.

First of all, what is computational literacy? The biggest computing education bodies in the US (CSTA, NICERC, NMS) met to decide a framework for computer science education and have categorized the main concepts and practices at https://k12cs.org/. Note that code is included only within practice #5 (and maybe #6, though that is less often taught).

The currently accepted framework for K-12 CS education.

“Learn to code” is only a narrow-minded solution if the goal is only to learn how to use a programming language, for example. However, using learning to code as a stepping stone towards a more holistic goal is perfectly reasonable for developing a computationally focused mind. Here is a particularly long-form discussion about learning to code, while stressing all the concerns professional programmers face apart from code: https://www.bloomberg.com/graphics/2015-paul-ford-what-is-code/#should-you-learn-to-code Note that much of these concerns are professional, and so may not be directly applicable to computational thinking in K-12 students. However it does well in explaining what code is, how code is a tool, and what the goal of learning to code should be (hint: it’s not to know how to code).

An excerpt where they apply computational thinking.
“Not a line of code is written throughout this process.”
(from the linked article by Paul Ford)

However, there are certainly resources other than code which support learning computational concepts. CS Unplugged https://csunplugged.org/, advertised as “Computer Science without a computer”, is one such example. It provides teaching materials and curricula for educators who support teaching computation through offline methods.

Here, the students mimic a computer-like process to sort a list of numbers.
(clip from https://www.youtube.com/watch?v=30WcPnvfiKE)

Discouraging the focus on code is part of the goals of this blog: to redirect educational efforts towards problems blocking successful computer science education. Many of these blocking problems, related to integration of CS into the modern educational community, have been cleanly summarized here https://sites.google.com/site/highschoolcseducation/background/problems-in-cs-education.

A summary of influences on CS education and their relationships.
(from the linked site, by Dani McAvoy)

One of the broader issues is current representation in computing education. Of note is gender. The gender gap in computing has been significantly widening since the 1980s. The classic comprehensive article describing this phenomenon can be found here: https://www.insidehighered.com/news/2018/06/25/lecturers-explanation-gender-gap-computer-science-it-reflect-womens-choices Lack of diverse representation may contribute to stereotypes about computer science that discourage minority learners from considering computer science as something to learn, which hurts computational literacy in general.

Chart shows percentage of men and women earning bachelor's degrees in computer and information sciences in the US from 1975 to 2016. Line for men begins below 1 percent in 1975 and rises, with two peaks, before ending in 2016 at around 5 percent. Line for women starts lower and has smaller peaks, ending around 1 percent in 2016.
Note that in recent years, male degrees skyrocket while female degrees barely break 10%.
(from Digest of Education Statistics, also linked on the page)

There is also a mysterious lack of focus on the technical issues in teaching computing. Speaking personally from my experience as a learner, a lot of frustration came from figuring out things like not having a visualization of the code, or incomprehensible syntax errors. Talk to anyone who’s taken a coding class — this is not an uncommon thing to encounter when learning through programming tools like Java and C, the command line, and graphics libraries. These tools with which some schools teach computer science tend to be professionally used — meaning their use often requires some amount of unnecessary prerequisite domain knowledge or protocol, which may frustrate computer science newbies trying to learn what loops are. The reason I believe these commonly-used languages are inadequate for learning is because for people like me, a drag and drop interface is good enough for doing most tasks I would want to do that utilize computation. Many learners learn visually, and text is not a great visual medium for learning computing. Here is a great article that expands on how visual mediums of programming helps with reasoning: https://blog.statebox.org/why-visual-programming-doesnt-suck-2c1ece2a414e.

“Process for an ATM converting regular money to Bitcoin.”
(from the linked article by Anton Livaja)

In addition, here is a (by no means complete) listing of successful visual programming environments that I am aware of:

  • Scratch (also check out Snap)
  • macOS Automator (also check out Alfred workflows)
  • Unreal Engine blueprints
  • Blender shaders
  • LabVIEW block diagrams
  • Node-RED
  • PureData
  • Luna (general-purpose)