Sempre achei que um dos melhores cases para a Inteligência Artificial fosse o ambiente de desenvolvimento de programas de computador. Desenvolvedores experientes vão reconhecer rapidamente a quantidade de ações repetitivas que são executadas durante o longo processo de desenvolvimento de um software: busca por soluções semelhantes em fóruns, consulta das melhores práticas para conduzir o processo de desenvolvimento, a busca contínua de documentação sobre soluções adotadas, o tratamento escolhido para as regras de negócio em comum, o uso intenso de templates e bibliotecas para resolver problemas recorrentes, etc. Qualquer cenário que disponha de ações que possam ser automatizadas é um ótimo candidato à companhia de uma máquina para ajudar no processo.
Ultimamente, a inteligência artificial generativa descobriu a galinha dos ovos de ouro: programas são textos com regras mais rígidas, um "vocabulário" muito mais limitado e restringido e uma ordem lógica muito mais determinística. Se as LLMs nos surpreendem com a incrível capacidade de manejar a linguagem natural, seria mais que evidente a eficácia da aplicação dos modelos de IA generativa para gerar programas de determinada linguagem de programação. Só que as semelhanças terminam por aí : um programa não é uma redação, uma biblioteca não é um conjunto de livros e que, apesar da maior simplicidade, uma linguagem de programação não pode ser tratada como uma linguagem natural.
Essa diferença se evidenciou quando surgiu a primeira tentativa de aplicar os modelos de IA generativa no mundo do desenvolvimento e apareceu o que foi chamado de vibe coding. A inteligência artificial começou a gerar código alucinadamente, os modelos começaram a competir em quem gerava mais e com mais qualidade. Chegou-se a questionar a necessidade de saber programação para desenvolver aplicativos. A engenharia de software foi substituída pela engenharia de prompt, os desenvolvedores sêniores poderiam ser substituídos pelos novos programadores juniores infatigáveis, as LLMs. Só que na mesma velocidade começaram a aparecer os desafios deste novo paradigma tecnológico: a falta de determinismo, as alucinações dos modelos e o desafio da manutenibilidade. O dedo na ferida era perceber que um programa não pode ser visto como uma conversa, um diálogo casual e precisava de algo que não estava sendo fornecido até então: memória do contexto. Uma conversa casual não exige que você memorize muitas frases, mas no caso de um programa, cada palavra, cada vírgula, cada frase tem que ser considerada para cada artefato gerado.
Foi para resolver essa deficiência de falta de memória que a Google lançou uma metodologia que usa a LLM de uma forma otimizada para o desenvolvimento de software: context driven development. Seria como uma ferramenta para o gerenciamento do estado e da manutenção do escopo que o modelo de IA precisa para gerar código coerente, sem alucinar e que integre bem ao que já foi gerado anteriormente. Seria como um mapa para situar a LLM na infinidade de informações geradas e que precisam ser filtradas. Nesta visão, há sempre um contexto presente e que é estritamente necessário para resolver as tarefas do processo de desenvolvimento.
Enfim, este ensaio apresentou uma solução para uma realidade muito incipiente e que ainda é um lugar para muitas especulações. Há outra solução que tangencia esse mesmo problema e oferece uma solução diferente: specification driven development. Mas isso é assunto para outro ensaio........