Programming is one of the few practices where, in addition to using tools to accomplish an end, individuals can also use tools to create more tools. Through re-usable functions, libraries, and development frameworks, developers are able to simplify both present and future development, reducing unnecessary overhead and streamlining maintenance and updates.
While programming languages enable writing code that brings computers and browsers to life, most system development projects require significant repetitive code and definitions that neither enrich the lives of the developers nor users. Meta-languages or frameworks help to reduce that code overhead by creating structures or interim languages that translate minimal specifications into the final product.
The key to an effective meta-language is balancing minimalism and expression. Minimalism is best espoused by the saying made famous by Antoine de Saint-Exupery, author of The Little Prince: “Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.” The minimal language by itself is not the goal, however, since the absolute minimum needed to define an application is simply one word: “It.”
An effective meta-language will balance minimalism with the ability to use the same language for multiple areas of the project, as well as the flexibility to easily make changes in the future. The goal is not to create a minimal grammar, but rather to reduce the total amount of development time needed to create and maintain the target application over the full software lifecycle.
The question remains – which elements are unnecessary for inclusion in the meta-language, and what can be automatically generated by the computer? This is generally answered by the user and architectural requirements. As long as the meta-language can create a final software product that will satisfy both the user and architectural requirements of the system, it will be a success. If that set of user requirements and architectural documents can be given to a developer with no prior knowledge about the project, and if the final application created would satisfy the needs and expectations of key stakeholders, then the meta-language has been defined.
Transforming the architectural documents into the language, however, is rarely completely cut and dry. In most projects, a succinct and well-formed meta-language will likely be able to satisfy 70% to 90% of development tasks. Still, that increase in development efficiency will often justify the increased overhead required to develop unique tools for the project, and provide for easier maintenance and more flexibility down the road.
Written by Andrew Palczewski
About the Author
Andrew Palczewski is CEO of apHarmony, a Chicago software development company. He holds a Master's degree in Computer Engineering from the University of Illinois at Urbana-Champaign and has over ten years' experience in managing development of software projects.
Google+