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:
- 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.
- Resolver um problema: Independente do nível de experiência, são duas pessoas trabalhando juntas para resolver um problema específico.
- 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.
Neste Artigo
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
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)
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!!!!