Plans in programming: definition, demonstration, and development