Thinking about computational thinking

I have been working on a revision of our textbook and every time I go through this process I consider what I think a textbook should be. As those who follow this blog would likely guess, we write a book focused on technology integration; I.e., the use of technology in support of learning. We have been working to keep our book current since it was first published in 1996. The book was originally imagined as a text for what I would describe as the undergraduate “technology for teachers course” although it has been assigned at other levels and purchased by individuals. 

I have come to divide the books assigned to preserving and in-service teachers into two categories – textbooks and trade books. I am not certain what label should be attached to the second category of books, but I found a post by another author contemplating this same issue and she used trade book as the alternative category to textbooks. 

I don’t have difficulty placing books into these two categories and I hesitate to list popular trade books as examples out of a concern that educators might be offended assuming I see these books in a lower category. This would not be my intention, but I do think it useful to explain how I think each book addresses a different goal. I see trade books as more opinionated, advocacy-based, and narrower. As a textbook author, I obviously have a perspective I want to pass on, but I feel a strong responsibility to communicate with accuracy the positions and research-based arguments of the advocates of what could sometimes be competing approaches. While the lack of a clear message on what to do and what not to do, I assume some looking for clear direction may end up frustrated. However, when I read the research to lack a clear consensus or to be based in different value systems, I see it as my responsibility to describe and not decide. The authors who offer trade books don’t hedge in this way.

Here is an example I am presently struggling to resolve. I have written about programming experiences in K12 classrooms since our first edition. What I find interesting is that this chapter was in the book and then not included and now included again as a result of editorial decisions reflecting priorities and the size/cost of the book. As an observer of these changes in priorities and as an individual who programmed as an important component of my “real job”, this vacillation is quite interesting. I wonder if anyone has thought of doing an analysis of multi-edition educational technology books to see if my own experience is typical. This is not the focus of this post, but I do find it intriguing.

I had no difficulty explaining programming in the early days and how it represented a great occupational opportunity. The focus has now become something different and I am struggling with the concept of “computational thinking” and how I should try to present it to others. I find the concept “squishy” and difficult to arrange among other higher-order thinking processes and skills. I understand the “think like a programmer” position, but at what level should I imagine this directive. Based in my personal experience programming, I can map some of the sub-skills advocates identify to personal practices of my own that were good or bad. It is when I try to move up my own hierarchy of thinking and reasoning practices that I have difficulty seeing computational thinking as distinct from aspects of problem-solving, problem-finding, critical thinking, and metacognition. In other words, is there something real here or is it just a new vocabulary for old concepts that is being used (perhaps in all sincerity) to push educators to devote time to short duration programming experiences across grade levels (hour of code) and the reconceptualization of experiences in a wide variety of areas without proven advantages in skill level. I want to get past the personal feeling that the examples I examine could not be adequately described as applying the scientific method, the writing process approach, problem-based learning, etc. Learning coding skills is great. It is this vague expansion of what has evolved into other areas of the curriculum as providing a perspective more useful to teachers I struggle to grasp. I keep wondering what teachers mean when they describe their interest in computational thinking.

End of rant.

For anyone interested in this topic, I will offer one example.

Arastoopour Irgens, G., Dabolkar, S., Bain, C., Woods, P., Hall, K., Swanson, H., Horn & Wilensky, U. (2020). Modeling and Measuring Students’ Computational Thinking Practices in Science. Journal of Science Education and Technology, 29(1), 137-161.

Arastoopour Irgens, et al, (2020) evaluated computational thinking within high school students studying what I would describe as the ecology of predator/prey dynamics. The study caught my attention because as an undergraduate I earned a degree as a biology major, was interested in what at the time was called ecology, and planned to be a high school biology teacher. The researchers suggest that the relationship between predator and prey (e.g.,wolves and moose) over time has traditionally been best represented through calculus (no way for me to evaluate this claim), but high school students might more productively appreciate this dynamic as the interaction between two agents each independently coded to “act” according to certain rules. So, to explain as I understand this, you can code independent agents to independently follow rules and then see what happens when the agents interact (see an example I created some years ago using an environment called AgentSheets to demonstrate the distribution generated over time by combinations of dominant and recessive genes). To be clear, in this study of the development of computational thinking the students are not coding the simulation. They are setting variables in an existing simulation and then viewing the consequences of these settings depicted in several ways (see the following image).

The cumulative action of these agents when graphed could represent the dynamic relationship and when this graphed representation matched data from the field insights gained from manipulating the coding of the agents would offer a way to develop understanding. The following image taken from the article shows the sliders used to set values for variables, a depiction of moose and wolves over time, and graphic representations of the same number of moose and wolves over time.

