The basic goals of language design for user interfaces are
Higher level goals include
Constraints on a language include
The language should have the functionality to support the user's tasks. People will not use a system that lacks some decisive piece of functionality, or worse has it only in some obscure form. There is a notorious undocumented feature that allows Mac users to print to disk. If such a user needed to do this frequently they would not buy a Mac. Too much functionality is as bad as too little.
A unifying concept, model or metaphor is an aid to learning. However it is still necessary to structure the commands in some way. Here are some options.
COPY FROM=FILEA TO=FILEB
Consistent argument ordering makes learning and remembering much easier. Response should be consistent. In general similar responses should produce similar effects. Thus a consistent choice of key to press to accept a default value.
If you do abbreviate be consistent about how you do it. Thus in Unix the abbreviations cp, mv, rm, all work in a similar way but then cd and mkdir work differently. Strategies for Abbreviations:
To ease the burden on memory it is possible to offer help meus that show the abbreviations for the commands.
The main problem with NL Interfaces is knowing what the user knows. You can't just start with a ? prompt and expect anything sensible to happen. If the field is very restricted tthen it is possible to use NL. Database query is a possible application. NLI's that work usually do so because they train the user to pose the queries in ways that the machine can understand. Full. NL is a long way off. (But is more likely to work for text searching). Natural Language output is a reasonable possiblity, particularly for "cliched" situations.