Programando em par com a Inteligência Artificial

O trabalho em par é uma técnica muito interessante para passagem ou criação de conhecimento. Como o nome diz, são duas pessoas trabalhando juntas para resolver um problema. O objetivo pode variar:

Programação em par. Um homem com as mãos sobre o teclado e ao lado dele uma mulher apenas olhando para o computador.
  1. Transferir conhecimento: no seu time há pessoas muito experientes (seniores) e pessoas com pouca experiência (juniores). É possível juntar duplas de forma que a sênior trabalhe com a júnior. A pessoa júnior pilota e a sênior copilota.
  2. Resolver um problema: Independente do nível de experiência, são duas pessoas trabalhando juntas para resolver um problema específico.
  3. Iniciar um novo produto: Quando um novo produto está sendo criado, é uma boa forma de garantir que as bases do produto sejam definidas, compreendidas e seguidas.

Essa lista não é exaustiva. 

Uma história, uma necessidade

Antes de mais nada, gostaria de mencionar que atualmente estou como Gerente de Desenvolvimento de Software do TRE-RJ e isso é relevante para a história que vem a seguir. 

Como gerente eu tenho a vantagem e a prerrogativa de sempre ser elencado como parte interessada (stakeholder) em todos os produtos / serviços que meus times constroem. Como parte interessada, uma das coisas que posso fazer são sugestões de melhoria para nossos softwares. É nesse ponto que acaba todo poderio da minha prerrogativa de chefe. Eu posso até fazer as sugestões, mas depende dos product owners aceitarem e do time ter disponibilidade para desenvolver. Acredite, já recebi muitos nãos e isso faz parte do jogo. 

Um dos serviços que nós temos é o Portal do Cidadão. É um local onde os eleitores do estado do Rio de Janeiro podem consultar serviços sobre suas informações eleitorais. Um dia eu tive uma ideia. E se um eleitor que tivesse algum débito eleitoral (multa por não votar, por exemplo), recebesse um alerta de que ele possui essa dívida. E se o eleitor ou a eleitora que ainda não cadastrou sua biometria, recebesse esse aviso e fosse direcionado para o Cartório Eleitoral da sua preferência. São ideias legais. A Teonice, product owner desse serviço, concordou com a ideia. Mas… não havia times disponíveis para construí-las. A prioridade é eleição (estamos nos primeiros meses de 2024).

Ideia anotada, colocada no product backlog para ver se um dia, nós faríamos. Deu uma pontinha de frustração, mas fazer o que? Temos números sobre a nossa capacidade e colocar mais coisas em paralelo só aumentará o nosso tempo de entrega de todos os produtos. A não ser que eu mesmo colocasse a ideia em construção. Só que havia um problema. Esse portal foi desenvolvido em Angular com Spring Boot e eu me tornei Scrum Master, Product Owner e finalmente gestor bem antes dessa arquitetura ser adotada. Entendia muito, muito pouco de Spring Boot, era nulo em Angular e parar alguém do time para me ajudar seria voltar para o problema original.

Copycat, o imitador

Uma mulher negra, com óculos, cabelo preso como rabo de cavalo, olhando para a tela de um computador enquanto digita.

Após baixar o código-fonte, a primeira coisa que fiz foi abrir o Eclipse e o Visual Studio e fazer o método mais tradicional de aprender a programar. Olhar para o código que alguém já fez, copiar e fazer as alterações necessárias para atender às minhas necessidades. O famoso método copycat (imitador). Dito e feito. Nas primeiras linhas foi excelente. Copiando, colando, alterando e consultando o Stack Overflow quando alguma coisa não dava certo. Porém com o tempo, comecei a precisar de coisas que não estavam presentes naquele produto e a solução foi continuar baixando códigos de outros produtos e tentando copiá-los e modificá-los.

Infelizmente, as minhas atribuições de gestão não me dão muito tempo para ficar buscando um código que atendesse exatamente aquilo que eu procurava. Eu era chamado para reuniões, analisar gráficos e demandas de times, clientes e gestores acima de mim. Enfim, atender as atribuições de um gestor. Confesso que bateu uma frustração, já se passará mais de duas semanas e eu teria que deixar as coisas ½ feitas e 0% entregues. 

ChatGPT como copiloto

