Table of Contents
I stumbled across the phrases environmental dynamics and Constraint Lead Approach earlier this week in the context of teaching grappling and self defense skills via play. The idea seemed interesting and so after reading up on it I want to consider what it would mean to adapt the same philosophy to teaching non-motor skills like programming.
What is Environmental Dynamics / Constraints Lead Approach
CLA is a pedagogical philosophy that seems to exist almost entirely in the realm of athletic coaching. The essential idea is that rather than lecturing students about how they should move their body or observing their play and providing verbal feedback and instruction, a coach should engineer or constrain the "environment" of a player to encourage exploration and learning. In this article we're given the example of, instead of explaining to baseball players how to position their bodies, or where to hit the ball, put a wall in front of them that they must hit the ball over. The athletes body then enters an exploratory space in this newly constrained environment and automatically learns how to hit the ball so it clears the obstacle. In short: we need to de-emphasize procedural education and create opportunities for experiential learning.
What could we apply this to in coding education?
Many newcomers to the world of programming get studk in a local minima where, having overcome the initial frustration of learning to interact with a new computer system, will only engage with their limited knowledge area in order to achieve their goals. An example I see in many classes is students avoiding the effort of learning how to use loops in favor of repeating the same few instructions as many times as they need. As their teacher I can instruct them as to how loops work and even demonstrate their usefulness, but if the challenge I give them accepts any program that ends in the desired state most won't bother shifting their approach. But, what if I gave them a code budget that made over redundant solutions impossible?
Some possible constraints
- limited lines/characters/blocks
- limited nesting (you can only have 1 layer of ifs)
- remove a piece of syntax (solve this without using explicit conditionals)
- solutions must take less than x milliseconds
A wrench in the works
the CLA methodology assumes that being able to explore the solutionspace is automatic. In the world of sports you don't need to look up how to move your legs, you just move them, and adjust their movement withou conscious effort. Disciplines that have very little to do with motor skills usually don't have that same ability. For example if I don't know Rust and am told to make a hello world program I'm not very likely to guess my way to
fn main(){
println!("hello, world");
}
in anything close to an efficient timeline.
But, if I'm already fluent in Rust in terms of having a strong grasp of the syntax, keywords, and standard library, I can then learn how to apply that language in the most efficient manner.
At the moment this isn't a fully fleshed out thought but I think it could be interesting. Perhaps best paired with a web tool that lets an educator push puzzles and restrictions to students' IDEs to externalize the constraint and reduce verbal explanation time.