Best language to develop computational thinking

There is an expression that keeps popping up in my head – “if the only tool you have is a hammer, everything starts to look like a nail”. I admit I cannot attribute the expression to anyone and it certainly did not first come from me, but it does seem to state an important concern.

This expression makes me think of those who see coding and computational thinking everywhere. I had this reaction when I encountered this ad for “How to code a sand castle“. The book is focused on coding for the very young and I would argue that the ad itself is a superior example of coding in a way not obvious to the writer. I will explain this later.

I am not suggesting that learning a computer language or languages cannot be in important vocational skills. I wrote code in several languages so I certainly understand the value of the skill. However, I wrote code because I needed to have computers and servers do something that was important for my work. I did not write code as a purposeful way to develop my personal cognitive skills.

I think it is time for a careful analysis of what computational thinking really is and what is the best way to develop this skill or skills if they really are unique and important. My definition for coding consistent with what I understand computational thinking to mean would go something like this. Coding is the “symbolic representation of a process in a way that would allow an unskilled entity to execute that process”. When I wrote code in BASIC, assembly language, hyperscript, or PHP, I was trying to get computers to do something that I understood, but had to express in a way the computer could understand.

Coding might also be described as “careful description”. You have to be careful (exact) when explaining something to a computer. Perhaps my vague language – description, entity – is starting to hint at where this post is going. 

What do I propose as the best language for developing computational thought? I would suggest it is whatever language you are already comfortable using. It would be English for me. Writing a tutorial for a naive learner (the entity) requires pretty much all of the skills of computational thinking – planning, completeness, careful analysis of the skill to be transferred. This is what I find somewhat ironic in the written product generated by the writer attempting to explain the process of building a sand castle as an example of coding. If a kid explained to another kid how to construct a sand castle as visualized by the explainer, wouldn’t this meet my definition of coding? It is true a human learner helps you out in ways that a computer cannot, but a good writer cannot depend on the assistance. 

Why not take the more general symbolic process (writing) and modify the task to require the important skills of computational thinking? This makes more sense to me than taking a symbolic tool (python, a language using block code) with limited applications (communicating with a computer) and hoping that skills utilize will transfer to other applications. There are certainly reasons to learn a specific symbolic tool. I had to. But, this was made necessary by a very specific application and not as a general cognitive skill. 

This entry was posted in Uncategorized and tagged , . Bookmark the permalink.