Computer software is the collection of computer programs and related data that give the instructions to a computer. Different from hardware, software is intangible, which means that it cannot be touched. Some examples of computer software include: word processors, video games, operating systems, and device drivers. Historically, the software industry is much like that of other technological industries in that it has grown from a few prototypes from different engineers to one application that was put together. In software, this happened in the 1980s when IBM published specifications for the IBM personal computer.
Software includes all the different forms and functions that data performs in a computer. Therefore, it includes a wide variety of products that are developed using different techniques. There are many different types of software. System software includes device drivers, operating systems, servers, and utilities. The purpose of systems software is to relieve the applications programmer from the involved details of the computer being used. Specific examples of this include Microsoft Windows, Linux, and Mac OS X. Programming software includes compliers, debuggers, linkers, and text editors. They usually provide tools to help programmers write computer programs. Application software includes many different things, such as business software, video games, the Internet, educational and medical software, molecular modeling software, image editing, spreadsheets, and Word processing. It is used for many different reasons, but ultimately allows users to accomplish multiple tasks on a computer.
Software architecture is generally seen in three layers: platform, application, and user software. Platform software includes the firmware, device drivers, an operating system, and a graphical user interface; in total, these allow a user to interact with the computer and its peripherals fairly easily. Platform software often comes bundled with the computer, and the user is often able to change it. Application software is the most common part of software. Familiar examples include office suites and video games. Application software is often purchased separately from computer hardware. Sometimes applications are bundled with the computer, but that does not change the fact that they run as independent applications. Applications are usually independent programs from the operating system, though they are often tailored for specific platforms. Most users think of compilers, databases, and other “system software” as applications.
Given that software can be designed using many different programming languages and in many various operating systems and operating environments, a software standard is needed to allow different software to understand and exchange information between one other. Data movement is usually from one place in memory to another. Sometimes it involves moving data between registers, so that high-speed data access is available in the CPU. The cost of moving data can be costly, so pointers are used to off set the high costs.
The design and implementation of software differs depending on the intricacy of the software. For example, the design and creation of Microsoft Word software will take much more time than designing Microsoft Notepad because each one functions differently. Software is usually designed and created in integrated development environments, such as Eclipse and Microsoft Visual Studio, so the process can be simplified in order to compile the program. Fundamental computer programming concepts like array and binary tree can be useful when creating software. When a program is designed, it depends on the API. Without APIs, the programmer has to write them. Companies like Sun Microsystems and Novell provide their own APIs so that the many applications that are written using their software libraries will have numerous APIs in them. Software has special financial characteristics that make its design, creation, and distribution different from many other economic commodities. A person who creates software is called a programmer, software engineer, or software developer.