This book provides a gentle, software engineering oriented introduction to category theory. Assuming only a minimum of mathematical preparation, this book explores the use of categorical constructions from the point of view of the methods and techniques that have been proposed for the engineering of complex software systems: object-oriented development, software architectures, logical and algebraic specification techniques, models of concurrency, inter alia. After two parts in which basic and more advanced categorical concepts and techniques are introduced, the book illustrates their application to the semantics of CommUnity – a language for the architectural design of interactive systems.
In the past ten years, several books have been published on category theory either by computer scientists or having computer scientists as a target audience (e.g. [6, 12, 22, 89, 105], to which a precious collection of little gems  and the chapter cum book  should be added). Isn't the working computer scientist spoilt with choice?
Although each of the above mentioned books presents an approach of its own, there is one aspect in common in their view of computer science: the analogy between arrows (morphisms) and (classes of) computations. This "type-theoretic" or "functional" approach corresponds to a view of computer science as a science of computation, i.e. a discipline concerned with the study of computational phenomena where the focus is on the nature and organisation of computations.