>Software is like recipes.
I like simple **metaphor**s.
Been arguing for software **literacy** frequently recently.
More in-depth thinking about "types". Specifically a "fixed-point/recursive" type that changes over time.
More in-depth thinking about "**type**s". Specifically a "fixed-point/recursive" **type** that changes over time.
For example a "block" **type** in minetest.
At the beginning you will just start with a set of simple block **type**s like "dirt", "stone", "brick" which differ in nothing but texture.
You may also build some simple tool **type**s to deal with the simple block **type**s like worldedit to save and copy builds or rollback to restore them.
But soon you will want all kinds of additional block **type**s like "trampoline", a block with a motion property; or "sign", a block with a text property; or "water", a block that flows; or "mesecons", a block that conducts electric flow.
Conceptually, these are all still the same "block" **type** at the beginning; yet programmatically their invariant "sub-**type**s" have changed --- meaning all the tool **type**s like worldedit and rollback will have been broken by them.