1. A method for users to give commands directly in computer software to be used in computers and other programmable devices to render them easier to use, the method comprising: receiving a command in text form from a user input interface; searching first for matches the command words and phrases in the command database, which contains command words and phrases in the software as well as synonyms and synonymous phrases to the command words and phrases; determining if a match for the command is found and the matched command is executed; if no match is found, then searching for matches the recorded previous user command inputs in the user command dictionary or database, if a match with previous user command inputs is found, for cases of only one previously executed command corresponding to the matched user command input, the previously executed command is executed, for cases of multiple previously executed commands corresponding to the matched user command input, the previously executed commands are presented with a dynamical user interface for the user to select and execute; wherein the dynamical user interface associates said matched commands with user interface elements through command names or command identifiers dynamically by passing the command name strings and command identifiers to the constructor of the dynamical user interface to replace the displaying names and the command identifiers of the user interface elements; if no match with previous user command inputs is found, finally searching for matches the synonyms and synonymous phrases in the command database, if one or more matches are found, the command or commands corresponding to the match or matches are presented with a dynamical user interface for the user to select and execute, the selection by the user is recorded in the user command database or dictionary; and if a match is still not found, a message stating that the input command cannot be found in the software is displayed to the user.