GSoC 2020: Thoughts in Heads
So the design doc feedback turned out better than I thought! I think I was definitely right about the weekend posts burying it a little bit, because the feedback picked up a lot during the week. Ms. Susan (one of the maintainers on the App Inventor team) posted a response on the discussion thread, and I think that really helped get conversation going.
In the end the design doc got responses from ~sixteen people (besides myself). Six of those people are maintainers or participating in GSoC. The community post was liked by an additional four people that didn't respond.
I'm actually really happy with this turn out! I think it is great given the fact that design documents aren't usually shared with the wider community.
Most of the responses were positive, which is a good sign! But I did feel like the majority of the responses were from a user perspective. I would have liked to see more responses from extension developers. But when I reached out to some extension developers directly, they didn't have any critiques. So at the moment I'm assuming the design is fine in that area.
If I were to do this again in the future, I would probably tell people not to comment directly on the google doc. That way the post would be more visible, because more people would be replying to it.
I'm hoping that this week we'll be able to get some basic decisions made so that I can start coding ~June 1st. After my meeting with Mr. Lyn last week, it seemed like the main thing he wanted to do was look into reflection before deciding how to handle modifying the Java Scripting language. So after that is completed I think we'll be able to have a meeting with the core team and hash stuff out. It would be great if we could hijack the GSoC meeting on Thursday, but I doubt that will be possible.
Either way, I've been working on getting some meeting notes together (finding the main decision points, aggregating the feedback) so that hopefully it'll be easy to choose between options.
And the last thing I did this week was get my Blockly PR merged in. So if we decide to go with the shadow blocks option that'll make that a lot easier and less hacky.
This week I've been reading Productive Thinking by Max Wertheimer. This book was published in 1945 (a few years after the author's death) as an introduction to a new school of psychology. This school of psychology, called gestalt psychology, dealt with how people connect up new ideas.
As I've been reading this book, and weaving it into my thoughts about the other articles I've been reading, I'm starting to think that there are 3 kinds of thinking. Knowing, Understanding, and Producing.
I think of knowledge as the most basic kind of thought you can have. It is born of repetition and conditioning, and is similar to how associative psychologists think about thought.
Knowledge can be measured through recall. It is good for doing your times tables, or knowing the year the US declared independence, but it isn't transferable.
Knowledge seems to be gained via association. You can teach knowledge by continually strengthening a single association (i.e. drilling). Or you can try to teach it trying to create lots of weak associations. For example: when I had to learn vocabulary in school they made us: define the word, define the part of speech, find synonyms, find antonyms, use it in a sentence, and draw a picture. All to get us to create more associations.
One particularly good method of creating many associations seems to be wrapping the knowledge in a story. Human brains seem to be built to store these kind of cause -> effect relationships.
I think of understanding as the next step up from knowledge. For example: you can know your times tables by memorizing them, but you only understand them if you can feel how multiplication is just repeated addition.
Understanding can be measured through transfer tests. This is because understanding means that you've woven the concepts into your existing mental framework. This allows you to reach beyond recall, and see how your understanding applies to new situations.
As I talked about last week, you seem to be able to teach understanding by (1) providing learners with a framework to weave new knowledge into, (2) actively encouraging them to weave in that knowledge.
I think of Producing as yet another step up. In understanding you weave ready-made ideas into your existing mental framework. While in producing you identify gaps in your existing weave, and produce new ideas to fill them. This is similar to what Productive Thinking explored.
Someone's ability to think productively could be measured by giving them a problem they've never seen before, and then seeing how they try to solve it. Productive Thinking explored many examples of this, such as teaching people to find the area of a rectangle, and then asking them to find the area of a parallelogram.
At the moment, I'm not sure that productive thought is teachable, in the same way that patience isn't teachable. Because productive thought is a very active process that must be taken on by the learner, it seems that the only thing you can do is encourage them to practice it.
My ideas about this will probably change as time goes on, but I do feel like this is providing me with a good mental framework to think about how we can teach learners different things, specifically computer programming.
Knowledge could be gained via colorful examples and stories. While understanding could be reinforced by providing mental models via the structure of visual languages (as we talked about last week). And productive thought could be encouraged by creating open-ended platforms, like Scratch, that allow students to create, and then fix, their own problems.
Wertheimer, Max "Productive Thinking" 2020, 1945
Alda, Alan "If I Understood You, Would I Have This Look on My Face?" 2017
Lakoff and Johnson "Philosophy in the Flesh" 1999
Mayer, Richard E. "The Psychology of How Novices Learn Computer Programing." Computing Surveys 1981