PRINCIPLE: Encourage research at and across disciplinary boundaries, well informed by specifics and well structured to handle scale, data, integration, architecture, simulation, optimization, iteration, and human and systems aspects. CS research in sustainability should be an interdisciplinary effort, with experts in the various fields of sustainability being equal partners in the research.
Although the committee emphasizes that a premature focus on universality would be detrimental to the kind of high-impact sustainability solutions so desperately needed, universality should not be ignored. Indeed, domain-specific research can lead toward universality. A challenge, though, is how to pursue the universality that contributes so much to the power of computer science. In this section, it is argued that the purposes of domain specificity and contextualization are not at odds with ultimately producing universality in results, and that universality is not achieved directly in most cases in any event. Consider the development of important advances in CS and IT. Achieving universality typically involves developing well-structured innovative solutions, applying them to the problem at hand, evaluating their efficacy, and using this evaluation to guide further improvement, enhancement, and new directions. Successful approaches are then refined and applied in other areas, perhaps similar to the original problem domain, perhaps more remote. As the iterations of application proceed, the universality of the approach is discovered and refined.
Why has this approach worked so well in computer science? Despite the fact that computer science has information at its heart, tools and methods are ultimately instantiated in software. Software is malleable and well disposed to iteration. Software technology is developed, deployed, used, and modified in continuous iterative cycles. Developing modern software is not done through implementing a perfect software system once, at the start. Instead, the state of the art in software engineering urges iteration and architectural flexibility. Software is designed to be updated on a frequent basis over its entire life cycle.
This approach to the creation of software systems has developed for many reasons. For one reason, the work required to discover all or even most of the bugs before release in non-critical systems far exceeds the value of that approach. Similarly, feature sets are expanded through use. The range and number of possible features of any particular target system are larger than what is implemented—if that were not the case, the systems would be even more complex and difficult to use and would take even longer to roll out. Thus systems are rolled out with a modest feature set,