Making Sense of Programming Algorithms Foundations