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" , and Kevin Simler's "Going Critical" .
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.
- 5) A killer tutorial.
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.
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.
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
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
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.
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.
I commend you on what you're working towards!
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.
I think you mean "formal" or "prim" more than "serious".
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.
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.
I can already see explorables is one of the very rare content sites that I will bookmark and go back to.
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.
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.
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.
Looks interesting though.