Usar o ChatGPT no desenvolvimento de software me ajuda mesmo?
Olá!
Se você está lendo isso, acredito que tenha a mesma dúvida que tive enquanto pensava em qual tema abordaria para o TCC do curso que estou finalizando enquanto escrevo esta publicação.
Introdução ao problema
Essa dúvida surge junto com toda a especulação e discussão que foi sendo construída desde a disponibilização da plataforma ChatGPT, em novembro de 2022.
E quanta discussão tivemos até aqui! Quem ai lembra dos posicionamentos polêmicos de influenciadores como Cauê Moura, Felipe Castanhari, Nando Moura, que geraram uma certa revolta na 'bolha dev' 😂😂😂 (rir para não chorar).
Enfim, deixando a discussão de lado e indo para a prática, muitos desenvolvedores tem adotado o ChatGPT nas suas rotinas de trabalho, sendo esse trabalho em empresas ou até mesmo em projetos para portifólios ou qualquer outra finalidade pessoal, e é inegável a ajuda que essa ferramenta é capaz de proporcionar à quem utiliza na confecção de software hoje em dia...
Mas pera ai... Inegável? Essa é uma palavra bem forte para adjetivar a ajuda prestada... Será que, mesmo com os erros e respostas incorretas que são geradas, a Inteligência Artificial da OpenAI é capaz de fornecer um auxílio significativo para a pessoa que desenvolve software?
Com este questionamento em mente, realizei todo o meu TCC, cujo tema foi "Pesquisa sobre o impacto do uso de Transformadores Pré-Treinados Generativos para auxiliar na rotina de Desenvolvimento de Software" (um nome chique e comprido para impressionar a banca 😎), elaborei um método para verificar se a ajuda que o ChatGPT fornece é significativa, de fato, e estarei compartilhando o resultado deste experimento com vocês, pois acredito que a partir dele conseguiremos expandir essa discussão à outras áreas de impacto que essa ferramenta abrange.
Antes de continuar lendo esta publicação, já lhe deixo o questionamento: você acha que o ChatGPT ajuda uma pessoa que desenvolve software? Por que?
Método: o desafio
Para abandonar de vez os 'eu acho que...', ideializei um método para tentar buscar uma resposta para essa dúvida, e neste trecho estarei descrevendo como este método foi idealizado para trazê-la.
Meu ponto de partida foi olhar para mim mesmo: hoje trabalho no desenvolvimento de software de uma empresa em minha cidade à 2 anos, e tenho utilizado o ChatGPT para resolver problemas, criar trechos de código em cenários que não tenho muita afinidade, e obtive boas e más experiências nessa jornada. Repostas que estavam complemente erradas, por definição, e respostas que estava certas e me pouparam um bom tempo de pesquisa.
Porém, utilizar somente a minha percepção para chegar em uma conclusão seria muito pouco, além de impreciso.
Sendo assim, cheguei a conclusão que precisaria envolver outras pessoas para conseguir uma conclusão mais concreta e precisa, e cheguei na conclusão de fazer um desafio de programação. Este desafio se deu da seguinte forma:
- Busquei montar 2 grupos de estudantes da instituição onde curso Ciência da Computação;
- Cada grupo seria composto por 5 estudantes. Por se tratar de um desafio de programação, busquei estudantes de meu curso mesmo, pois de outros não faria sentido;
- Para cada grupo, eu dei um desafio contendo 3 perguntas relacionadas a uma base de dados que fiz baseado em valores de carros e suas marcas segundo a tabela FIPE. Peguei 4 marcas de carros de sua API pública e disponibilizei aos estudantes através de um arquivo JSON;
- Essas perguntas deveriam ser respondidas utilizando programação na linguagem Python, e envolviam conceitos de valor máximo, valor mínimo, ordenação, leitura de arquivo, etc...
- Um dos grupos teria de desenvolver uma resposta para as perguntas sem qualquer tipo de ajuda, seja pesquisando na internet ou perguntando aos colegas, devendo usar apenas os próprios conhecimentos;
- O outro grupo teria ajuda apenas do ChatGPT para responder;
- Essas perguntas deveriam ser respondidas dentro de um tempo de 40 minutos;
Depois de realizado este desafio, de maneira presencial, enviei aos estudantes um formulário contendo algumas questões relacionadas a implementação das respostas, para coletar alguns dados de caráter mais pessoal.
Um ponto a ser levado em consideração é que não foi estabelecido um nível mínimo de conhecimento para a adesão de estudantes ao desafio, pois se ele não houvesse conhecimento para responder as questões, suas interações e tentativas de resolução ainda seriam um dado indicador importante para a pesquisa.
Análise dos resultados
Feito o desafio e enviado os formulários para coletar as impressões do estudantes, parti para a análise dos dados gerados.
Analisei os seguintes pontos do que foi obtido:
- Acerto das questões;
- Tempo de execução do código desenvolvido nas questões certas;
- Análise do formulário pós-desafio;
- Análise das conversas com o ChatGPT do grupo que utilizou;
Grupo 1 - Sem consulta
Com estes objetivos em mente, podemos começar pela relação de dados gerado pelo Grupo 1, que não teve acesso a consultas em qualquer meio:
A tabela abaixo apresenta os acertos e erros alcançados por cada estudante. A marcação de N/D indica que não foi elaborado nenhum código capaz de exprimir qualquer resposta para a pergunta.
Aqui, já podemos notar que houve uma dificuldade entre os estudantes em realizar o desafio. Nenhum deles conseguiu o completar, e também não houveram respostas certas.
Por nenhuma das respostas ter sido a desejada para a pergunta, não foi feita a análise do tempo de execução em nenhuma dos trechos desenvolvidos.
Agora, falando sobre o formulário pós-desafio, essas foram as impressões dos estudantes:
- Na primeira pergunta, foi solicitado que fosse imposto um nível de dificuldade, de 1 a 5, de acordo com sua opinião. O nível 1 indicaria que o estudante achou o desafio muito fácil, e o nível 5 indicaria que achou muito difícil. Das respostas coletadas, todos os estudantes atribuíram o nível 4 de dificuldade;
- Na segunda, foi questionado se seu desempenho melhoraria caso tivesse alguma ferramenta de busca disponível para auxiliar na implementação, e todos preencheram que sim;
- Na questão seguinte, a terceira, havia um espaço para que descrevessem quais foram as faltas percebidas durante a implementação, e todos relataram a falta de um motor de busca para tirar dúvidas de como implementar uma determinada funcionalidade aplicável na resolução do problema;
- E por final, havia outro espaço para escreverem se conseguiram perceber melhorias que pudessem fazer com que o código performasse melhor e quais seriam essas melhorias. Por não terem conseguido desenvolver plenamente todas as questões, metade das repostas para essa pergunta foram negativas, ou seja, não conseguiram idealizar pontos de melhoria, e os que conseguiram eram mais voltados a implementação da resolução, e não a melhoria da performance.
Grupo 2 - Com consulta
Passando para os resultados do Grupo 2, que teve acesso a auxílio via ChatGPT, podemos observar os seguintes resultados na tabela de acertos:
Aqui já podemos observar uma melhora significativa. Ainda nenhum dos estudantes completou o desafio, mas todos fizeram um código para responder a Pergunta 1, e agora houveram acertos nas questões.
O Estudante 1 respondeu parte da Pergunta 2, e esta parte estava correta, e por isso resolvi considerar esse acerto parcial na análise.
Como agora houveram respostas corretas, houve a medição do tempo de execução dos códigos desenvolvidos, que serão apresentados abaixo.
O tempo mostrado é o tempo médio, em milissegundos, da execução do código desenvolvido realizada 1000X.
-
Tabela com os tempos de execução da Pergunta 1:
-
Tabela com os tempos de execução da Pergunta 2:
Já é possível observar de cara que o Estudante 1 teve o menor tempo entre todos os resultados, e nos próximos tópicos da publicação explicarei o porquê.
Passando para o resultado da pesquisa pós-desafio, estas foram as impressões coletadas:
- A primeira pergunta foi mantida, onde o estudante deveria atribuir uma dificuldade ao desafio, e todos o consideraram nível 3, um nível mais fácil em relação ao que foi preenchido pelo grupo anterior.
- A segunda pergunta foi alterada, onde eles deveriam dizer se a falta de consultas externas teria prejudicado o seu desempenho, e todos responderam positivamente, não ter consultas os prejudicaria.
- Também sofrendo alteração, a terceira pergunta pedia para ser atribuído um nível de ajuda que IA agregou nas respostas, sendo que o nível 1 seria pouca ajuda e o nível 5 seria muita ajuda. Os níveis atribuídos pelos estudantes variaram entre 4 e 5, ou seja, as consultas ajudaram significativamente.
- Na última pergunta, que também foi mantida, alguns estudantes relataram que melhorariam a performance do código desenvolvido tentando usar funções nativas da linguagem para a realização das comparações necessárias, enquanto outros não realizariam mudanças pois a performance estava adequada.
Como neste grupo houve acesso à ferramenta da OpenAI para auxiliar no desenvolvimento das questões, realizei a análise das conversas que os estudantes tiveram com a IA, e na busca de alguns padrões, achei pontos muito interessantes:
- Aqueles estudantes que realizavam solicitações mais específicas e detalhadas conseguiram um resultado funcional e melhor com menos interações. Um dos estudantes solicitou um trecho de código, em Python, que realizasse a verificação do menor valor dentre um conjunto de dados, e a medida que os erros iam ocorrendo na execução, ele simplesmente colava a pilha de erros gerada pela linguagem na conversa, e assim ele conseguiu um código que retornava a reposta correta em apenas 4 interações;
- O Estudante 1 pediu para que a IA realizasse uma otimização no código que ele havia escrito, e essa exigência foi atendida! Dentre os códigos desenvolvidos, o dele foi o que apresentou o menor tempo de execução, provando que seu código foi otimizado;
- Também, houve outro Estudante que teve sua conversa toda em inglês com a máquina, mas seu resultado não foi melhor por causa disso. Isso nos indica que a maneira e o que se pede é muito mais importante do que a linguagem utilizada, sendo assim, a ferramenta se torna mais acessível.
Com todos estes dados coletados e revisados, é possível chegar em algumas...
Conclusões
Sim, meu caro leitor, podemos afirmar que o uso do ChatGPT por pessoas que trabalham no desenvolvimento de software é capaz de fornecer um auxílio significativo à quem o usa como ferramenta em projetos de programação! 🥳🥳🥳
Foi notável a diferença de desempenho no grupo sem auxílio versus o com auxílio, dado a tabela que aponta os erros e acertos de cada estudante. O uso da ferramenta disponibilizada pela OpenAI também fez com que o Grupo 2 achasse o desafio mais fácil do que o Grupo 1, e no Grupo 2 conseguimos obter acertos para as perguntas.
Então sinta-se a vontade para usar e abusar de mais essa ferramenta, mas sempre levando em consideração que ela pode estar errada e que quanto mais informações forem fornecidas, melhor será a reposta para seu problema.
Outra conclusão que obtive analisando os dados gerados no desafio é que a pessoa que desenvolve software precisa ter a mão uma maneira de pesquisar a respeito do que se programa, seja para verificar usos de métodos, verificar resoluções de erros, estudar implementações, etc.
Quando questionados sobre seu desempenho sem a disponibilidade de auxílio, os dois grupos concordaram que seria pior.
Estamos diante de algo que tem o potencial de mudar completamente a maneira que um desenvolvedor busca por informações e realiza suas demandas na confecção de software.
Apesar das respostas incorretas e erros gerados em alguns resultados, o que se sobressai é a capacidade da IA assumir o papel de um instrutor personalizado, que dará um direcionamento à quem o usa, que mesmo que seja errado. Com essas respostas incorretas, podemos descobrir que existe um caminho melhor para resolver o empasse que nos impede de prosseguir, e com o uso do ChatGPT, podemos chegar nessa conclusão mais rápido.
Considerações finais
Gostaria de agradecer por ceder seu tempo e atenção até aqui, e espero que esta postagem tenha sido útil para você, nem que seja um pouquinho.
Estou realizando os passos para realizar a publicação de meu TCC na biblioteca da instituição, e quando conseguir, vou tentar colocar um link de acesso aqui, para que você consiga ver ele em sua totalidade, pois tem detalhes que não descrevi, por não ter necessidade.
Espero que, com tudo que foi descrito aqui, consigamos ter uma base mais sólida para discutir sobre o uso dessas ferramentas com IA de conversação na educação, no mercado de trabalho, no marketing, no desenvolvimento de projetos pessoais, etc. Este é meu principal objetivo com a divulgação da pesquisa que promovi: dar a comunidade de desenvolvedores mais subsídio para o aprimoramento de todos.
Um abraço, e fique bem!