It's all very well in practice, but it will never work in theory.
Current research interests:
- The use of theory in empirical software engineering, hereunder:
theories explaining the cause-effect construct in software engineering phenomena, the need for special software enginering theories contra the view that software engineering is an application domain for psychological and sociological theories, when is theory useful, epistemological issues in the face of software engineering; what are theories actually explaining, and how do they relate to 'reality', theories as pragmatic devises for organising thought, practitioners' theories and mental model elicitation.
- Artificiality in empirical software engineering, hereunder: how is (or should) the artificiality in experiment design be related to the use of theory on the one hand, and the software industry on the other, generalisation to theory or external validity, experiments can serve many purposes from theory testing to investigating empirical regularities - what is the status in emprirical software engineering,
- Expert vs. novice and training vs. experience issues: the role of skill and expertise in ill-structured tasks such as software effort estimation, experiment design for skill-sensitive methods and tasks.
- Technological theories in software engineering: The use of formal principles as auxiliary theories in software engineering, in much the same way that formal models are used in social sciences.
- Stepwise refinement: augmenting and tailoring proof systems to cope better with the needs of stepwise specification- and data refinement. In the context of the second-order lambda calculus, this currently means developing an alternative notion of Reynolds' relational parametricity that observes abstraction barriers in universal types. The emphasis is on higher-order functionality.
- Type theory, the polymorphic lambda-calculus and logic.
Research outlook:My research concerns building scientific theories and models that explain and predict human and technological phenomena specific to software development practice. The goal in this sort of research is to develop a useful understanding of the underlying mechanisms of these phenomena so that one may, in turn, have the means to improve software engineering practices. Main foci in my particular research are effort estimation accuracy, software development team collaboration, and programming skill. Scientific knowledge is often abstract and general. A central challenge is to determine the appropriate level of explanation that is useful to software engineering. At the same time, this level of explanation should allow the definition of theoretical frameworks, in which one may consolidate existing and future research.
As researchers, we develop an understanding of relevant phenomena based on our scientific methods. However, software practitioners also develop an understanding of, perhaps, even more relevant but also more specific, phenomena based on their experience and practice. The implicit informal understanding that practitioners hold in order to make decisions and to act in actual software development situations is important input to scientific theories. In addition to the scientific observation of software development practice undertaken by traditional analytical and empirical research, it is, therefore, also essential to elicit the tacit understanding (the mental models) of software engineering practitioners. My work attempts to consolidate practitioner's theories into scientific theories, and also involves finding appropriate research methods for addressing the more immediate demands of the software industry.
Although software engineering is multidisciplinary, its special technological challenges is what sets software engineering apart from other development and production disciplines. Software development methods are built intentionally to resolve specific challenges in software development, and such intentions are made particularly explicit in development methods that seek to automate parts of software practice. Hence, my work also involves incorporating formal principles into theories for software engineering, and to see whether the intentions underlying such principles are, in fact, appropriate.