A nice definition of computational thinking, including risks and cyber-security
April 6, 2012 at 8:23 am 9 comments
GasStationWithoutPumps did a blog piece on the newspaper articles that I mentioned earlier this week, and he pointed out something important that I missed. The Guardian’s John Naughton provided a really nice definition of computational thinking:
… computer science involves a new way of thinking about problem-solving: it’s called computational thinking, and it’s about understanding the difference between human and artificial intelligence, as well as about thinking recursively, being alert to the need for prevention, detection and protection against risks, using abstraction and decomposition when tackling large tasks, and deploying heuristic reasoning, iteration and search to discover solutions to complex problems.
I like this one. It’s more succinct than others that I’ve seen, and still does a good job of hitting the key points.
Naughton’s definition includes issues of cyber-security and risk. I don’t see that often in “Computational Thinking” definitions. I was reminded of a list that Greg Wilson generated recently in his Software Carpentry blog about what researchers need to know about programming the Web.
Here’s what (I think) I’ve figured out so far:
- People want to solve real problems with real tools.
- Styling HTML5 pages with CSS and making them interactive with Javascript aren’t core needs for researchers.
- All we can teach people about server-side programming in a few hours is how to create security holes, even if we use modern frameworks.
- People must be able to debug what they build. If they can’t, they won’t be able to apply their knowledge to similar problems on their own.
Greg’s list surprised me, because it was the first time that I’d thought risk and cyber-security as critical to end-user programmers. Yes, cyber-security plays a prominent role in the CS:Principles framework (as part of Big Idea VI, on the Internet), but I’d thought of that (cynically, I admit) as being a nod to the software development firms who want everyone to be concerned about safe programming practices. Is it really key to understanding the role of computing in our everyday lives? Maybe — the risks and needs for security may be the necessary consequent of teaching end-users about the power and beauty of computing.
Greg’s last point is one that I’ve been thinking a lot about lately. I’ve agreed to serve on the review committee for Juha Sorva’s thesis, which focuses on his excellent program visualization tool, UUhistle. I’m enjoying Juha’s document very much, and I’m not even up to the technology part yet. He has terrific coverage of the existing literature in computing education research, cognitive science, and learning sciences, and the connections he draws between disparate areas is fascinating. One of the arguments that he’s making is that the ability to understand computing in a transferable way requires the development of a mental model — an executable understanding of how the pieces of a program fit together in order to achieve some function. For example, you can’t debug without a mental model of how the program works (to connect to Greg’s list). Juha’s dissertation is making the argument (implicitly, so far in my reading) that you can’t develop a mental model of computing without learning to program. You have to have a notation, some representation of the context-free executable pieces of the program, in order to recognize that these are decontextualized pieces that work in the same way in any program. A WHILE loop has the same structure and behavior, regardless of the context, regardless of the function that any particular WHILE loop plays in any particular program. Without the notation, you don’t have names or representations for the pieces that is necessary for transfer.
Juha is making an argument like Alan Perlis’s argument in 1961: Perlis wasn’t arguing that everyone needed to understand programming for its own sake. Rather, he felt that the systems thinking was the critical need, and that the best way to get to systems thinking was through programming. The cognitive science literature that Juha is drawing on is saying something stronger: That we can’t get to systems thinking (or computational thinking) without programming. I’ll say more about Juha’s thesis as I finish reviewing it.
It’s interesting that there are some similar threads about risk and cyber-security appearing in different definitions of computational thinking (Naughton and Wilson discussed here), and those thinking about how to teach computational thinking (Sorva and Perlis here) are suggesting that we need programming to get there.
Entry filed under: Uncategorized. Tags: APCS, computational thinking, computing for everyone, CS:Principles, end-user programming, programming, programming languages.
1. Software Carpentry » On Crossing Australia (or, Further Thoughts on What to Teach Researchers about the Web) | April 6, 2012 at 5:42 pm
[…] was actually a bit surprised that Mark Guzdial was surprised by me including security in my list. If I give a teenager the keys to my car [2] and let him take […]
2.
In the Chronicle: What counts as “programming”? Will it be different for “the rest of us”? « Computing Education Blog | April 18, 2012 at 10:39 am
[…] question, beyond asking what is computational thinking: If you require “programming,” what counts as “programming”? The […]
3.
A computational biologist’s personal toolbox : What a scientist will really do with programming « Computing Education Blog | May 2, 2012 at 8:56 am
[…] robust mental model of how the modules work and what the data needs for each are. This is beyond computational thinking. In my past 20 years as a programmer, I’ve seen the rise of object-oriented programming and […]
4.
Blog Post #1000: The Magic of Time — about making beer and reform « Computing Education Blog | May 4, 2012 at 9:01 am
[…] it, and we’ll change and improve the languages and tools to better achieve the goals. Computational thinking is a fine goal, and it’s on the path, but it’s not the final goal. I really do mean […]
5.
Defining: What does it mean to understand computing? « Computing Education Blog | May 24, 2012 at 7:52 am
[…] machine is not a mental representation. Rather, it’s a learning objective. I suggest that understanding a realistic notional machine is implicitly a goal of computational thinking. We want students to understand what a computer can do, what a human can do, and why that’s […]
6.
Let’s call It “Computer Science” AND “Programming”: The fat line where most people will be « Computing Education Blog | June 6, 2012 at 8:08 am
[…] blending seemlessly and ubiquitously into everyday lessons as well as home life.” They need computational thinking, but not programming, argues Jason. Jason sees that only 1% of students should get programming. […]
7.
Essay calling for digital skills to be added to liberal arts disciplines « Computing Education Blog | October 30, 2012 at 9:34 am
[…] that Alan Perlis made back in 1961. The specific computing literacies being described go beyond computational thinking — it’s explicitly about being able to make with computing. Steve Jobs’ made a […]
8.
Code Acts: How Computer Code influences the Way We Perceive the World « Computing Education Blog | February 14, 2013 at 1:53 am
[…] thus limits one’s ability to understand modern culture and science. The idea is akin to computational thinking, but more about cultural practices than cognitive […]
9.
Computing Education Lessons Learned from the 2010’s: What I Got Wrong | Computing Education Research Blog | January 13, 2020 at 7:01 am
[…] do studies in order to measure the value (if any) of CT. I blogged about definitions of it in 2011, in 2012, in 2016, and in 2019. I’ve written and lectured on Computational Thinking. The paper I wrote […]