How to Teach Computational Literacy/Thinking: Wolfram’s Language and Code.org’s Response
Stephen Wolfram has published an essay arguing for a programming language as key to teaching computational literacy. He says computational thinking — I think he means the same thing as I do with CL instead of CT. I agree with him, and made a similar argument in my book. He goes on to argue that Wolfram Language (and the Mathematica infrastructure behind it) is particularly good for this.
He may be right. I don’t know of any studies of the Wolfram Language in any setting. The idea of providing a programming language with such rich knowledge behind it is intriguing and promising — so much there for just about any kind of inquiry, for any kind of context.
Hadi Partovi, CEO of Code.org, wrote an essay in response, where he similarly agreed with Wolfram on the issues of what we’re trying to teach and the importance of a programming language to teach those concepts. I disagree with Hadi on his critique of Wolfram, which is that the Wolfram Language is functional and lacks loops and declarations, and is inappropriate for use with learners. It’s totally true that most professional software engineers use procedural programming. But that doesn’t mean we have to.
If we’re teaching computational literacy or computational thinking, it’s not clear why the practices of professional software engineers should influence what we teach or how we teach it. That’s not what we are teaching. I argue that we need to take a learner-centered approach, where we recognize that learners are not professionals or experts, and particularly in computing, may not want to become professional software engineers.
What gets used in daily practice by professionals is the result of historical and cultural factors that in no way imply that we made choices optimized what is best for learners. Fortran won over Lisp because (in part) we didn’t know how to compile Lisp efficiently, but we do now and we know how to teach Lisp well. C++ and then Java won over Pascal because of perceptions of what industry wanted, not because of data and not because Pascal was shown to be ineffective for learners. What we know about what is “natural” for learners when they are first thinking about programming strongly implies that Wolfram’s functional structures are easier for learners than loops and declarations. We should strive to make decisions for what we use in classrooms based on evidence, not on what is professional practice, nor what we decide based on social defense mechanisms.
More importantly, there is no “best” platform for teaching computer science. As a functional programming language, the Wolfram Language is fantastic for data analysis and exploration, but it can’t be used to create a traditional “app.” Most professional software engineers use procedural programming, using exactly the same concepts that Wolfram criticizes: loops, conditionals, event-handlers, and such. Without these concepts, none of today’s software would function. The debate about which is better—functional vs procedural programming—has raged for decades without an answer.