As the students explore this simulation to some extent guided by teacher suggestions, the research tracks observations the students make. Some students become capable of explaining relationships between different representations of the interactions of the agents and variables – changes in the frequency of predator and prey over time. One aspect of computational thinking is the representation of a phenomenon at different levels of abstraction (e.g., what a program is to do vs. the code). In response to manipulating this simulation, some students began to explain how the interaction of predator and prey were represented in multiple ways by the visual representations produced by the agents and verbal representations of the interdependencies depicted in these various ways.

So, you can describe the development of this descriptive explanatory capability as evidence of computational thinking. Has this experience with the agent-based simulation provided a different way to understand the phenomena? I think it does. However, what does this research tell us about learning and instruction? What aspects of the experience make this unique and valuable and would it be enough to just claim that the learner manipulation of simulations allows learners to develop insights not appreciated by direct instruction? Is it the opportunity to predict an outcome and then test this prediction that is the key? This happens in coding (does the program run as anticipated), but it is a consequence of experimentation more generally.

Loading

Think like a practitioner – the generalization of an idea


I would suggest that educators have become familiar with an example of the concept of thinking like a practitioner but may be missing the bigger picture. The example presently in vogue is coding (programming) as in proposing that computational thinking represents a generalizable set of thinking skills (procedural skills) applied by programmers and possibly developed through learning to program at an age/experience appropriate level.

Before schools dive in head first, it might be prudent to explore comparable areas of practice that could develop important knowledge and thinking skills (I like to use the term procedural skills). What would be the most productive and efficient uses of this concept in classroom settings? If time and resources are limited, what types of practice (as in the activity of a category of practitioner) should be prioritized?

Do we have other practitioner experiences in classrooms? I have been thinking about this question for some time. In my thinking, I have found it useful to differentiate knowledge from skills. What is it a programmer knows? What is it a programmer has to do to program? Substitute a different practitioner for programmer and consider the knowledge and skill distinction I have identified. Do students exploring these other areas of practice develop important knowledge and procedural skills?

I started thinking about this when exposed to the training of a group of practitioners I knew little about – historians. I was not a fan of the study of history even though I had experienced high school. At a later point in life, I learned a little about the training of historians and became familiar with what I as a trained research psychologist would call a “methods” course. Future historians took a course I recall being called “The historians’ craft”. Essentially this course developed the skills and expectations by which the historian turns sources or data (photographs, diaries, interviews, etc.) into explanations of historical phenomena. How do you maintain objectivity? How is it you identify trends in causation that can be differentiated from the perspectives of the individuals offering the artifacts that are being examined? Is it possible there are multiple accounts of history that are legitimate? What historians do is more than learn about what other historians have concluded. What others have written might be described as background knowledge. What historians do is acquire background knowledge and combine this through rigorous thinking with careful data acquisition procedures to create more advanced and accurate accounts of the past? I spent my career as an educational researcher (psychologist) and I additional was trained at the undergraduate level as a biologist. I started to appreciate that all of these areas of practice involved considerable overlap when it came to the knowledge base that must be acquired and the practitioner-specific data collection and analysis skills that must be applied.

My point – I think most professions at a core level involve knowledge and skill development. When it comes to generalizability, is computational thinking superior to historical thinking? Since we expect students to take several history courses already, perhaps by including opportunities to “do history” we might develop some very important critical thinking skills. How do you avoid bias in personal thinking? How do you come to a conclusion that reflects multiple perspectives? We could certainly use citizens with skills such as these? How do these skills stack up against skills such as breaking a problem down into subcomponents and algorithmic thinking (claims for the type of thinking developed via programming).

I think the “think like a practitioner” approach works well for some practitioners you might not consider. How about think like an author? Yes, everyone is “taught” to write, but actually writing to communicate is different. Consider that writing to inform often requires that you learn about a topic. For example, I am not making up what I am writing here up. I have learned about topics such as “authentic tasks” and the training of historians in order to communicate through the procedural skills of writing. Writing to communicate also involves higher order thinking skills of multiple types. Like programming, it requires identification and organization of the parts of a whole. It involves the exercise of critical thinking. Given the multiple and often conflicting positions on an issue, what position can I best take and defend.

There is an instructional argument for the value of “writing to learn” that is consistent with both the development of writing, thinking, and cross-curricular content knowledge skills. What ever happened to students spending time writing to learn? Not an “in” approach at the moment, but it will probably resurface when coding to learn fades.

