Do experienced programmers achieve the ability to code instinctively or achieve a visceral understanding of a path to follow when deciding how to solve a problem? Certainly the ability to program does not rely on muscle memory other than typing or clicking a mouse, but I believe there are reflexes that are developed over time that aid with the ability to create an algorithm.
Learning to program is similar in some ways to learning a new language. There is the need to adhere to a certain syntax that can vary from language to language. Languages also have different built in structures and functions can change how the language is used. Even if you are experienced in one language, gaining a familiarity with the strengths and idiosyncrasies of a new language takes some time. Building that comfort level is in a way developing a mental muscle memory that allows the programmer to focus on higher level problem solving. Beyond programming syntax, there’s the need for software architects that can determine the shape of the the entire project or platform, and an even more intuitive sense is needed.
There have been many examples of involving actual movement of the body in elucidating programming concepts. A troupe of folk dancers has used their abilities to act out sorting routines, such as the bubble sort:
Although this kinesthetic demonstration of the algorithm is not fundamental to the act of programming, it does help with understanding sometimes confusing steps in an algorithm. Other groups have shown how public key encryption works by acting it out and how to tackle network congestion by passing fruit around.
Empathy is not a term often associated with programming (with the exception of the excellent Games For Change), but there is an empathetic sense developed of what is occurring in a computer program for beginning coders. When discussing “programming” a turtle to move around a Robot Turtles game board in another course, we identified a computational thinking skill of placing yourself in the turtle’s place, as the orientation of the turtle would cause difficulties in figuring out which way to get it to turn. I tend to think of an agent moving through the code of a program line by line, testing conditions, branching as needed, personifying the execution of the program. In a multithreaded program, multiples agents will be at work, occasionally syncing with each other.
I’m not certain where an embodied understanding of algorithms will fit in the scheme of this project. It could simply be developing new ways for students to act out an algorithm. It could also be the visceral or emotional connection to the act or result of programming.