Defining a language formally, we can profit from the advantages offered by formal methods: unambiguity, preciseness, abstractness; but looking at formal semantics for existing languages they are quite often unstructured, bulky and therefore nearly incomprehensible. But understanding a language definition is the major prerequisite for using it and also extending or connecting the language with other languages and language concepts.

A theory of formal language engineering shall be motivated which should help to solve the problems encountered. Principles known from software engineering -- as e.g. modularity -- will be applied to formal theories to allow a language to be defined based on it's kernel (emphasising the elementary notions) and to be extended in a consistent way. Some notions and techniques for language semantics based on the categorical structure of monads allowing us to achieve the goal will be presented. The problems are investigated in the area of state-based and concurrent systems.