Como a maioria dos altos altos nesse campo, tenho prestado muita atenção ao papel que os sistemas generativos de IA podem desempenhar no desenvolvimento de software program. Eu acho que a aparência do LLMS mudará o desenvolvimento de software program em um grau semelhante à mudança do assembler para as primeiras linguagens de programação de alto nível. O desenvolvimento adicional de idiomas e estruturas aumentou nosso nível de abstração e produtividade, mas não teve esse tipo de impacto no natureza de programação. Os LLMs estão causando esse grau de impacto, mas com a distinção de que não está apenas aumentando o nível de abstração, mas também nos forçando a considerar o que significa programar com ferramentas não determinísticas.
As linguagens de alto nível (HLLs) introduziram um nível radicalmente novo de abstração. Com o Assembler, estou pensando no conjunto de instruções de uma máquina específica. Eu tenho que descobrir como fazer ações simples, movendo os dados para os registros certos para invocar essas ações específicas. O HLLS significava que agora eu poderia pensar em termos de sequências de declarações, condicionais para escolher entre alternativas e iteração para aplicar repetidamente declarações às coleções de valores de dados. Posso introduzir nomes em muitos aspectos do meu código, deixando claro quais valores deveriam representar. As primeiras línguas certamente tiveram suas limitações. Minha primeira programação profissional foi no Fortran IV, onde as declarações “se” não tinham uma cláusula “else”, e eu tive que lembrar de nomear minhas variáveis inteiras para que elas começaram com as letras “eu” através de “n”.
Relaxar essas restrições e obter a estrutura do bloco (“posso ter mais de uma afirmação após o meu IF”) facilitou minha programação (e mais divertida), mas é o mesmo tipo de coisa. Agora, eu quase nunca escrevo loops, instintivamente aprova funções como dados – mas ainda estou conversando com a máquina de maneira semelhante do que fiz todos os dias atrás no Dorset Moors com a FORTRAN. Ruby é uma linguagem muito mais sofisticada do que a Fortran, mas tem o mesmo ambiente, de uma maneira que as instruções da máquina Fortran e PDP-11 não.
Até agora, não tive a oportunidade de fazer mais do que brincar com as melhores ferramentas de Gen-AI, mas sou fascinado enquanto ouço amigos e colegas compartilhar suas experiências. Estou convencido de que essa é outra mudança basic: conversar com a máquina em prompts é tão diferente de Ruby quanto Fortran para o assembler. Mas isso é mais do que um grande salto na abstração. Quando escrevi uma função fortran, eu poderia compilá -la cem vezes, e o resultado ainda manifestou exatamente os mesmos bugs. Os grandes modelos de linguagem introduzem uma abstração não determinística, por isso não posso simplesmente armazenar meus avisos no Git e saber que vou obter o mesmo comportamento a cada vez. Como meu colega birgitta colocounão estamos apenas nos movendo acima os níveis de abstração, estamos nos movendo lateral em não determinismo ao mesmo tempo.

Ilustração: Birgitta Böckeler
À medida que aprendemos a usar o LLMS em nosso trabalho, precisamos descobrir como viver com esse não determinismo. Essa mudança é dramática e me excita. Tenho certeza de que ficarei triste com algumas coisas que perderemos, mas também haverá coisas que ganharemos que poucos de nós entendemos ainda. Essa evolução no não determinismo é sem precedentes na história de nossa profissão.