How about teaching? Teachers are certainly a category of practitioners. Teachers must develop both content knowledge and pedagogical knowledge (procedural skills). Some of these procedural skills involve explaining and developing a different type of understanding than is required by just a primitive level of knowing. Teaching to learn is not really that difficult to imagine than writing to learn and offers many of the same benefits. Both have general utility across content areas at a level of frequency of possible use I just don’t see for programming.

This post is getting long, but I hope you can see where I am going with this. What would a scalable level of functioning like a biologist look like? Students do labs, but how closely does a carefully orchestrated lab experience compare to what a biologist actually does? What would “authentic” research look like for any area of practice that can be associated with a course-specific content area?

Etc.

Etc.

I think it possible we have become fixated on programming because it is a new content area for K12, seems directly associated with a profession that is seen as lucrative, and seems to offer unique potential. I don’t see programming as offering unique potential or necessarily developing cognitive skills that are unique. In my opinion, what programming does offer is a ready-made scalable practitioner experience and this is attractive. Kids can code in Scratch, Kids can code simple robots. Students can take complete programming courses at the secondary level. If these opportunities get educators and administrators excited, I wish they would widen their vision a bit, appreciate the similarities of logic I have identified, and recognize the practitioner opportunities that could be associated with many existing courses/content areas.

Note: If this perspective is of interest, some of my original thinking was seeded by the following article.

Brown, J., Collins, A., & Duguid, P. (1989). Situated cognition and the culture of learning. Educational Researcher, 18, 32–42.

Loading

Why computational thinking?

I wish I could convey my opinion on this topic in a way that is both concise and persuasive. I just don’t think I can. Part of the problem is that the way so many educators think about computational thinking, if they think about it at all, is part of a bigger set of topics that includes coding, computer science, STEM, occupational preparation, and equity of who can eventually take advantage of the occupational opportunities of working with technology. I have different opinions about many of these topics in isolation, but too many in my opinion see the topics as tightly integrated. Second, I question what many understand computational thinking to be and exactly why they think it is valuable. How specific of a description could you provide?

I have this mental image of a fourth-grade teacher engaging her class in an hour of code activity suggesting to parents that these students are being prepared for occupations of the future and are simultaneously developing valuable computational thinking skills that are helpful in many aspects of life. It is my opinion that this educator while unable to write code herself or himself is aware that digital technology relies on code that someone has written, that someone must have the skills to write this code, and that there are many many vocational opportunities for those with the skills to write code. More important to this blog post, the notion of computational thinking is not something the educator can really describe, but this type of thinking is evidently potentially of value to the improvement of performance in other academic areas and eventually when developed in many areas of life. Somehow computational thinking, whatever it is, can be developed through learning to code and these brief activities arranging blocks representing commands that control the dancing cat on the screen are making a contribution to this learning.

I, in no way, am demeaning the capabilities of this hypothetical educator. I am attempting to describe what I think is a very common situation. I admit despite purposeful attempts to read the literature on computational thinking going back to Papert’s works and the careful research on just what students learning to program in LOGO learned and despite thousands of hours writing code myself that I find myself in a somewhat similar situation.

I can point interested parties to definitions of computational thinking and to “standards” intended to identify what must be developed to advance this capability. I will provide what I think is a nice source shortly. I think I understand what at least some of the skills and dispositions described as components of computational thinking are and I recognize the presence of examples of these components in various advanced academic domains.

So, for example, computational thinking involves developing and thinking in terms of abstract, multilayered models. These models are descriptive at one layer, but link to actions (code in the case of programming) and data at other levels.  By my understanding, you see examples of these multilayered models in:

Macroeconomics

Biochemistry – Krebs cycle

Psychology – cognitive models such as information processing theory

Education – Flower and Hayes Model of the writing process

You see methods for testing models in statistical procedures such as path analysis and structural equation modeling.

You can work through this type of exercise yourself if you are trying to understand how to see the presence of some of the components of computational thinking in other areas.

It is not that I don’t see the value in learning many of the skills and dispositions frequently described as computational thinking. It is not that I don’t see the skills and dispositions as important to coding. So, what is my hangup?

