programs that help users solve particular computing problems (ex. registration systems for students to register for classes)
programs that help users solve particular problems or needs
use of a program or abstract algorithm for an application different from the one for which it was originally written.