Computer software, or just software, is any set of machine-readable instructions that directs a computer's processor to perform specific operations. The term is used to contrast with computer hardware, the physical objects (processor and related devices) that carry out the instructions. Computer hardware and software require each other and neither can be realistically used without the other.
Software is a general term. It can refer to all computer instructions in general, or to any specific set of computer instructions. It is inclusive of both machine instructions (the binary code that the processor "understands") and source code (more human-understandable instructions that must be rendered into machine code by compilers or interpreters before being executed).
Computer software is a set of programs, procedures, functions, associated data and/or its documentation, if any. Program software performs the function of the program it implements, either by directly providing instructions to the digital electronics or by serving as an input to another piece of software. Software is also sometimes used in a more narrow sense, meaning application software only.
Computer software is so called to distinguish it from computer hardware, which encompasses the physical devices and interconnections required to store and run ("execute") the software. In contrast to hardware, executable software exists as data in the computer system and hence "cannot be touched", just as the 3D model shown in the illustration cannot be touched.[1] At the lowest level, executable code consists of machine language instructions specific to an individual processor. A machine language consists of groups of binary values signifying processor instructions that change the state of the computer from its preceding state. For example, an instruction may change the value stored in a particular storage location inside the computer (an effect that is not directly observable to the user), or (indirectly) cause something to appear on a display of the computer system (a state change which should be visible to the user). The processor carries out the instructions in the order they are provided, unless it is instructed to "jump" to a different instruction, or interrupted.
Software is usually written in high-level programming languages that are easier and more efficient for humans to use (closer to natural language) than machine language. High-level languages are compiled or interpreted into machine language object code. Software may also be written in an assembly language, essentially, a mnemonic representation of a machine language using a natural language alphabet. Assembly language must be assembled into object code via an assembler.