Software
O software de computador, ou simplesmente software, é um conjunto de instruções legíveis por máquina que orienta o processador de um computador para a realização de operações específicas. O software de computador contrasta com o hardware de computador, que é a componente física dos computadores. O hardware e o software de computador requerem um ao outro e nenhum pode ser utilizado de forma realista sem o outro. Utilizando uma analogia musical, o hardware é como um instrumento musical e o software é como as notas tocadas nesse instrumento. O software de computador inclui programas de computador, bibliotecas e a respectiva documentação. A palavra software é também por vezes utilizada num sentido mais restrito, significando apenas software de aplicação. O software é armazenado na memória do computador e é intangível, ou seja, não pode ser tocado. Ao nível mais baixo, o código executável consiste em instruções em linguagem de máquina específicas para um processador individual - normalmente uma unidade central de processamento (CPU). Uma linguagem de máquina consiste em grupos de valores binários que significam instruções do processador que alteram o estado do computador em relação ao seu estado anterior. Por exemplo, uma instrução pode alterar o valor armazenado num determinado local de armazenamento dentro do computador - um efeito que não é diretamente observável pelo utilizador. Uma instrução pode também (indiretamente) fazer com que algo apareça num ecrã do sistema informático - uma alteração de estado que deve ser visível para o utilizador. O processador executa as instruções pela ordem em que são fornecidas, a menos que seja instruído a "saltar" para uma instrução diferente, ou seja interrompido. O software escrito numa linguagem de máquina é conhecido como "código de máquina". No entanto, na prática, o software é normalmente escrito em linguagens de programação de alto nível, que são mais fáceis e mais eficientes de utilizar pelos seres humanos (mais próximas da linguagem natural) do que a linguagem de máquina. As linguagens de alto nível são traduzidas, utilizando a compilação ou a interpretação ou uma combinação das duas, para linguagem de máquina. O software também pode ser escrito numa linguagem de montagem de baixo nível, essencialmente, uma representação vagamente mnemónica de uma linguagem de máquina utilizando um alfabeto de linguagem natural. A linguagem de montagem é traduzida em código de máquina utilizando um assembler.
