software that performs some useful task such as word processing or playing a game for a user.
software that performs some useful task for a user such as typing a letter or playing a game
knowledge that is codified, documented, easily reproduced, and widely distributed