GenHelm is a platform that facilitates Model Driven Engineering (MDE). MDE is a development methodology that seeks to improve software project outcomes by embracing key concepts like leverage, abstraction, reuse and code generation. It provides a systematic way to manage complexity and increase productivity and quality in the software development process.
Let's review some of the characteristics of Model Driven Engineering.
Almost all software applications contain predicable patterns of components. Models are a means of defining these common components using a higher level of abstraction than a typical programming language. A model is a software module that has a deep understanding of a certain class of program. In MDE, systems are built by describing requirements to models, rather than writing code. The collection of inputs given to a model is known as a specification.
One of the main functions of a model is to generate code that implements the requirements outlined in its specification. It also validates the specification making sure that required relationships are respected, proper naming conventions are followed, and it applies any other checks that can be performed to circumvent errors in the generated code. In some cases, models are capable of generating a variety of implementation languages.
One of the key differences between a model and a simple code generator is that, in MDE, code is maintained at the specification level, not the code level. Code generators create code that is essentially a starting point that can be changed to satisfy detailed requirements. Models, on the other hand, are used continuously throughout the development and maintenance of a system. Maintenance is performed by changing the specifications and regenerating the code or, when necessary, enhancing the model to cater to new requirements.
Models in MDE are often hierarchical, allowing for the representation of complex systems through the aggregation of simpler models.
MDE involves the use of specialized tools that support the creation, manipulation, and transformation of models. In GenHelm, one of the supplied models is used to create and maintain all other models.
MDE supports an iterative and incremental development process where models can be refined and modified as the understanding of the target systems evolve.
One of the objectives of MDE is to minimize the amount of code that needs to be generated in an effort to simplify the model creation process and reduce the likelihood of a model generating incorrect code. To this end, models are normally accompanied by a framework of reusable components that can be leveraged by the model-generated code.
Code must be generated in a repeatable and predictable way. For this reason, AI-based code generation is not currently suitable for MDE since, by definition, there is a certain degree of randomness in what it generates. We see this in AI platforms like Chat GPT where answers to the same question can vary wildly each time and often AI-generated programs contain bugs. Imagine if Excel formulae could not be relied upon to produce the same results every time. This would render Excel virtually useless. That's not to say that AI cannot be used to help write code needed to help supplement or embellish generated code.
Ideally a MDE environment should cater to a wide range of requirements so that complex systems can be built without having to resort to hand coding. With GenHelm, 100% of most websites can be built within the GenHelm IDE. This is because many of the models are general purpose and can be leveraged for generating a wide variety of components.