Um novo mundo com AI Coding Assistants

Imagem do Autor

Publicidade

Bem-viiindos! Sempre que me olho no espelho e me deparo com mais fios brancos na barba, me lembro que comecei a atuar com tecnologia no século passado…

Atuei como programador de sistemas até 2004, posteriormente como engenheiro de dados e depois como cientista de dados, e posso afirmar que a melhor parte era a tempestades de emoções que eu enfrentava diariamente. É difícil descrever como era a sensação gerada pela explosão de dopamina desferida no momento que eu presenciava a correta execução de um script, function/procedure/def ou algoritmo, alcançando o objetivo fim, tornando a solução funcional! Em outras palavras, ver o resultado e pensar: “Funcionou!”

Posso dizer que atuar com linguagem de programação, seja como engenheiro de software, engenheiro de dados e cientista de dados, é uma experiência a qual se emprega 99% de transpiração e 1% de inspiração. Exige foco, entendimento claro sobre onde se quer chegar e muita disciplina. E quando falo sobre muita disciplina, me refiro a não perder a fé, a coragem e a perseverança. 😉

Tanto é, que me arrisco a dizer que se trata de um “círculo virtuoso”, dividido entre:

  • Quebrar em partes menores o resultado buscado ou pergunta, a ser desenvolvido ou respondida;
  • Definir quais bibliotecas, algoritmos e técnicas deverão ser empregadas;
  • Pesquisar e exercitar o autoaprendizado, para que possa aplicá-lo naquilo que precisa resolver, corrigir, melhorar ou responder.

Não é uma tarefa fácil, mas é gratificante. E não querendo polemizar, mas é importante ser dito que, dificilmente as máquinas conseguirão fazê-lo, ao menos, não comparado aos resultados alcançados pelas pessoas.

Um novo mundo com AI Coding Assistants

Você já se perguntou como era o mundo encantado da programação de software sem internet? Eu dei um rápido vislumbre na coluna sobre A publicidade digital na Era da IA. Em todo caso, saltando para a era dos buscadores, num belo dia eu encontrei, o que passou a ser o meu site mais estudado e acessado, https://www.macoratti.net/

O site do Macoratti.net foi meu principal assistente passivo de desenvolvimento de software durante alguns anos. Aprendi muito sobre como desenvolver em ASP 3 e VB6, usando o querido ADO (ActiveX Data Objects), que era a melhor biblioteca possível para acesso a bancos de dados como Oracle e SQL Server, a partir de seus drivers nativos.

Figura 1: Tela do site Macoratti.net, com filtro em ASP 3.0, exibindo suas primeiras publicações em 1.999.

Com o tempo, outros sites foram surgindo, os quais consigo citar:

No site fórum da InfoExame com base na linguagem de programação de interesse se escolhia o tema, entrava no fórum, se pesquisava uma resposta à alguma pergunta feita anteriormente que atendia a suas dúvidas, ou você fazia sua própria pergunta e aguardava a resposta; cada um no seu tempo.

O Github tinha outra dinâmica, a ideia era ser a fonte de repositório da comunidade que queria colaborar com conhecimento e open-source. Primeiro, se procurava um repositório disponível, para poder conhecer as soluções existentes, que às vezes atendia a todo tipo de gosto e necessidade. Era interessante entender como se desenvolvia uma solução na linguagem de programação que se procurava conhecimento, e o mais interessante, as vezes a sorte batia a porta e, até mesmo, se encontrava uma aplicação parecida com a que se estava desenvolvendo.

Stack Overflow, proporcionava uma experiência parecida com as dos fóruns de discussão, mas o diferencial era seu buscador próprio, forma de organizar e apresentar as interações de perguntas e respostas, bem como a base de conhecimento, que sempre foi seu grande diferencial. E com o tempo, se tornou parada obrigatória para reciclar conhecimento e entender novas boas práticas de mercado.

Já o Kaggle foi meu melhor amigo em tempos de autoaprendizado de técnicas de machine learning. O Kaggle se propõe a ser um espaço para aprendizado e desafios, algumas vezes com oferecimento de prêmios. Casos de uso, como modelos de recomendação para Netflix, são famosos pelo engajamento e alto nível técnico dos participantes. No meu caso, eu sempre gostei de escolher algum desafio que tivesse alguma relação com o que eu queria aprender, acessava o desafio e acompanhava as considerações dos participantes na área de discussões. Era comum um dos comentários me levar a um momento de epifania. 💡

