Como o código, na era da Inteligência Artificial, se torna de escrita única e descartável
A inteligência artificial (IA) torna todo o código de leitura-somente, argumentou Phillip Mortimer na sua palestra «Complexidade e Criatividade na Engenharia de Software» na QCon Londres. É demasiado denso para ser lido, e os testes definem o comportamento e tornam-se a documentação. O código também é descartável; torna-se mais fácil reescrevê-lo do que depurá-lo. Os seres humanos não conseguem rever código gerado por IA em grande escala. Mortimer sugeriu automatizar as revisões e permitir que os agentes reparem o software de forma autónoma através da observabilidade. A intenção dissocia-se da implementação; os programadores devem concentrar-se na criatividade.
Na era da IA, todo o código é de «somente gravação», argumentou Mortimer. Citou Eric S. Raymond:
Código de escrita única é código tão obscuro, complexo ou mal estruturado que não pode ser modificado nem sequer compreendido por ninguém além do seu autor, e possivelmente nem mesmo por ele próprio.
Certas linguagens são de escrita única por definição, trocando a legibilidade por um poder e desempenho incríveis, afirmou Mortimer. Mencionou a APL e as expressões regulares. Estas linguagens representam um tipo de complexidade que advém de uma densidade extrema.
Um princípio para lidar com esse tipo de código é que os testes definem o comportamento:
Quando escreves código demasiado denso para ser lido, a única forma de compreender o que ele faz é através de casos de teste exaustivos. Os testes tornam-se a documentação do teu código.
Lê-se os pares de entrada-saída, que indicam o que o código deve fazer, porque não é possível percebê-lo facilmente a partir do próprio código, afirmou Mortimer.
Outro princípio mencionado por Mortimer foi que o código é descartável. O código «somente de escrita» é muito difícil de depurar. Muitas vezes, é mais fácil reescrever o código do zero do que modificar o que já foi escrito. Mantém-se os testes, deita-se fora o código e reescreve-se, afirmou ele.
Os humanos não conseguem rever o código gerado devido ao seu volume enorme, argumentou Mortimer:
Não faz sentido que os seres humanos tentem rever código gerado por IA linha a linha, porque rapidamente se tornam o estrangulamento.
Mortimer sugeriu escrever testes realmente detalhados e automatizar as revisões de código. Sugeriu também que o software se deva corrigir a si próprio:
Uma medida poderosa é ter um agente de codificação de IA a monitorizar a sua plataforma de observabilidade, a agregar alertas ao longo de um determinado intervalo de tempo e a começar a criar pull requests para corrigir os problemas que detectou, começando pelos mais comuns.
Devemos dissociar a intenção da implementação. A IA utiliza linguagem natural, tornando os programadores versáteis entre diferentes linguagens de programação, afirmou Mortimer.
O papel do programador de software hoje em dia é a criatividade, argumentou Mortimer:
A criatividade é iterativa. É uma melhoria passo a passo ao longo de longos períodos de tempo. Qualquer pessoa pode criar. Basta começar a trabalhar.
Devemos adotar um princípio de «apenas escrita», argumentou Mortimer. A IA resolveu o problema da implementação; a única coisa que resta é a criatividade.
Os programadores gostam de escrever software. É um trabalho desafiante e mentalmente estimulante. O que eu realmente gosto de fazer é resolver problemas e construir, afirmou Mortimer. E nunca houve melhor altura para construir com software do que hoje. A intenção e a implementação estão agora completamente separadas. Somos todos programadores full-stack; tudo o que é preciso é uma ideia criativa, concluiu ele.
A InfoQ entrevistou Phillip Mortimer após a sua palestra.
InfoQ: Como podemos automatizar as revisões de código?
Phillip Mortimer: Isto é relativamente simples — um conjunto de ferramentas de codificação pode ser invocado como uma ação de CI, com uma funcionalidade que incorpora o que um programador sénior procuraria ao rever o código. O agente de revisão de código pode publicar comentários, solicitar alterações ou até aprovar um PR.
Pode pensar-se que ter um modelo a rever o seu próprio resultado seria ineficaz — mas já vi muitos exemplos deste processo a fornecer comentários de revisão realmente valiosos, detetando bugs antes de serem implementados. Um prompt diferente, um conjunto diferente de instruções, um contexto diferente parecem ser suficientes para obter uma revisão significativa. Na verdade, este processo de revisão adversarial está a tornar-se uma técnica comum em sistemas baseados em agentes de forma mais ampla, não apenas na revisão de código.
Os agentes de revisão de código também podem ser configurados para serem executados fora do ciclo das pull requests, o que pode não detetar problemas estruturais dentro de uma alteração atómica numa única pull request. Os agentes «De-slopify» podem ser executados regularmente na sua base de código, à procura de código repetido, testes sem parâmetros, sinalizadores de funcionalidades não utilizados ou itens semelhantes de baixo esforço e baixo risco para corrigir.
InfoQ: O que podem as organizações fazer para fomentar a criatividade?
Mortimer: As pessoas criativas precisam de tempo e espaço para trabalhar, livres das exigências do dia-a-dia, como reuniões, entregas e demonstrações. Além disso, muitas vezes trabalham melhor sozinhas — o brainstorming, uma técnica muito apreciada no mundo empresarial, revelou-se, na verdade, menos eficaz na geração de boas ideias do que o trabalho individual. Gosto de tentar agendar grupos de reuniões em conjunto, no início ou no final do dia, permitindo longos períodos de concentração, durante os quais posso trabalhar sem interrupções em problemas complexos.
As restrições também são importantes no trabalho criativo. As restrições eliminam as possibilidades infinitas de uma tela em branco e obrigam à exploração de um espaço delimitado. Anteriormente, trabalhei numa startup de inteligência documental chamada Accelex. Nos primeiros tempos, estávamos limitados pelo tempo e pelos recursos, o que me obrigou a encontrar soluções inovadoras para o problema da leitura de dados a partir de tabelas.
A criatividade é um trabalho iterativo, que se acumula ao longo de longos períodos de tempo, e não um único lampejo de génio. Ter tempo e espaço para pensar criativamente é agora mais importante do que nunca, uma vez que a pressão pela engenharia de hiperrapidez deixa cada vez menos tempo para fazer uma pausa, refletir e dedicar-se ao pensamento criativo.