Some of the most interesting ideas in generative programming are converging. Charles Simonyis idea of Intentional programming now has it's own research company
research company. He is joined by the father of aspect oriented programming.
The connection is obvious - at least from what little I know - and I like the initiative since it ties in with some of my own thoughts on software pragmatics.
I am a little worried about the whole-sale approach implicit in intentional programming.
Simonyi talks of 'lifting' source code into the intentional world. If he is unwilling to lift it back down, then I think the initiative will fail - as long as it is not a significant platform initiative from a major vendor, like .NET is. (In many ways .NET is what Microsoft did instead of intentional programming).
I like program generation, and I like the idea of structure editing instead of text editing, but program generation has to abide by very strict rules previously discussed and text editing has two very important advantages over structure editing, namely
- It is based on natural langugage 'the bio-hardware' solution for communication of knowledge
- It allows the partial construction of incomplete ideas
The rules that must be followed by program generation to be successful have been previously discussed : The total analysis of software - from design to debugging to redesign to debugging once again - must be possible in the edited medium instead of some generated medium.
A very slow compiler is not efficient since you cannot reasonably rewrite the code and then re-debug, so you cannot analyze the edited medium (i.e. source code).
Similarly if the edited medium vanishes (e.g. a wizard dialog) and you need to reengineer you are lost with generated code.
Together the leveraging of natural language inherent in artificial languages, the ability to do and store incomplete ideas, and the continued acces to the ideas in the medium you expressed them in throughout the ENTIRE lifespan of the idea including design and reengineering are very important for a succesful pragmatic software solution.
What is required in addition to these features ?
Two things mainly: Automation of all that is not editing in the design medium and then one that is a little hard to explain other than as All the qualities of natural languages missing from artificial languages. I should like to point out that in this case the phrase 'natural language' means 'the complete set of utterances of human speakers' not some speficic language with a specific grammar.
The first is a matter of a good setup. Consumate pros have complete automation of tasks once the tasks leave the design medium. Continuous integration is the standard buzz-word for this and it is available to you in most environments if you are serious about it.
The second is where intentional programming makes it's move, but also where it is at least partially ill-conceived IMO. What do natural languages have that artificial languages don't have:
- Natural language has not one but many grammars: People insert phrases from other languages, add new meanings are inflections to existing words, etc.
- Natural language does not distinguish clearly between grammatical and non-grammatical sentences. Incomplete expression can still make sense.
- Natural language is defined by whomever is using it. It's anybodys game to extend the language with new expression
- The semantics of natural languages never ends: What this means that depending on the 'mode' of the recipient a statement in a natural language carries any of a long range of meanings and this process has no ending.
As an example - natural languages have access to a host of 'topicalization mechanisms' i.e. ways to be make statements be about something specific, the pronouns and the inflection of nouns being the atomic mecahnisms.
No artificial language matches this
- Natural language never ends: The system is 'complete' since any statement is a statement in natural language by definition
- A corollary to this: There is no 'meta' language. Just more utterances, this time about somthing 'meta'-like.
An alternative phrasing would be natural language is open by default - anything goes of the person you are communicating with 'get's it' - insertion of other languages, incomplete expression, new words.
The perfect system will be as open as natural language. Personally I think the best way to define something as open as natural language is simply to use natural language as the model.
Intentional programming adresses a lot of these points: The failure of any particular artificial grammar to catch it all, the need to view all utturances about a particular piece of software as part of the software. If it fails in the most important one, namely the requirement to be 'open by default' it will matter a lot less.
Anything goes is the most important quality of natural language.