Quando tudo começou a mudar!

Em Junho de 2018 a Microsoft fez a aquisição do Github. Eu lembro desse acontecimento, e que alguns se perguntavam sobre a aquisição: Por quê? Alguns diziam que fazia parte da estratégia da Microsoft em seu contínuo apoio ao mundo open-source, outros falavam que era para fortalecer sua presença entre os desenvolvedores. Fato é que, em Junho de 2021, o tech preview Github Copilot foi lançado, era uma ferramenta de complemento de código e programação automática desenvolvida pelo GitHub e OpenAI, que auxiliava os usuários do ambiente de desenvolvimento integrado VS Code, por meio do preenchimento automático de código. Em Outubro de 2021, o Github Copilot foi liberado para demais IDE.

Figura 2: Resultado de tela do Google, em resposta a pesquisa sobre lançamento do Github Copilot

Desde então, junto com o advento dos modelos generativos de inteligência artificial, tendo como carros-chefes os modelos de linguagem, grandes empresas como Anthropic, AWS e GCP, lançaram seus assistentes de codificação baseados em inteligência artificial, sendo respectivamente:

E como tudo isso tudo continua evoluindo?

Eu nunca presenciei uma evolução tão rápida. Até 2021, o que havia de mais moderno era o autocomplete integrado IDE, onde era proposto um código e se eu concordasse, bastava acionar a tecla <tab>.

Figura 3: Fragmento de código Javascript, onde ao digitar o termo const, foi sugerido que seria nomeado como saveRanking. Provavelmente por considerar já havia uma const com a denominação updateRanking

Agora temos uma solução de geração de código, como o recém-lançado Claude 3.7 Sonnet, que me permitiu gerar um, via prompt chat, um Jogo da Velha com Ranking, codificado em Javascript, CSS e HTML para rodar no navegador. O tempo que investi aqui foi de 25 minutos. Isso é realmente um tempo de esforço interessante. Ao avaliar o código gerado, que conta com 317 linhas em Javascript e o restante em CSS e HTML, estimo que eu iria levar, ao menos, 1 hora.

Ahhh, e ainda tem uma versão CLI, o Claude Code, uma ferramenta agentica de codificação que ainda não usei, mas que promete ser ainda mais criteriosa na escrita e construção de uma solução fim a fim – SaaS. “A ver!”

Figura 4: Tela de chat para desenvolvimento de software de forma simplificada

Voltando ao “feito” em 25 minutos, pode-se concluir que tive uma redução de 58% de tempo no desenvolvimento da solução? Sim! Então um cenário como esse pode ser aplicado e expandido no dia a dia das empresas? Não!

Então, vamos aos critérios que me baseei para responder as perguntas acima:

  • Sim, eu realmente economizei tempo. A matemática foi clara aqui, se meu tempo estimado de esforço era de 1 hora e eu realizei a tarefa em 25 minutos com o uso do Claude 3.7 Sonnet, significa que conquistei meus ganhos.
  • Porém, Javascript é uma linguagem a qual tenho pouco contato desde 2020. Estou no mínimo enferrujado, o que por si só seria responsável por tentativas e erros na estrutura do código e principalmente na definição e utilização dos objetos adequados. Além disso, eu teria dificuldades do debug, pois meu ambiente de desenvolvimento está preparado para Python, não para Javascript.

Superada a linguagem escolhida, quero abordar o mais importante:

  • A relevância da solução dentro de um ecossistema para uso comercial.

O dia a dia nas empresas não consiste frequentemente em construir uma solução fim a fim, sem dependências, na ausência de boas práticas no ambiente de desenvolvimento e inobservância ao design patterns do framework adotado. Vale acrescentar a citação de métodos de desenvolvimento baseados em CI/CD Pipeline, onde o ticket é a lei 😉, bem como o cuidado com sua branch, merge-request, code-review, tests e deploy tem forte acoplagem com as demais features, que podem estar sendo desenvolvidas pelos colegas.

Toda solução precisa ter seu guideline, ou seja, ter um desenho de arquitetura adequado, seguindo o system design (HLD e LLD) definido para o domínio da solução, estando atento a performance, disponibilidade, resiliência, escalabilidade e elasticidade (vertical ou horizontal) e, por que não, pensar na experiência do dev team. Sendo que o desenho de arquitetura pode estar focado na solução fim a fim, no sistema, no módulo, no microsserviço ou buscando atender a uma feature em específico.

