A Practical Theory of Programming