One of the grand challenges in programming language design is the intersection of hard (formal, computational) sciences with soft (cognitive, usability) sciences. While the formal language hierarchy provides a structured approach to evaluating the computational expressiveness of languages, the cognitive and usability aspects often remain under-explored. By abstracting away from specific programming languages to the introduced concept of Actualised Notation Spaces it is possible to construct a fitness function, integrating both hard and soft sciences, to guide the evolution of programming language design. This is the main contribution of the C3 Model, which can be used to explain aspects of current programming language design and guide directions for the design of future systems of languages.