Foi aí que bateu a ideia, e se eu utilizasse o ChatGPT para programar comigo. Resolvendo dúvidas básicas e me ajudando a construir as funcionalidades. Fui lá e fiz a pergunta: Como eu retorno um sortedset para o angular? O Sortedset é uma lista de elementos ordenada por um critério. A resposta dele foi bem satisfatória, mas não era exatamente o que eu queria.

sorted_set = {3, 1, 4, 1, 5, 9, 2}
sorted_array = sorted(sorted_set)
Um homem fazendo programação em par com a inteligência artificial.

Ele deu um exemplo genérico. Foi então que eu peguei todo o código da classe em angular e colei no ChatGPT. Nem me preocupei em dar uma arrumada nele. No final eu acrescentei a pergunta: Como eu faço para que o método “tenhoDividas()” retorne o sortedset?. Nem repeti a palavra Angular. Dessa vez a resposta dele foi completa e exatamente o que eu precisava. 

A partir desse ponto fui “conversando” com o ChatGPT para apresentar mensagens, alterar Cascading Style Sheet (CSS), passar parâmetros, receber objetos complexos e tudo mais. Resumo da ópera, em menos de 1 semana já havia criado as funcionalidades, os testes automatizados e colocado na fila dos testadores. Esses aprovaram e tudo entrou em produção.

Eis que surge outra ideia

Foi então que surgiu outra ideia: E se comunicássemos os eleitores do RJ que eles foram convocados como mesários pelos seus respectivos cartórios eleitorais. O desafio aqui é um pouco maior, porque teríamos que comunicar 2 sistemas que até então eram independentes. Por questões de segurança, eu sabia que a comunicação entre sistemas dava um trabalho, pois os dados não podem ser interceptados durante a conversação e isso para a Justiça Eleitoral é sine qua non. Não há a possibilidade de exceções.

Dei a sugestão para a Teonice novamente que achou a ideia bem interessante, anotou no backlog, mas… continuávamos sem time para atualizar o Portal do Cidadão. (Bendita hora que essa super PO começou a trabalhar conosco).

Blackbox.ai

Depois de algumas semanas que não consegui encostar no código, finalmente chegou um dia em que eu tive a oportunidade de abrir o código-fonte e voltei a programar em par com o ChatGPT. No início foi legal, mas essa atividade era bem mais complexa que a outra, pois envolvia criptografia, autenticação de aplicação-usuário, verificação de autenticidade e etc. 

Pegar o código, digitar no ChatGPT, esperar a resposta ficou um tanto tedioso. Foi aí que eu pedi uma ajuda para o próprio ChatGPT: Me liste as 5 principais ferramentas gratuitas de IA para programação que podem ser integradas à IDE. Essa é a sigla para Integrated Development Environment ou, em português, Ambiente de Desenvolvimento Integrado. Caso nunca tenha ouvido falar sobre isso, resumidamente, é o software que utilizamos para construir outros softwares. Ele listou 5, porém o segundo não era gratuito. 

Então lembrei que o ChatGPT tem uma restrição de tempo. A última atualização do ChatGPT 3.5 foi em 2022, e a do ChatGPT 4 foi em 2023. As coisas mudam. Ferramentas que eram gratuitas deixam de ser, outras mudaram o foco e outras deixaram de existir. 

Então fui ao Gemini e repeti a pergunta. Ele confirmou algumas das sugestões do ChatGPT e indicou outras. Uma delas era o blackbox.ai. Confesso que o nome chamou atenção então resolvi dar uma conferida. 

Instalei no meu Visual Studio e ele realmente se integra à IDE. Ele pode ser utilizado no modo conversa, tipo o ChatGPT, porém ele tem um modo interessante de sugestão de código. Literalmente você começa a digitar um IF (Se) e o cara já analisou tudo o que vinha antes e já te entrega um IF quase pronto. Basta digitar um tab. Não é feitiçaria, é tecnologia.

Desde então tenho feito pair programming com o Blackbox, pois ele dá muito mais pitacos do que o ChatGPT. E a construção da funcionalidade durou pouco mais de uma semana. Levando em consideração que sofri muitas preempções da atribuição de gestor. 

Pontos positivos e negativos de trabalhar em par com a Inteligência Artificial.