Let me start this way. I have just read a report from a group that has labeled itself as Digital Promise entitled Computational Thinking for a Computational World. This report is obviously pro computational thinking. The report goes through the traditional arguments for programming – there are lots of jobs and technology is and will increasingly play an important role in all aspects of life. Then, the authors add an argument based on computational thinking. In support of the general utility of computational thinking, the authors differentiate coding (the specific skill of programming), computer science (coding plus other issues such as ethics, social impact), and computational thinking (the thinking skills and dispositions programmers apply in programming). The present these three topics as a Venn diagram both to argue that they are interrelated, but also independent. So, the thinking skills and dispositions used by programmers have broader utility than just to be used in coding (I guess this is the intent of showing that the circles representing computational thinking and coding are not the same circle.) The leap of logic that is encouraged is that coding and computer science encourage the development of these thinking skills and dispositions that have this broader utility. As a psychologist, I am most familiar with labeling this final claim as transfer.

I will return to the question of transfer at a later point.

Perhaps I can do better than use descriptors such as thinking skills and dispositions. There are plenty of examples of other writers making the effort to be more precise in identifying these components. One of my “go to” efforts of this type is provided by the paper entitled “Demystifying computational thinking” by Shute & colleagues (2017). The authors do a nice job of describing the historical background of the effort to identify these components, points to a number of efforts to do so, and offer their own list.

The authors do one other thing I believe is helpful. Again using a Venn diagram, they identify the overlap and uniqueness of computational thinking and the thinking required in another discipline (math). It was this Venn diagram that offered a way to think about my core concern with the emphasis being placed on computational thinking. If thinking skills and dispositions transfer (a complex topic itself), what is unique about the skills involved in coding. Why is coding better than any other domain in which abstraction, model building, testing models against data (experience), modification of approaches when this match is not particularly good (debugging), etc.? For example, how is computational thinking different from whatever one would describe as the collection of skills and dispositions involved in writing? Writing has the advantage of being an important life skill and a generative activity fairly easily adapted to the processing of information and the externalization of the cognition associated with procedures involved in most content areas (writing across the curriculum). Admittedly, writing activities may not presently be implemented to these ends, but why retool to a new area of emphasis, coding to develop computational thinking, when improvements in enhanced writing opportunities, say multimedia writing to persuade, to analyze, and to explain, could offer a more efficient way to develop similar thinking skills and dispositions. Wouldn’t the professional development necessary for teachers to make more effective use of writing as writing to learn be easier to implement than the professional development necessary to prepare most teachers to use coding to learn. Maybe writing across the curriculum needs a similar catch phrase that implies similar benefits to computational thinking. Writing across the curriculum may just need a new marketing campaign.

I suppose one could argue that the overlap in skills noted by Shute and colleagues offer a different insight. Wouldn’t it follow that skills developed through coding also apply in math? Perhaps, but since math is already taught through multiple classes why add an independent and additional way to develop these core skills. Second, see the comments on transfer that follow. A preview – skills are not skills. The version of problem-solving developed through programming is not the same as the version of problem-solving developed through learning and applying math.

A few words about transfer. First, the expectation that general, higher level skills can be developed sounds great, but is very challenging to get done. Problem-solving or critical thinking in one content area do not automatically work in another area (Perkins & Salomon, 1989). It is not that skills developed in one area cannot offer an advantage when encountering what could be similar situations in another area, but that certain conditions must be met to make this transition likely. Perkins and Salomon (Salomon & Perkins, 1989; Salomon & Perkins, 1989) describe a couple of ways to accomplish this goal they label high and low road transfer. Low road transfer takes a lot of time and varied experiences likely impractical in K12 settings and high road transfer requires mediated experiences (instruction) most educators would find they were unprepared to provide. Just to be clear, the ideas advanced by Salomon and Perkins were based on their careful analysis of efforts to demonstrate transfer for students exposed to LOGO programming.

So, what is my present thinking.

First, programming is a valuable vocational skills and the opportunities to explore should be made available. There are challenges. Most programming courses are AP courses and this does not seem like it makes sense as a “coding for all” opportunity. Fitting programming courses into the curriculum in many schools is a challenge and many states do not allow a programming course to count toward math or science requirements. Then, there is the challenge of finding educators with the background to teach these courses. Given what is required for far transfer, skilled instruction is necessary. If we are serious about this area, addressing some of these challenges should be a first step.

The question of which skills and predispositions are developed by which tasks is even more complicated. At present, I don’t see a unique benefit for computational thinking as distinct from other generalizable thinking skills and dispositions that have a history of being developed in other more convenient ways. I could be convinced I am wrong, but I don’t see the research to make this case at present.

Resources:

Digital Promise (2017). Computational thinking for a computational world

Click to access dp-comp-thinking-v1r5.pdf

Perkins, D. N., & Salomon, G. (1988). Teaching for transfer. Educational leadership, 46(1), 22-32.

PERKINS, D., & SALOMON, G. (1989). Are Cognitive Skills Context-Bound? Educational Researcher, 18(1), 16–25.

