Reflections on reflection
Though it usually makes its appearance only as a footnote in the broader discourse of object design, reflection is a recurring and sometimes noisily divisive topic in object-orientation. Glimmers of reflection pervade even the darkest corners of the tapestry of object orientation’s history. In fact, the broader notion of code’s self-knowledge, such as run-time method dispatch, goes to the heart of what differentiates objects from other paradigms.
Object orientation, at its roots, was about people and human mental models. It is impossible to make serious headway in these models without reasoning about the system outside of its simple imperative expression. By analogy, the silent movie era of film held that by removing speech, the media of film could both appeal to broader audiences and to tap into the broader human universals that speech obfuscates.
Programs are the silent films that connect much of humanity today. The silent experience plays out at the screen; the Internet is the deep hardware on which it runs, and our software illuminates and articulates the connections between them. To make software fulfil any social agenda of human problem-solving requires a link between the reflections of the individual and those of the software; to rise to social phenomena requires a computational model that accommodates reflection at the social and societal layers.
The DCI (Data, Context, and Interaction) paradigm provides a world model whose reflection allows program structure to shift with the dynamics in the context of application while featuring new ways to clearly present program structure to faithfully capture end-user mental models of uses cases and data. DCI and other recent post-modern approaches offer breakthroughs that raise reflection to its proper place as a first-class programming concern.