Vou fazer minhas as palavras do Rodrigo de Toledo sobre vantagens e desvantagens de trabalhar em par com Inteligência Artificial. Ele também utilizou a programação em par para resolver um problema e publicou nesse post aqui que vou copiar descaradamente, mas dando créditos.

Pontos positivos

  • Conhecimento da linguagem: A Inteligência Artificial parece ter um domínio total da linguagem de programação.
  • Explicações detalhadas: Em caso de erros de compilação ou bugs, a IA fornece explicações detalhadas antes de corrigir o problema, promovendo o aprendizado.
  • Comunicação visual: Pasmem, eu fiz upload de uma imagem para ilustrar o bug. A IA conseguiu entender o problema e corrigiu o código para gerar o resultado esperado.
  • Aprendizado mútuo: O processo me proporcionou a oportunidade de ensinar a IA sobre nuances da linguagem e do projeto, enquanto aprendia com suas sugestões e insights.

Nesse mesmo post, ele comenta sobre as conclusões do Rodrigo Braga Afonso ao utilizar o Copilot integrado à IDE e coloca em destaque: O desenvolvedor aprende boas práticas de programação; Comentários e documentações automatizados; Acúmulo de aprendizados entre projetos; Otimização e refatoração de código; Redução de troca de contexto.

Pontos negativos

  • Erros inesperados: A IA cometeu alguns erros que um programador humano experiente não cometeria, como chamar um método inexistente de um objeto.
  • Refinamento necessário: Em projetos maiores, pode ser necessário trabalhar módulo a módulo para evitar sobrecarga e garantir a qualidade do código.
  • negativo/positivo: Em um determinado momento a IA cometeu o mesmo erro 2x, eu falei para não errar mais, e ela jurou que não cometeria mais o mesmo erro (até onde fui, não se repetiu mesmo).

Conclusão

Acredito que esse será o caminho que seguiremos não só em desenvolvimento de software, como também em outras áreas profissionais. A inteligência artificial não é uma substituta do humano, porém é uma grande auxiliar nas nossas vidas. Se eu puder colocar um ponto importante sobre aspectos negativos e positivos, eu diria que a programação em par seja com o Blackbox ou ChatGPT só funcionam bem porque eu sou desenvolvedor de software (por amor, afinidade e formação) e já possuía conhecimento prévio sobre o tema. Assim eu pude selecionar quais eram as boas sugestões da IA e quando ela errava. Pude até, como o Rodrigo Toledo comentou, corrigi-la. 

Bora caminhar juntos nessa jornada? Dá uma olhada no nosso treinamento de Product AI e saiba como a Inteligência Artificial pode ser utilizada para te ajudar a criar produtos incríveis.

Nos vemos em breve!!!!

Sobre o autor(a)

Trainer na K21

Avelino Ferreira é formado e mestre em Ciência da Computação. Teve uma longa trajetória na TI, começando como programador e chegando a gestor de diversos times de criação de produtos digitais. Conheceu e começou a adotar as melhores prática de de Métodos Ágeis em 2008. Desde então, se dedica a auxiliar outras empresas na construção da cultura ágil. Atualmente, é Consultor e Trainer na K21

Artigos relacionados

O Guia do Scrum fala sobre o refinamento do Product Backlog: “O Product Backlog é refinado conforme necessário” (p. 9). Todavia ele não descreve exatamente o que é o refinamento. Uma reunião, uma atividade, um processo. Neste artigo vamos jogar…

Marcos Garrido, Sócio-fundador e Trainer na K21

Existem muitas formas de organizar as métricas de seu produto / empresa. Aqui neste blog já escrevemos sobre as Métricas do Pirata, Fit For Purpose (F4P) e Métricas nas Quatro Áreas de Domínio da Agilidade. Todavia, agora, queremos falar sobre…

Após alguns anos desenvolvendo produtos e ajudando outras empresas a fazer tal, gostaria de listar com vocês alguns erros comuns que percebi ao longo dessa jornada. Olhando para as 4 Áreas de Domínio da Agilidade (Negócio, Cultural, Organizacional e Técnica)…

Uma das principais habilidades que desenvolvemos enquanto consultores é a de fazer boas perguntas. Uma vez que as pessoas percebem o poder que tem uma boa pergunta, colocada ali na hora certa e que muda o destino de uma reunião,…