No início, computadores precisavam ser reconfigurados com cabos e chaves para mudar tarefas. Hoje, basta trocar um arquivo para transformar máquinas em editores, jogos ou modelos de linguagem como as LLMs.
Hoje, parece óbvio que um computador possa assumir diferentes funções apenas trocando um arquivo de software. Um mesmo equipamento vira editor de texto, videogame, servidor web ou simulador conforme o programa carregado. Mas essa capacidade nem sempre existiu: os primórdios da computação exigiam transformar fisicamente as máquinas para mudar seus programas.
O ENIAC, um dos primeiros computadores eletrônicos programáveis de uso geral, era operado por conexões de cabos e pelo posicionamento de chaves em painéis gigantescos. Para alterar o programa, era necessário literalmente reconfigurar a máquina — um trabalho exaustivo que podia consumir dias. Naquele cenário, o algoritmo não era apenas executado pelo hardware; estava materializado na topologia momentânea do próprio equipamento.
Antes mesmo dos primeiros computadores, uma grande ruptura conceitual havia ocorrido: em 1936, Alan Turing demonstrou que era possível conceber uma única máquina capaz de simular qualquer outra máquina computacional, desde que recebesse os dados e a descrição da máquina a ser simulada. Com isso, a função deixou de ser determinada pela construção física e passou a ser especificada por símbolos.
Nos anos 1940, essa intuição matemática virou engenharia com a consolidação da arquitetura de programa armazenado, frequentemente associada ao nome de von Neumann. A partir daí, instruções e dados passaram a conviver na mesma memória e o programa tornou-se dado — o embrião do software tal como o conhecemos.
Mesmo assim, conversar diretamente com a máquina permanecia difícil. Para facilitar, surgiram camadas de abstração: primeiro a linguagem de máquina, depois o assembly, que trocou números por nomes mais amigáveis. Em seguida vieram linguagens como FORTRAN e C, que permitiram pensar em variáveis, loops e funções em vez de manipular registradores e endereços físicos. Mais tarde, linguagens de nível ainda mais alto, bibliotecas e frameworks passaram a disparar milhares de instruções de máquina a partir de um comando simples como model.fit().
Essa escalada de abstração ampliou enormemente o que humanos conseguem construir e compreender. Cada camada ocultou detalhes das inferiores e ofereceu unidades conceituais maiores, reduzindo controle local em troca de maior poder de composição — uma troca que se provou vantajosa na maioria das aplicações.
Paralelamente, desenvolveu-se uma abordagem diferente inspirada no cérebro: o conexionismo. Desde as décadas de 1940 e 1950, pesquisadores exploraram sistemas formados por unidades simples conectadas, cujo comportamento global depende da força dessas conexões. O perceptron de Rosenblatt foi uma das primeiras manifestações desse caminho.
A primeira onda do conexionismo terminou com limitações evidentes no fim dos anos 1960, mas a ideia ressurgiu nos anos 1980 com métodos eficazes de treinamento de redes multicamadas por retropropagação. Décadas depois, a abundância de dados, o poder das GPUs e as redes profundas transformaram essa curiosidade acadêmica em uma infraestrutura industrial robusta, deslocando parte do foco do código simbólico para modelos treinados a partir de exemplos.
LEIA TAMBÉM
Receba as notícias no seu WhatsApp
Entre no nosso canal oficial e fique por dentro de tudo que acontece em Sergipe
Entrar no canal →

