Programming has to work like this. Programmers must be able to read the vocabulary, follow the flow, and see the state. Programmers have to create by reacting and create by abstracting. Assume that these are requirements. Given these requirements, how do we redesign programming?
An interesting essay on the fundamental attributes of programming, programming languages, and programming environments that should make you think about how we teach and learn programming in the future.