The Word Icosahedron Had to Wait
Situation
Leo is in Grade 9 and learns very fast.
This was his 6th coding class from zero, and only his 3rd day since he first met p5.js.
We were playing with a 3D geometric construction using the golden ratio. I showed him how to organize the 12 vertices: for each golden rectangle, start from the bottom-left vertex and go counterclockwise.
He followed naturally.
Along the way, he was absorbing a surprising amount of programming:
arrays, arrays inside arrays, indexes starting from 0, functions as our own convenient tools, push() and pop(), translation, rotation, function naming, and the strange professional discipline of not missing a space or adding an extra one.
Turning Point
Then came the edges.
There were 30 pairs of vertices to connect.
Leo went smoothly through most of them, but a few fought back.
Sometimes he connected the wrong pair, and a line went straight through the solid.
Other times, one of the 36 coordinate values had its sign flipped.
We checked, fixed, tried again.
I asked him:
“What do you expect?”
“Polyhedron,” he answered.
Not 20 faces.
Not an icosahedron.
Just polyhedron.
And eventually I heard a loud:
“Done!”
A complete wireframe appeared on his screen.
Leo immediately spun it with his mouse, checking it from different directions.
Emergence
We had some time left, so we started rendering the faces.
“triangle jumped into my mind,” I said. “We can use the triangle function to draw triangles, but I haven't tried it in 3D. I guess we need 9 values for 3 vertices.”
Leo put it in code.
“Any 9 values. Just give it a try first.”
He did.
It works!
A white triangle appeared.
We were so confident that we immediately wrapped the idea in our own tri() function, using the vertex indexes instead of typing all those coordinates again.
Then we tried our real vertices.
It failed.
The white triangle turned out to be sitting on the X-Y plane.
What was wrong?
Leo had no idea.
I didn't either.
Maybe our first arbitrary triangle had only looked right. Maybe triangle() wasn't interpreting those nine values as three 3D points the way we expected. We had found something interesting, but we hadn't really tested what we thought we had tested.
The class was over.
“Let's comment it out and share our achievement today,” I said.
Leo stopped me.
“Wait, keep this white but wrong triangle in our demo. It looks great inside our polyhedron frame.”
So we kept the bug.
“It's OK this triangle function doesn't work,” I told him. “We have another way to render our faces. But that belongs to our next class.”
beginShape() was already waiting in my mind.
Learning
What impressed me wasn't that Leo independently discovered a famous solid.
He didn't.
I was guiding him throughout.
What impressed me was how much he could understand, remember, and put together after only three days of p5.js.
He could take a mathematical structure and represent it with nested arrays.
He could understand that an index starts at 0.
He could use functions as tools we create for ourselves.
He could organize geometric data according to a consistent rule.
He could reason about coordinate systems, translation, rotation, and temporary transformations with push() and pop().
And when something went wrong, he could stay with the problem.
The final white triangle was wrong.
But it was also useful.
It gave us another question for the next class.
Theme
Learning is not a straight line from knowing nothing to knowing the answer.
Sometimes a learner builds something before knowing what it is called.
Sometimes “28” is the answer.
Sometimes a bug looks beautiful enough to keep.
And sometimes the best place to stop a class is right in the middle of a mystery.
What Is Possible?
How much mathematical and programming structure can a beginner hold after only three days?
How Does It Happen?
By building one small idea on top of another—and by trying things before knowing exactly what will happen.
Why Does It Matter?
Because the goal isn't merely to teach a student the name of an object.
Sometimes it is better to let the object appear first.
The word icosahedron can wait.