programming language pragmatics michael scott