Concepts, Techniques and Models of Computer Programming