Describir: Unifying Theories of Programming