Parsimony Principles for Software Components and Metalanguages
Todd L. Veldhuizen

TL;DR
This paper applies information theory to analyze the design tradeoffs of software components and metalanguages, focusing on efficiency, reuse, and abstraction complexity to improve software communication and development.
Contribution
It introduces an information-theoretic framework for evaluating component generality and the role of metalanguages in software design, extending previous reuse analyses.
Findings
Best components are those with the most succinct use-case representations.
Metalanguages can both facilitate and hinder efficient software description.
A complex interaction exists between abstraction power, reuse, and cognitive difficulty.
Abstract
Software is a communication system. The usual topic of communication is program behavior, as encoded by programs. Domain-specific libraries are codebooks, domain-specific languages are coding schemes, and so forth. To turn metaphor into method, we adapt toolsfrom information theory--the study of efficient communication--to probe the efficiency with which languages and libraries let us communicate programs. In previous work we developed an information-theoretic analysis of software reuse in problem domains. This new paper uses information theory to analyze tradeoffs in the design of components, generators, and metalanguages. We seek answers to two questions: (1) How can we judge whether a component is over- or under-generalized? Drawing on minimum description length principles, we propose that the best component yields the most succinct representation of the use cases. (2) If we view a…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
Taxonomy
TopicsModel-Driven Software Engineering Techniques · Software Engineering Research · Logic, programming, and type systems
