Examples of goal driven programming
Is 3D animation with inverse kinematics a valid example of goal driven programming?
I'm interested in computer based tools that allow humans to create complex systems using natural user interfaces. I'm learning about computing tools from the past and present. I want to get the general landscape, and to understand what the capabilities and limitations of the available tools are. One way to do that is to find the right people and learn from them.
Alan Kay is a computer researcher and a member of a remarkable group who pioneered graphical user interfaces at Xerox PARC. Alan Kay claims that the current state of computer programming is sad. He says that we ignored and forgot important insights laid out by brilliant early inventors.
I'll give an example of such an early invention, then I'll present a modern tool, and I'll ask if the modern tool correctly represents the intent of the pioneer.
In 1962, Ivan Sutherland created a revolutionary computer program called Sketchpad:
Alan Kay frequently shows Sketchpad in his hypnotic talks. He defines Sketchpad as the first “non-procedural programming system”. That means the user tells the computer what he wants (aka. goals), instead of telling the computer how to do what he wants (aka. procedures). The audience is usually amazed by how advanced the system from 1962 is, and why such capabilities aren't common to all modern graphics software.
Bret Victor, a human-computer interface designer who helped resurfacing some of these groundbreaking solutions, defined Sketchpad as an example of “goal driven programming”.
2. Inverse kinematics
In modern 3D computer animation, there is a fascinating technique used for character animation called inverse kinematics:
Consider the 3D skeleton in the video. Each joint of the skeleton is constrained to move and rotate in some directions only. The animator can then move and rotate specific control points like the wrist or the hip. In the video above, only the hip is moved and rotated. The rest of the skeleton follows along according to the given constraints. The result is a natural looking motion that doesn't require to manually position every single joint.
Here's the Wikipedia definition of inverse kinematics:
“An animated figure is modeled with a skeleton of rigid segments connected with joints, called a kinematic chain. The kinematics equations of the figure define the relationship between the joint angles of the figure and its pose or configuration. Inverse kinematics compute the joint angles for a desired pose of the figure.”
In short, inverse kinematics is a solver that runs behind the scenes to satisfy in real-time the intent of the animator.
Can we consider 3D animation with inverse kinematics as an example of goal driven programming?
- Ivan Sutherland. Sketchpad, A Man-Machine Graphical Communication System (PDF), 1963. Sutherland's PhD thesis is exquisite. It still feels as visionary as ever. Highly recommended!
- Alan Kay. How to Invent the Future II (YouTube), 2017. Every talk by Alan Kay is basically a rant on how bad things turned out for modern computing. Highly recommended!
- Bret Victor. The Future of Programming (Vimeo), 2013. Bret Victor sets up his presentation in 1973, down to the white shirt and tie. He uses that theatrical trick to provoke the audience about how things in the 1973's future didn't go as well as they should have gone. Additional notes from the talk can be found at worrydream.com/dbx/
- Wikipedia. Inverse kinematics.
- Maxon. Cinema 4D, a professional 3D software package.