Os computadores mais simples são capazes de executar qualquer um de um punhado de instruções diferentes; os computadores mais complexos têm várias centenas para escolher, cada uma com um código numérico único. Como a memória do computador é capaz de armazenar os números, ele também pode armazenar os códigos de instrução. Isto leva ao facto importante que os programas inteiras (que são apenas listas de estas instruções) pode ser representada como listas de números e si pode ser manipulado no interior do computador, do mesmo modo como dados numéricos.
O conceito fundamental de armazenar programas na memória do computador ao lado do dado com que operam é o cerne da von Neumann, ou programa armazenado, arquitetura. Em alguns casos, um computador pode armazenar parte ou a totalidade do seu programa na memória que é mantido separado a partir dos dados que opera. Isso é chamado de arquitetura de Harvard depois que o computador Harvard Mark I.
Computadores von Neumann modernos mostrar alguns traços da Harvard Embora seja possível escrever programas de computador como uma longa lista de números (linguagem de máquina) e enquanto esta técnica foi utilizada com muitos computadores antigos, [37] é extremamente tedioso e potencialmente sujeito a erros a fazê-lo na prática, especialmente para programas complicados. Em vez disso, cada instrução básica pode ser dada um nome curto que é indicativo de sua função e fácil de lembrar-um mnemônico como ADD, SUB, MULT ou saltar.
Estes mnemônicos são conhecidas coletivamente como linguagem de montagem de um computador. Conversão de programas escritos em linguagem assembly em algo que o computador pode realmente entender (linguagem de máquina) é geralmente feito por um programa de computador chamado de assembler. As linguagens de máquina e as línguas de montagem que os representam (coletivamente denominados linguagens de programação de baixo nível) tendem a ser exclusivo para um determinado tipo de computador. Por exemplo, um computador arquitetur