Loosely defined, "computer software" just refers to any data (such as computer programs) that has been stored digitally and is separate from the physical devices of the computer itself. A few examples of modern software include:
o Application software such as word processors, Excel or Quicken, meant to perform specific productive tasks for the user. Application software is a broad term that might include things as diverse as databases, industrial automation, telecommunications, spreadsheets, image editing or molecular modeling.
o Programming software, a set of tools used in actually putting together computer programs. Programming software might include compilers, text editors, interpreters, linkers and debuggers, or they may all be included as a suite in an Integrated Development Environment.
o Firmware, meant to be used with memory devices or other hardware-specific uses. Firmware is what's found in video games, or the logic systems of cars, televisions, DVD players and other consumer electronics
o Middleware, which coordinates and controls distributed systems
o System software such as operating systems, drivers and utilities, which governs a wide range of resources and is the user's interface with the machine itself
o Platform software, which entails the firmware, device drivers, operating system and a graphical user interface. The entire platform is what enables the user to interact with the computer, and typically comes bundled with the computer itself.
o User-written software, which is tailored to the user's needs. Examples of user-written software might include spreadsheet templates, word processors or email filters. Users create this software themselves, often without even realizing it.
o Software testing, used to run trials on a software product, debug and troubleshoot it before it's declared fit to be marketed to users
o Testware, such as utilities used in conjunction with a software package
o Video games
o Websites, and website-development tools such as HTML, PHP, Perl, JSP, ASP.NET and XML
At bottom, software is executable code of machine language instructions that are specific to an individual computer's processor. The processor instructions are a group of binary values (0's and 1's) that signify changes in the computer from its previous state. Programs, then, are sequences of instructions that change the state of the computer in sequence to accomplish a certain task. Programs are now written in high-level programming languages that are easier and more streamlined – closer to human language than machine language. Software is also sometimes written in assembly language, a version of machine language using a natural language alphabet. An assembler then compiles assembly language into object code.
Design, implementation and rollout of software can vary greatly depending on the complexity of the software and its end uses. Think of the difference between Microsoft Word and Microsoft Notepad and the respective features and uses of each one. Regardless, the field of software development continues to become more specialized and involved, while also becoming simpler and more streamlined. Recent years have seen non-profits like the GNU Project, Mozilla Foundation and Free Software Foundation spring up, as well as the advent of open-source software that leaves users suddenly much more free to come up with their own custom software.