(For those who are not computerly inclined, here's a quick definition of basic terms. Way back in the dawn of digital time, computers were composed of hardware and software. Hardware is all the tangible, physical parts of a computer: the metal case, the printed circuit board and all the little components on it, even the wires that connect everything together. Even soft plastic parts are still tangible, so we still call them "hard" ware.
Software is all the intangible stuff that makes computers run -- the programs. They're not tangible or physical, so they can't really be called "hard" ware. But since they're as essential to the computer's functioning as the hardware, they had to be called something -- hence, "soft" ware.)
Today we consider all the synonyms for "software":
- software program
Even in the early days of home computers, people called them programs. One program fit on one floppy disk, and to use the computer, users ran the program.
As computing tasks got more complicated, programmers started including other things on the disk: data files, libraries, configuration files, and additional programs to be run automatically by the main program. Since users weren't just running a single program anymore, programs began to be marketed as software -- an interesting, and not at all inappropriate, reuse of the generic term.
I still crack up when I see a marketing department or a magazine writer refer to these things as software programs. It's a hilarious redundancy.
Some software is critical enough to the computer's operation that it's stored in a memory chip inside the computer. Because this software is stored in hardware, it's neither hard nor soft, so the pros call it firmware.
We've come a long way from the days of flipping switches. Today you can use one programming tool on one machine to write programs in many different programming languages, for many different systems. This has led programmers to start referring to the stuff they produce as code. There's source code, object code, assembly code, byte code, high-level code, low-level code, compiled code, interpreted code, Mac code, Linux code, Windows code, ... and it's all just programs and programming.
Somewhere along the way, software vendors began to combine separate programs into agglomerations that were (supposed to be) more powerful than the individual programs. These were referred to as suites. For a while, everyone was selling an office suite. Adobe has a lock on the best graphics suite in the world. Other companies sell animation suites, CAD suites, audio/video production suites, gaming suites, and in a beautiful recursion, software development suites.
Also somewhere along the way, someone said, "We're not selling programs, we're selling applications." After that, what was formerly known as something else became known as an application -- still just a collection of programs and related software items.
With the introduction of very smart handheld devices such as the iPhone, someone said, "Since these devices are small, the term for the software they run should also be small." So an application became an app, as in "There's an app for that."
Ah, but the term app got away from its creators. First it spread to non-iPhone handhelds, and then to non-handheld hardware, and finally to browsers. Now any software that runs on any kind of computing device is an "app".
But when you distill it down to its essential parts, it's still just a program.