Foundations of Program Design