Independentemente do nível de abstração e o foco da arquitetura de solução, sair codificando algo não deveria ser uma opção. Dito isso, e passados esses pontos, bora codar (programar), então?

Se a resposta for SIM, as ferramentas que se intitulam como copiloto, assistentes de código ou gerador automático de código a partir de uma prompt de entrada ou simplesmente CodeGen, serão um excelente meio para realizar uma a atividade de codificação. De maneira geral, eu gostaria que observasse os seguintes cenários, que a meu ver, possibilitam maior ganho em produtividade de maneira inerente a aplicação do gerador de código que escolher:

  • Data Science – Experimentação: no estágio inicial de projetos de ciência de dados, o foco está em experimentação rápida – construir modelos e ajustar métricas estatísticas. Ferramentas de CodeGen ajudam a agilizar essas explorações, como p.e., o GitHub Copilot (inclusive em notebooks Jupyter) pode gerar automaticamente código para tarefas comuns de ciência de dados, como criação de gráficos, filtragem e transformação de dados e até treinar modelos de machine learning. Isso permite que um cientista de dados monte rapidamente um pipeline básico para seu dataset ou teste um modelo baseline sem codificar tudo do zero, economizando tempo na fase de trial-and-error. A produtividade salta – estudos indicam que desenvolvedores conseguem escrever código ~55% mais rápido com ajuda do Copilot​. Assim, a IA funciona como um assistente diligente que monta scripts iniciais, permite treinar modelos simples e até sugere otimizações de hiper parâmetros, acelerando a obtenção de resultados preliminares;
  • Tests – Unitários e de Regressão: escrever testes unitários e de regressão costuma ser trabalhoso e, por vezes, negligenciado devido a prazos (hajam esforços). Com CodeGen, é possível gerar casos de teste automaticamente a partir do código-fonte ou da descrição do comportamento desejado, como p.e., o desenvolvedor pode selecionar uma função e pedir “gerar testes unitários” – o CodeGen então produz a estrutura básica de um arquivo de teste, usando frameworks como JUnit, PyTest etc, a sua escolha, cobrindo cenários comuns. Isso reduz o esforço manual em tarefas repetitivas, como criar objetos simulados (mocks) ou configurar ambientes de teste​. Ao automatizar o boilerplate dos testes, a equioe consegue aumentar a cobertura de forma mais rápida, o que se reflete positivamente na integração contínua: com mais testes disponíveis, o pipeline da integração contínua consegue detectar quebras/regressões logo após cada commit. De fato, integrar o codeGen ao CI/CD pipeline ajuda a garantir que os testes gerados rodem consistentemente em todas as etapas do ciclo de entrega​;
  • Software Engineering – PoCs: quando se tem uma ideia nova ou é preciso validar uma tecnologia, o tempo é voraz – e o CodeGen permite criar um esboço funcional em questão de horas. Equipes pequenas podem pedir ao CodeGen para gerar componentes inteiros de um protótipo, como p.e., o scaffolding (estrutura base reaproveitável) de uma aplicação web simples (rotas, controladores, modelos), a integração com uma API externa, ou um script que demonstra uma funcionalidade. Em um hackathon ou innovation sprint, essa eficiência pode significar poder apresentar 2–3 variantes de solução em vez de apenas uma, explorando alternativas. Para protótipos, “quantidade sobre qualidade” às vezes é aceitável – o importante é fazer funcionar. O CodeGen auxilia justamente nisso: gera rapidamente código funcional, ainda que não perfeitamente refinado, permitindo validar a ideia central (Does it work?). Esse código acelerado em ambiente isolado ou de projeto novo (greenfield) é considerado um ganho interessante de produtividade. Assim, o CodeGen expande a criatividade dos envolvidos, liberando-os de detalhes enquanto eles focam em testar conceitos;
  • Software Engineering e Data Engineering – Engenharia Reversa e Migração de Código: outra área de grande potencial para CodeGen é a modernização de sistemas legados – seja para entender código existente (engenharia reversa), seja para migrá-lo para tecnologias mais novas. Tradicionalmente, interpretar um sistema antigo (quase sempre mal documentado) e reescrevê-lo exige enormes esforços humanos. O CodeGen está mudando esse panorama. Modelos de linguagem podem absorver milhares de linhas de um código legado e explicá-lo em linguagem natural, facilitando a vida do engenheiro que precisa entendê-lo​. Essa capacidade de resumir e segmentar sistemas complexos em componentes compreensíveis fornece insights valiosos sobre a arquitetura atual e possíveis pontos de melhoria, como p.e., a Deloitte relatou o uso de LLMs para decompor aplicações legadas em histórias de usuário, preparando o terreno para uma reimplementação organizada​. A grande vantagem é que o CodeGen não se cansa com código verboso ou obscuro: ela pode percorrer um módulo legado inteiro (em COBOL, VB6, etc.) e gerar documentação comentada, ou mesmo converter automaticamente trechos para uma nova linguagem, preservando a lógica original. Já existem casos reais de uso: uma ferramenta de migração da Infosys conseguiu converter código COBOL em Java utilizando IA, acelerando a transição e até otimizando a performance no novo ambiente​. Nesse projeto, a inteligência artificial foi treinada no próprio CodeBase legado para entender seus padrões específicos e assim eliminar erros humanos durante a tradução​. Em outra iniciativa, uma grande companhia aérea empregou CodeGen para gerar documentação detalhada e casos de teste a partir do código legado, usando esses artefatos para validar automaticamente a versão migrada para a nuvem​;
  • Machine Learning Engineering – Escalabilidade: levar um modelo de machine learning do protótipo (geralmente desenvolvido em notebooks ou scripts isolados) até um ambiente de produção escalável é um grande salto – e o CodeGen pode ajudar a preencher essa lacuna. Depois que os cientistas de dados provam que um modelo tem valor, os engenheiros de machine learning precisam criar toda a solução em torno dele: pipelines de dados, APIs de serviço, monitoramento, otimizações de desempenho, etc. Nessa transição, o CodeGen pode atuar como um multiplicador de força, gerando partes do código “conhecido” de forma rápida, como p.e.,o CodeGen pode escrever o swagger de uma API REST para servir o modelo (endpoints, serialização de inputs/outputs), ou gerar scripts de ETL para preparar/pre-processar os dados. Em nuvem, é possível usar IA para produzir modelos de infraestrutura como código (terraform), arquivos de containerização (Docker, YAML de Kubernetes) e configuração de CI/CD pipelines – tarefas essenciais para escalar a solução, porém reconhecidamente repetitivas. A velocidade proporcionada é importante: desenvolvedores podem iterar a arquitetura de produção rapidamente, testando diferentes abordagens, como p.e., gerar código de pipeline Spark vs. Flink e comparar desempenho. Além disso, o CodeGen pode auxiliar na otimização do código do modelo em si. Não é incomum um modelo protótipo funcionar bem em pequeno volume, mas em produção precisar ser mais eficiente. O CodeGen consegue identificar pontos de lentidão em código (como loops Python ineficientes) e sugerir vetorização ou uso de estruturas mais adequadas​. Já existem recursos em IDE que, integrados ao CodeGen, fazem recomendações de performance, como uso de caches e algoritmos melhores, baseadas em padrões conhecidos​. Isso significa que o engenheiro de machine learning pode rapidamente refatorar para performance, orientado pelas dicas do CodeGen em vez de precisar descobrir tudo manualmente. No geral, o CodeGen pode encurtar a etapa de engenharia necessária para escalar um modelo;
  • Software Engineering – Solução Estruturante: a ideia aqui é usar o CodeGen para código imediato e como ferramenta de apoio ao design de software em alto nível. Em tese, um CodeGen treinado em milhares de projetos conhece diversos padrões de arquitetura (MVC, camadas, microsserviços, etc.) e pode auxiliar os desenvolvedores a estruturarem um novo sistema seguindo boas práticas desde o início. Isso pode ocorrer de algumas formas, como gerar o esqueleto de um projeto seguindo uma estrutura limpa de pastas e módulos, ou sugerir classes e componentes de acordo com um design pattern conhecido, como p.e., ao iniciar um serviço web, poderíamos pedir: “crie a estrutura de um projeto Spring Boot com camadas de controller, service e repository” – e o CodeGen entregaria um bootstrap consistente, já com classes base e métodos placeholder. Essa abordagem padroniza a arquitetura logo de largada, poupando tempo de configurar boilerplate e minimizando decisões inconsistentes. Outra aplicação é na documentação e especificação: o CodeGen pode gerar diagramas de sequência ou descrições de API a partir do código, ajudando a clarificar a arquitetura para toda a equipe.

