Missed a talk this morning because I had to give my own talk 🙂
Baker is now a curriculum developer at Code.org where he runs professional development of teachers but also analyzes data at code.org even though he says he is not a researcher himself. Code.org is a non-for-profit in the US running the Hour of Code every year in the week of Grace Hopper’s birthday. In 2015 about 100 million students in the entire world have tried at least one hour of code and in 2018 it were 500 which is really impressive!
And they do more than that, they do not only want to do this hour, but also create systemic change and creating a curriculum to be used in the classroom, and increase the number of cs teachers and learners in the US. They also have a focus on increasing underrepresented groups.
Some PL considerations from education
“You can’t think seriously about thinking without thinking about thinking about something” – Seymour Papert
Baker states that education needs languages that are learnable and expressive, but he wants to add a new dimension called “teachable”. This means empathizing with a novice learner (looking at a screen of gibberish) but also at the novice teachers. Teachers are now used to design pedagogies around the constraints of the language so maybe the PL community does not really need to address these issues. Not really sure if I agree with that but also not sure I fully get it.
Cool question they have in their interviews! They ask: “what is hard to teach in a programming language and why?” then they need to give an instance, 3 reasons why it is hard and suggest interventions (so secretly they are testing if they know misconceptions)
What is important for teachability
One of the things that confuse learners is when things change, patterns break to rules are mutable. For example
- When you start on the command line and then move to an IDE you are telling them that programming is confusing! We do not even know where to do it
- Different paradigms in one language like OO and FP might not be a good thing
- Flexibility or expressiveness might not be a good thing (for example to have i++ or ++i or x=x+1)
- Overloading terms (like for in a loop and in a list comprehension) can also be confusing
Are we talking about Python? I guess we are
Wow, there is a study that shows that variable reassignment (something like x = x + 1) highly correlates with success on the programming exam. This is because the students that understand it, understand that they are not in math class anymore.
I argued that maybe this is a PL concern and we should maybe pick different symbols but Baker answered that it is not that hard to explain and it helps to understand this is all man made, which is a great perspective! Stefik has a paper on this!
Together with patterns, mental models help to craft a story on how things work and why, to tell the story of why we are programming. Here are a few things that you could use as the first lesson, imprinting a vision on students:
This ties in to the idea of opinionated languages and why Java is hard to teach, says Ciera. It is many things so it does not have this strong narrative. The IDE does a lot of heavy lifting while teaching, like code completion, debugging, testing, scoped toolbox (code.org)
Things to think about
- How close are we to the machine and how that affects thinking (think assembly versus scheme). This is also related to kids saying that “Scratch is not real programming”.
- If you are close to the machine (and get it), it make answering why a lot easier later.
- Abstraction really matters for programming.
As an example, Baker creates a microlanguage with students! First they write down commands that are needed in natural language, and then with paper sheets they learners really make a language. It is a nice equalizer because kids that can program miss things like if.
- Making programming domain-specific can make things harder too! What is programming?
- And finally do not forget kids are still in school, so reading and writing levels and logic levels can vary a lot! And are the programming lessons reinforcing what kids know about science or math or confusing it?
The ideas of Scratch are low floor, high ceiling and wide walls, but Baker would prefer that the wall get wider when the ceiling gets higher. NICE THOUGHT, however it is also somewhat at odds with my perspective of free exploration to keep children engaged in things they care about.
Programming environments at code.org
At Code.org they use two languages: Blockly and Droplet, and there are two modalities free play and code studio which is the toolbox that gets bigger with every step (fitting Baker’s wider walls). There are 4 modes of projects to create that allow for different “views” on what programming is or does.
I had not checked out the App Lab and Game Lab before, it is a really cool mix of text and blocks!!
This same types of blocks are also used in the studio, the blocks in the MineCraft and Frozen lessons but also these js like things in app lessons.
There will be a new AP programming exam that will be language agnostic, so it will show questions in blocks and text in a very simple languages. It is a bit weird in terms of loops, since it only these loops:
Even though this looks really weird to us, this pseudocode does not impede understanding and reduces the different between boys and girls and urms and non-urms, and kids understand better with blocks (paper not published I think?)