zet

Reconsidering “Computational Thinking” and Scratch

I’ve often hated the term “computational thinking” because it gets so abused and because people automatically say that the only way you can learn it is through “coding” (as Obama famously quoted). The term “computational literacy” is even worse. But the truth is that the original term still has a lot of merit for decoupling the act of problem solving through decomposition and algorithms and encapsulation without forcing it to be associated with any computer language.

💬 Lorena A Barba really dives into this idea in her Medium article.

I must confess my overemphasis on practical learning with a direct, immediate, demonstrateable effect and value has always brought me to shun things like Logo or Blockly or even Pascal as languages that just don’t matter since their only purpose is to get you to start thinking — not like a computer — but in ways that a computer can comprehend so that you can present those ideas to the computer for help as an extension of our own brains. This has always had me focusing on learning languages with legs, so to speak, with purpose in the world, that people are paying money for you to learn and use, languages like (originally) Python, (then) JavaScript, and (now) bash.

So I’ve decided that Computational Thinking will get its own OCMS credential that comes before we even touch bash or Python or JavaScript, the latter of which is my favorite first language to help others learn because it is so expressive — especially with fat-arrow functions and other modern additions. Python lacks multi-line anonymous functions, in-line functions, the switch statement, and many other basic constructs allowing full realization of computational thinking. This is also the reason Java is such a horrible first language, with its overly strict focus on single-inheritance class-based, object-oriented programming (which has been roundly deprecated by the industry in favor of composition and data-driven approaches to encapsulation such as the Go language uses).

But how can I introduce computational thinking in the most practical way?

I’m going to try something that I’ve sworn a blood oath never to use: Scratch. I used to make fun of Harvard CS50 (and everyone else) for using it. But the objective evidence before me is overwhelming that learning Scratch and/or Algebra produces amazing, practically universal results when it comes to accepting the same computing concepts later. I’m talking about three specific people who came to me over my first five years of mentoring who blew me away with their skill and easy with which they adopted (at the time) Python programming. There was no block. My son and I would often study everyone to figure out what it was that made some people just get programming while others struggled. We narrowed it down to two things: those who had learned basic linear algebra, and those who can a decent amount of experience with Scratch. In fact, one boy’s Scratch application was so huge you had to zoom out so much you could hardly see the blocks. He was absolutely thrilled to learn Python and started coding projects breaking down the Pythagorean theorem on his first fucking day. He was definitely a savant (I have seen many) but still.

So Scratch it is. We don’t have to spend a lot of time doing it. Scratch is better than Code.org for most because it is just a language, which means all the problem deconstructions and creative application development is up to the developer, not the person writing the challenges. This will allow me to introduce the coding scenarios in the same way that will be done for other more practical languages later. It will also give everyone something they can share with anyone of any age since Scratch is approachable to even the youngest person with nothing but an iPad, even just a phone.

I’m a little afraid of 2015 Rob reading this now. He’d be mad at me, but I really feel like this is the way to go even if it does seem remedial. I can always blame it on MIT and Harvard and emphasis that we are not doing it for very long, just to illustrate the concepts of computational thinking, that that is all.

Related:

Tags:

#pedagogy #cs50 #scratch #compsci