Aceitarei sua pergunta literalmente e discutirei principalmente microprocessadores, não computadores em geral.
Todos os computadores possuem algum tipo de código de máquina. Uma instrução consiste em um código de operação e um ou mais operandos. Por exemplo, a instrução ADD para o Intel 4004 (o primeiro microprocessador) foi codificada como 1000RRRR, onde 1000 é o código de operação para ADD e RRRR representou um número de registro.
Os primeiros programas de computador foram escritos à mão, codificando manualmente os zeros e zeros para criar um programa em linguagem de máquina. Isso é programado no chip. Os primeiros microprocessadores usavam ROM (Read-Only Memory); este foi posteriormente substituído por EPROM (ROM programável apagável, que foi apagada pela luz UV); agora os programas geralmente são programados na EEPROM ( "Eletricamente ... - EPROM" , que pode ser apagada no chip) ou especificamente na memória Flash.
A maioria dos microprocessadores agora pode executar programas a partir da RAM (isso é praticamente o padrão para tudo, exceto microcontroladores), mas é preciso haver uma maneira de carregar o programa na RAM. Como Joby Taffey apontou em sua resposta, isso foi feito com os comutadores do Altair 8080, que era alimentado por um Intel 8080 (que seguia os 4004 e 8008). No seu PC, existe um pouco de ROM chamada BIOS que é usada para iniciar o computador e carregar o sistema operacional na RAM.
A linguagem de máquina torna-se entediante rapidamente, e por isso foram desenvolvidos programas assembler que pegam uma linguagem assembler mnemônica e a traduzem, geralmente uma linha de código de montagem por instrução, em código de máquina. Então, em vez de 10000001, escreveríamos ADD R1.
Mas o primeiro montador teve que ser escrito em código de máquina. Em seguida, ele poderia ser reescrito em seu próprio código assembler e a versão em linguagem de máquina usada para montá-lo pela primeira vez. Depois disso, o programa poderá se montar. Isso é chamado de inicialização e também é feito com os compiladores - eles geralmente são escritos primeiro em assembler (ou outra linguagem de alto nível) e depois reescritos em seu próprio idioma e compilados com o compilador original até que o compilador possa se compilar.
Como o primeiro microprocessador foi desenvolvido muito tempo após a instalação de mainframes e minicomputadores, e o 4004 não era realmente adequado para executar um assembler, a Intel provavelmente escreveu um assembler que rodava em um de seus grandes computadores e traduziu o código de montagem para o 4004 em uma imagem binária que pode ser programada nas ROMs. Mais uma vez, essa é uma técnica comum usada para portar compiladores para uma nova plataforma (chamada de compilação cruzada ).