É possível considerar que, conforme o CodeGen evolui, o papel do desenvolvedor vai mudando de codificador manual para “orquestrador de funcionalidades”, montando peças geradas pelo CodeGen, conforme uma visão arquitetural pré-definida​. Isso significa que o talento humano se concentra em decidir “o que” e “como” deve ser construído, enquanto o CodeGen cuida de construir as peças individuais rapidamente. Nessa parceria, de hman-in-the-loop (HITL), onde há uma abordagem colaborativa que combina a inteligência humana com a inteligência artificial, a produtividade pode aumentar sem sacrificar a estrutura: o time pode experimentar diferentes subdivisões do sistema pedindo ao CodeGen implementações alternativas e escolhendo a que melhor se encaixa, quase como montar um quebra-cabeças com peças de código-fonte. Importante também citar que, o CodeGen pode ser usado para levar consistência de estilo e convenções em todo o código-base. Ferramentas como o Cursor AI já conseguem reescrever partes do código para garantir consistência linha a linha (nomes de variáveis padronizados, mesma formatação etc. Em projetos grandes, manter a coesão é um desafio – e o CodeGen pode atuar como um “guardião” sugerindo refatorações para tornar o código mais uniforme e integrado. Tudo isso contribui para um software mais coeso e legível, facilitando sua evolução futura.

Ainda me faltam dados suficientes para fortalecer todos os pontos que abordei, mas estarei por perto, de prontidão para apoiar e entender o melhor caminho, visando extrair valor nos referidos cenários.

De fato, adotar um CodeGen, como ferramenta, estando a pessoa no centro, traz valor para o dia a dia de construção de nova soluções. Porém, vale o alerta, é importante considerar que um CodeGen é uma solução baseada em modelos de linguagem, que por sua vez são pré-treinados com dados coletados, ou seja, grande parte do código-fonte gerado é mediano, e sem a avaliação de profissionais qualificados a solução desenvolvida pode não alcançar a melhor performance e ter um número de linhas e objetos de produto de software desnecessários.

Sendo assim, um CodeGen é uma ferramenta, não o próprio desenvolvedor, que precisa estar no centro da decisão e do direcionamento de uso e aplicação de um CodeGen.

Dito isso e uma vez confirmados os potenciais impactos positivos em tempo de desenvolvimento, é importante atentar-se a: como poder garantir que o aprendizado dos desenvolvedores envolvidos está evoluindo? Pois a máquina não conseguirá chegar aos mesmos resultados que uma pessoa!

Foto de Por Sergio Gaiotto
Por Sergio Gaiotto

Gaiotto, pai, professor e mentor voluntário.

Atualmente como Chief Data & AI Officer na Claro, a frente de soluções de Dados e IA em TI.

Professor no MBA da FIA Labdata, leciona IA aplicada ao negócio e Transformação Digital a partir da IA.

Mentor voluntário na ONG Jovem com Futuro.

Com 31 anos de mercado, sendo 19 anos gerando valor com Inteligência de Dados e disseminação da Cultura Data-Driven.

Ver MAIS publicações
Foto de Por Sergio Gaiotto
Por Sergio Gaiotto

Gaiotto, pai, professor e mentor voluntário.

Atualmente como Chief Data & AI Officer na Claro, a frente de soluções de Dados e IA em TI.

Professor no MBA da FIA Labdata, leciona IA aplicada ao negócio e Transformação Digital a partir da IA.

Mentor voluntário na ONG Jovem com Futuro.

Com 31 anos de mercado, sendo 19 anos gerando valor com Inteligência de Dados e disseminação da Cultura Data-Driven.

Importante: os comentários e opiniões contidos neste texto são responsabilidade do autor e não necessariamente refletem a opinião da AINEWS ou de seus controladores.

Compartilhe nas redes:

Assine agora a newsletter gratuita e participe da comunidade que está liderando a transformação digital no Brasil e no mundo:

Publicidade

 Inscreva-se na NEWSLETTER

Esteja sempre um passo à frente. Assine agora a newsletter gratuita.

 Inscreva-se em nosso LinkedIn

🔥 Últimas notícias 🇧🇷