Hah, was planning on linking to Nicky Case[0], but of course that's exactly who's behind this! :D
Very exciting project. We're absolutely leaving "leaving money on the table" by not leveraging the full power of the brain for education and reasoning about complex systems. See also: Bret Victor's "Ladder of Abstraction" [1], and Kevin Simler's "Going Critical" [2].
Hadn’t heard of Case yet, but Bret Victor is an absolute visionary. His talks “Media for Thinking the Unthinkable” [1] and “The Humane Representation of Thought” [2] are eye-openers!
Nicky Case does incredible work. She should be a poster child for Patreon, through which I believe she makes most of her living. https://www.patreon.com/ncase
What would make explorables really take off is a killer framework to make building them easier, ala Ruby on Rails.
I know ncase has built some frameworks and I applaud his work, but this space just needs a lot more investment.
Here's what I think the killer framework will do really, really well: (Note this is VERY rough, it comes from spending 20 minutes trying to create an explorable a long time ago and realizing that the tooling just isn't right)
- 1) Turn the act of coding a model into mostly verbal reasoning by having a great framework language / API. Rails actually did this, turning the entire building a website into composing english. It greatly reduced the distance between the concepts / app that you were building and how you went about building it - i.e. Model has_many :users
- 2) A standardized convention on inputs, outputs, relationships, defaults, and time (step functions).
- 2b) A standardized convention of defining one unit, populations and groups of units within populations
- 3) Automated scaffolding to display raw data, with add-on libraries to easily scaffold formatted or visual data.
- 3b) Automated scaffold to visualize a unit, a population, groups within populations, and units within groups (a scaffold of a population is like table rows)
- 3c) Language / api should also make it dead simple and intuitive to control converting from numerical data to textual data. i.e. if you are modeling stress, what does 60 points in stress mean?
I think something inspired by ActiveModel (my Rails bias is showing) would be a great way to define the above since defining a strong way to define your data is also how you would get automatic scaffolding language and high level functions on top of it.
- 4) A dead simple way to display and embed models anywhere. 1 line of javascript or a 1 line import and you can plug it into jekyll, hugo, (any static site generator, really)
We're working on this with https://idyll-lang.org/, it does some of the things you mention already (standard conventions for how to do common tasks, standard set of widgets, handles loading data, extensible plugin system, etc).
But it is a big undertaking and there is still a lot of work to do. If anyone on HN wants to contribute or give feedback you can reach me at mconlen at cs dot washington dot edu.
Funny that your #1 requirement, for me, would be turning coding into mostly visual reasoning. Different skillsets, I suppose.
I think of code as laying out the results of a program execution (in terms of changing GUIs or lists of transformed data), and then building up an abstraction that captures all the instances.
So, a visual tool that let me paint examples, and build (named) abstractions that group them, would be my ideal development environment. Spreadsheets are the oldest somewhat supporting this desired workflow, and things like Brett Victor's Ladder of Abstraction or tools like http://aprt.us/ are the next level, but still fall short.
unfortunately, not really. The language you have to speak is still in variables, buttons and code.
I'd love to be able to write in a way that feels more like documenting models rather than writing code. Admittedly this is a really spoiled point of view since ideas are cheap but execution is hard.
A quick example is as follows:
Persons have stress level from 0-100, start with random stress, and belong in the following environment conditions:
Normal: Stress + 0 / year
Low Income: Stress + 5 / year
High Income: Stress - 5 / year
Change functions:
Every year, 0-3% persons change from low income to normal income
0-1% of persons change from normal income to high income
Population has 100 persons
Groups:
stress level > 50 is "high risk of heart attack"
stress level < 20 is "low risk of heart attack"
This kind of definition should be enough to chart out # of people in the high risk group over a period time.
What I imagine is writing more or less the above as psuedocode and then a framework to automatically scaffold a basic data view and controls for time / data manipulation.
edit i took a further look at idyll, and this language can probably be built on top of idyll.
The notion that only serious work can educate someone is something I hope future educators can dispel and build engaging platforms (edutainment).
I learned about game theory, communication, teamwork, strategy and business from gaming and sports. These topics would have been quite dry to learn in a sterile educational setting. In the same vein, I hope we move to a more experiment/physical based learning of science and technology over rote learning, since a lot of learners hugely benefit from that.
> The notion that only serious work can educate someone is something I hope future educators can dispel
This sounds super weird to me. I thought rote-learning was totally out of fashion, and now under-practiced because everyone thinks that learning should always be fun.
I don't know whether this is regional variation, age differences or political differences. And I there's probably some middle-ground: maybe you have to memorise your times-tables, but maybe it doesn't need to be boring.
It's a tough balance. My partner teaches grade 2. They focus on play and exploratory based learning. Parents are furious that their kids aren't instead memorizing times-tables.
I also work in this space, producing interactive content for physics education. I have an evolving framework for visualizing vector fields, such as electric fields. Example content includes an explanation of Gauss’s law http://www.vizitsolutions.com/portfolio/gausslaw/, where the graphs, texts, and equations are interactive, and changes to any of them are reflected in all of them.
A truly general framework will be tough, because of the different nature of different types of content. For example, even within physics I am working on a quantum simulation, where the simulation and interactions with it will be very different from the electric field examples. Perhaps for some very general interactions, eventually… I will definitely be evolving in that direction – for example making the electric field models easier to edit.
I have advocated this approach at a number of conferences, but the reception from companies has been lukewarm at best. They are able to sell content with limited interactivity, and the cost for this is comparatively high.
All of this content is founded in correctness, and in research proven instructional design principles, which do include gamification.
BTW, all of the code is openly licensed, and I encourage its reuse and solicit feedback on functionality and future directions.
>A truly general framework will be tough, because of the different nature of different types of content.
I've been thinking for years what it would take to create a general framework like that, and I think we're in the middle of a language revolution like the one in the 80's, that will end-up creating such new system; all the pieces are in place, it just need one project to integrate the best parts and take off.
My ideal solution would integrate:
- the programming model of a spreadsheet (reactive functional programming), useful for building models;
- interactive graphics like those in explorable explanations, integrated with the data models stored in the spreadsheet;
- a good templating library with a visual designer and auto-generated markup, for building visual components based on the models;
- and an outliner storage model with "external reference" transcluded nodes, to build and evolve projects from the tool itself, without an external IDE.
Several companies are very close, but none of them include all these pieces, as some of them come from programming language design and others from user interaction; right now, only a very senior interdisciplinary team would know how to integrate all them in a single unified approach.
Great explanation! I'm now tempted to try this out myself for some experiments. I wish my statistics book in college used these kind of interactive explanations.
> Lion cubs play-fight to learn social skills. Rats play to learn emotional skills. Monkeys play to learn cognitive skills. And yet, in the last century, we humans have convinced ourselves that play is useless, and learning is supposed to be boring.
What a load of rubbish. Human children play to learn just like our animal cousins. But after language acquisition we have a far more efficient tool at our disposal. Am I supposed to learn that electricity is dangerous by playing with a car battery?
That's not to say that this isn't good and adults can't learn some things more effectively by interaction, but, please, let's not play down the importance of language when it comes to adult learning.
I haven't put any effort into adding explanations of anything, but looking at the one titled "Basic Beats" reminded me of this little thing I built a while back for playing around with rhythms in a similar circular way: https://michaelmior.github.io/rhythm-wheel/
It came about after seeing a few YouTube videos based on the book "The Geometry of Musical Rhythm." So the idea definitely wasn't mine but I'm a hobby drummer and the idea really intrigued me.
I am waiting for the day when you can learn math kinesthetically like skateboarding or some other full-body activity. The video I linked below embodies what I'm thinking. This could easily be turned into a VR game where the user "is" the math. https://youtu.be/ovLbCvq7FNA?t=849
We've also got lots of these over at treena.org. We are planning o make explorable lessons. Take a look at https://treena.org/lesson/parametric-functions and try playing with all of the obvious things.
Anyone remembers similar in style animation/explorable that was about forming of the groups? It talked among other things how groups become stronger by turning against outsiders/other groups
Going through the Trig example, I would have given anything for this in high school. For a topic that I currently have to use on occasion and feel inadequately informed about, I can't wait to get to the Fourier transforms module.
Take an example with only two fireflies. Their clocks won't be at the same point at first, of course.
So one lights up... and the instinct is for the other firefly to try and light up at the same time. How?
Since it was going to light up later than the first fly, it shortens its cycle a little bit and lights up a little sooner.
Repeat that cycle a few times and soon enough, the second fly has 'caught up' and is flashing when the first one does.
Add more fireflies, and its just more of the same. When a nearby firefly lights up, the ones close by speed up a little. Eventually, they all converge on the 'fastest' time.
Very exciting project. We're absolutely leaving "leaving money on the table" by not leveraging the full power of the brain for education and reasoning about complex systems. See also: Bret Victor's "Ladder of Abstraction" [1], and Kevin Simler's "Going Critical" [2].
[0] https://ncase.me/
[1] http://worrydream.com/LadderOfAbstraction/
[2] https://meltingasphalt.com/going-critical/