Inteligência Artificial
Categorias

Lado a lado com a Inteligência Artificial: qual é o impacto que isso pode causar na programação?

Até que ponto vai o talento de um programador? Se o bom profissional abandona o bloco de notas e adota um IDE com marcação de cor, que facilita seu processo, ele ainda é um bom programador? Se ele ativa a funcionalidade de autocompletar, para nunca mais se esquecer de fechar uma tag ou uma função, ele ainda é um bom programador? Se ele emprega algoritmos de Inteligência Artificial para sugerir blocos inteiros de código, ele ainda é um bom programador?

A resposta para todas essas perguntas é “sim”, mas cada inovação que surge no ambiente de desenvolvimento levanta questionamentos, polêmicas (em sua maioria desnecessárias) e novos desafios, enquanto a marcha da modernidade segue em frente, alheia a tudo isso. Não se trata mais de adotar ou não novos recursos, uma vez que tudo que surge para otimizar processos, melhorar a produtividade e reduzir custos sempre irá prevalecer, independente de resistências iniciais.

O novo patamar atingido está presente no GitHub CoPilot. A solução criada pela Microsoft, em parceria com o GitHub e a OpenAI, é uma ferramenta cujas intenções estão bem claras em seu nome: funcionar como um “copiloto” do desenvolvedor, indo muito além do tradicional autocompletar do passado e se tornando uma espécie de parceiro artificial para pair programming.

A tecnologia utilizada é o modelo de linguagem GPT-3, da OpenAI. Curiosamente, a intenção original de seus algoritmos era analisar e interpretar linguagem humana, aprendendo a formar parágrafos, corrigir erros de gramática, realizar traduções e, no futuro, produzir artigos inteiros como esse que você está lendo. Porém, os pesquisadores esbarraram em um obstáculo até o momento incontornável: nuance. A linguagem humana é lotada de nuances e significados que dependem de contexto local, conhecimento, abstrações, metáforas e sutilezas complexas demais para serem compreendidas por algoritmos.

Em outras palavras, a linguagem humana não é mecânica, não é compreendida ou definida apenas por seu conjunto de regras. Em contrapartida, existe sim uma categoria de “dialeto” que é definida por seu conjunto de regras, uma língua de humanos para máquinas: as linguagens de  programação.

Então, apesar da popularização dos chatbots e das assistentes digitais, ainda estamos muito distantes de uma verdadeira inteligência conversacional, mas talvez seja o momento de experimentarmos robôs “programadores”.

Um conjunto de códigos gerando outros códigos, sem intervenção humana? Esse não é o pesadelo preconizado pela ficção-científica? Não exatamente robôs construindo exércitos de mais robôs, mas um sistema autônomo construindo outros sistemas? Na verdade, também estamos bem longe desse cenário, se é que um dia chegaremos nesse ponto.

Codex, o motor por trás da magia do GitHub CoPilot, foi construído baseando-se em “uma seleção do idioma inglês e do código-fonte de fontes disponíveis publicamente, incluindo código em repositórios públicos no GitHub”. Após analisar bilhões de linhas de código, ele é capaz de produzir suas próprias linhas, a partir de um comentário do desenvolvedor, uma função iniciada, uma linha já existente. Dentro do contexto fornecido, o algoritmo consegue sugerir blocos inteiros a partir desoluções similares empregadas por outros programadores, todos humanos.

Aqui cabe um parêntese, porque existe uma controvérsia: há acusações e indícios de que a ferramenta possa estar reproduzindo blocos de código na íntegra, de sua vasta memória. Nada muito diferente de você pesquisar uma solução na internet, copiar e colar no seu código algo que outro já fez. Qualquer desenvolvedor com apreço pelo seu tempo sabe que não há necessidade de se “reinventar a roda” a todo momento. Porém, a questão aqui é que a Microsoft poderia estar se aproveitando de código livre para um produto proprietário. Seus criadores se defendem dizendo que o GitHub CoPilot não gera código já existente, mas cria seus próprios blocos. É uma afirmação difícil de se comprovar, mas também difícil de se desmentir.

Entretanto, o ponto nevrálgico dessa discussão não deveria ser se houve ou não uma violação de licenças ou princípios, mas o impacto dessa tecnologia inevitável no ecossistema da programação.

Por um lado, pode ficar tranquilo: GitHub CoPilot não é o começo do fim de sua profissão ou o primeiro passo da ascensão das máquinas. Seus próprios criadores reconhecem isso: “o GitHub CoPilot tenta entender sua intenção e gerar o melhor código possível, mas o código que ele sugere pode nem sempre funcionar, ou mesmo fazer sentido”. Então, sem a intenção, sem algo para ser compreendido, a ferramenta não é nada, assim como um martelo, um autocompletar, seu sistema operacional.

A capacidade humana de analisar um problema, dividi-lo em tarefas, avaliar soluções (que podem variar de cliente para cliente), engendrar novas ideias e caminhos não pode ser reproduzida, não importa a perfeição do algoritmo. Você precisa alimentar o sistema com “algo”. Além disso, você precisa analisar o resultado e confirmar se ele realmente se aplica ao contexto. A expertise de um bom desenvolvedor será necessária por décadas a fio.

Inteligência Artificial

Por outro lado, é importante ficar atento para as armadilhas da facilidade. O aviso é claro: “O GitHub Copilot não testa o código que sugere, então o código pode nem mesmo ser compilado ou executado”. O programador é indispensável para averiguar se o algoritmo não cometeu um erro grave. Não basta pedir uma função, esperar a ferramenta preencher e encerrar o expediente.

Um caso ainda mais sutil acontece quando o algoritmo sugere um código que compila, pode ser executado, porém, contém falhas de performance ou mesmo de segurança, que passam de forma imperceptível em um olhar desatento ou destreinado. O desenvolvedor experiente ainda é fundamental para identificar que aquele não é o melhor bloco de código possível de acordo com as boas práticas ou de acordo com técnicas mais inovadoras com as quais a máquina pode não estar atualizada.

O perigo desse impacto, portanto, está em toda uma nova geração de programadores que confia demais nos resultados que os algoritmos sugerem. Ainda assim, não é tampouco um problema de agora: afinal, quem garante a confiabilidade daquele código que você pegou na internet? Por mais que resultados de fóruns estejam sujeitos ao escrutínio público de outros profissionais, que podem reconhecer falhas de lógica ou segurança, eles ainda podem apresentar erros ou estarem ultrapassados. Entretanto, algo que saia diretamente das misteriosas entranhas de um algoritmo pode apresentar ainda mais riscos do que algo tirado de um fórum perdido.

Nessa questão, a Microsoft parece ter se esquecido da lição de Tay, o fiasco da Inteligência Artificial conversacional que se viciou em entradas incorretas de dados lá em 2016. Afinal, se um erro é bastante comum entre desenvolvedores, é natural que ele se integre a mecanismos de aprendizado de máquina que varrem bilhões de linhas de código.