Salomon, G., & Perkins, D. N. (1989). Rocky roads to transfer: Rethinking mechanism of a neglected phenomenon. Educational psychologist, 24(2), 113-142.

Shute, V. J., Sun, C., & Asbell-Clarke, J. (2017). Demystifying computational thinking. Educational Research Review, 22, 142-158.

See also Why should I care about computational thinking?

Loading

Computational thinking, historical thinking, and beyond

Old folks are supposedly famous for reacting to their younger peers by responding to their new ideas claiming “we already tried that and it did not work”. Sorry if some of my comments seem to fit this description. However, …..

The limited time available within the school day is limited and interested parties seem to be arguing that their content be given a larger portion of the pie. I accept the value of advocacy and I consider myself relatively neutral. I become critical when it seems to me the positions taken go beyond what I think can actually be delivered. I agree that not everyone really needs what everyone gets and, that when practical financially, greater flexibility be provided. However, when it comes to innovation, two positions that cause me to react with skepticism claim a) all students need this new experience, and b) this new experience develops general skills/knowledge in ways not now accomplished by the existing curriculum. Here is where I want to see some evidence so education does not given in to the fad of the year.

Presently, there seems to be interest in something called “computational thinking.” I have no idea if this is really new or a rebranding of an earlier idea. I remember reading Papert years ago and he proposed a computational way of understanding geometry. I admit when I first thought of the way he proposed understanding “circle” I thought there was something unique about his perspective. Of course, I knew the definition of circle – a closed, plane figure consisting of all points equidistant from a point, but being able to generate this definition was not really understanding. Now, if you imagine yourself as the LOGO turtle standing on a point and you walk forward a given number of turtle steps, lower your pen and walk one more step, raise the pen, then backup the given number of steps +1, you have created a point at a given distance from a point. Turn right one unit, repeat, turn right one unit, etc. You have a circle.

I admit this is my one example. However,  the difference between my ability to offer the definition of a circle and create a circle via coding has influenced my understanding of understanding. Is this reaction unique to programing or is the capacity to execute a construct through action a more general way to achieve understanding? I understand what I can do.

Flash forward to the present and recognize that computational thinking has experienced a renaissance. What I mean by this is that some in education are again promoting the value of learning to program, but also proposing more general benefits for these experiences. Clearly, those of us who have developed programming skills (now sometimes called coding) have experienced vocational advantages. Programming seems a skill for the 21st century based on the larger role digital devices play in all aspects of our lives. While I agree with the value of this particular skill as important in multiple vocations, I balk at the argument that it is a skill for all or that what students might learn through programming courses goes beyond the skill of programming.

My concern is that those in various disciplines argue too broadly for the benefits of their discipline. If a particular discipline happens to be in favor for one reason or another (STEM seems to be the in thing at the moment), there seems a tendency to embellish a bit and to argue that a skill is more than just a skill.

So, just to make a point, I think I can make the same case for several disciplines not typically considered as being broadly beneficial. For example, consider what could be learned from history. Yes, yes, I understand about important names and dates, knowing where we came from, and not repeating mistakes. However, historians should argue there is the potential to teach far more. What historians do is not what you likely learned from taking history courses. You learn what historians learned, but you do not learn how they learned it. Historians piece together accounts from multiple, primary sources. Since sources were generated by individuals with different perspectives, i.e., biases, piecing together an account of what likely happened is a great exercise in critical thinking. There is also great value in appreciating that individuals experience history from different perspectives and with different personal outcomes so the consequences of historical events is complex and multifaceted. Anyway, when explained in this manner, there is the potential here to develop very important higher order cognitive skills and such skills are exactly what reformers contend are missing as a consequence of typical educational experiences. Think like a historian.

I do promote a given activity both as useful for all and as a way to develop thinking capabilities more generally. My personal recommendation for an alteration of typical practice would be to place a greater emphasis on writing. Yes, students are taught to write, but I think they should write more as part of all classes they take. There are limits when you learn to write by writing to practice writing. Beyond the basics, you learn to write by writing to communicate. Students should write for their parents and they should write for their peers. They should write for themselves. Mostly, they should write about they learn. This seems more purposeful than writing about an arbitrary topic assigned in English class. The effort in putting something down on paper leaves far less room for the assumption of understanding than does just studying. There is something about that blank sheet of paper or monitor screen that challenges the illusion of knowing. Call it “Writing to learn” or “Writing across the curriculum”, the flexibility of writing would be my recommendation for an activity required of all and offering higher order advantages.

Loading