My biggest takeaway from Wing’s articles is that
computational thinking requires abstraction. In order to create and think
computationally one must be able to assess the project and decide how to bring
it out of a special case and into a generalized form. Previously, I have
thought of this as “translating into computer language”, breaking down an idea
into simple questions or steps that when taken together create a complex idea.
Thus in thinking about the USN students, it seems that the mentally challenging
part is not likely to be making a scratch program, but rather figuring out what
to make into the scratch program.
It’s a much more global approach to teaching programming because programming is
the language, but not the idea. I’ve been trying to think of projects that hit
the right balance between needed abstraction and accessible levels of
engagement.
The idea I’m most excited about is thinking about forests.
Forests are an excellent example of agent based modeling with levels. The
trees, shrubs and grasses all grow in concert and affect the final outcome of
the forest. While we frequently think of forests as unchanging parts of land
that have always been there, this is almost entirely untrue. Forests frequently
regrow: from fires, from logging, from tornados or merely from a fallow field.
I think it could be interesting to think about how forests grow and regrow from
various states and how their composition changes during growth. For example, in
older forests with lots of tall trees, there is very little undergrowth because
there is no available sun. In young forests, there are frequently many small
trees and there is thick underbrush because sunlight still comes through the
canopy.
Thinking about forests is initially overwhelming; there is
so much going on and there are so many factors for which to account. But we could start small, looking at the agents.
Students research (with assistance I’d imagine) what it takes for a set number
of forest agents to grow: coniferous trees, deciduous trees, grass, small
plants and shrubs for instance. You program each one as a sprite. The sprite
would then have scripts that check for water and sunlight and scripts that tell
it to grow or die. Then maybe you have a way to generate weather and keep a
report of the past weather. From there you could start building a forest.
The advantages of a forest as a setting are the directions
you could go with the program. Maybe you’re interested in regrowth after a
fire. Maybe you want to know what kind of animals would be happy in the forest
during each stage of growth. Maybe you want to know what effect extreme weather
would have. The disadvantage from the teaching perspective is the lack of
instant pay off. A forest has multiple agents which need programming. While the
programming is similar, you can’t actually have the forest until you have a set
of agents. Additionally, I’m not sure how you would visually represent the
agents (although perhaps, that is an interesting conversation to have with
students). My only other concern is scratch’s limitations. How many sprites can
scratch deal with without crashing? Or extremely slow processing?
It wouldn’t be an easy project, and it would certainly
demand computational thinking. But with the right combination of students it
could be a really neat modeling project with many applications.
I really like this idea! And it seems like it can be an activity that happens over a few class meetings - with different levels of thinking (discussed in different ways in a few papers now)/abstraction each class. I don't remember what grade level I did this, but I remember creating a habitat in a shoebox - taking into account different wildlife at various levels in the forest. This seems like the next step - adding in computational thinking concepts and relationships (fires, deforestation, etc) that may not have been addressed with the shoebox.
ReplyDeleteI also love your comment "programming is the language, but not the idea." I may repeat this too much, but I've always struggled with computer science classes that focus on learning a programming language. A language is a tool. While it offers the opportunity to better learn computational thinking skills and I will always promote coding, the idea behind how the language is utilized it important. I think your project concept does just that!