LLMs são realmente tudo isso? Relato sincero de um sênior que programa há 20 anos
Como dono de uma software house e um desenvolvedor ativo de software há mais de 20 anos, tenho testado cada vez mais o uso da IA no dia a dia para tentar otimizar meu trabalho e, tentar, produzir cada vez mais. E estou aqui para compartilhar algumas observações com vocês.
A princípio já quero tirar o elefante da sala. Posso resumir que, quanto mais experiência você tem (o meu caso), a IA mais atrapalha o seu fluxo de produtividade do que ajuda. Por enquanto, pouca utilidade em solicitar para a IA fazer algo que eu já sei como fazer. Não vou, por exemplo, pedir para a IA criar uma entidade, montar um controlador, ou criar um middleware, se o tempo gasto para contextualizar ela e ter uma implementação boa o bastante seguindo o padrão do projeto, geralmente, é igual ou superior ao tempo que eu já gastaria para implementar a solução.
Ainda sim não acho um desperdício explorar rascunhos com ela ou prototipagem para trabalhar em cima. Vejo que meu comportamento não mudou muito nesse sentido. Nunca fui de “copiar/colar” do Stack Overflow e ainda não faço com IAs. Mas ver um código cru, rascunhado ou prototipado, ajuda a trabalhar em cima daquilo um pouco mais rápido, uma vez que inicia um caminho para o que eu realmente queria fazer.
Outros fatores em que as LLM são bastante úteis é na atuação como um "auto completar" mais inteligente, o que me poupa de escrever linhas que eu já escreveria e também como uma ferramenta no processo de rubberducking (debater sobre uma feature para que eu possa implementá-la ou, no máximo, gerar um código rascunhado do ponto de vista da LLM). Acredito que, em produtividade, em relação as métricas que sempre monitoro, tenha tido algo em torno de 10% a 15%. Nada comparado a uma “SkyNet, devastadora de devs”.
Inclusive, algo que estava degradando minha produtividade é a quantidade massiva de auto completar. Além de tirar a imersão que eu tenho no processo de programar, simplesmente me deixava mais lento em implementar o código. Dei uma limitada. Também é por isso que prefiro o Copilot ao invés do Cursor, uma vez que ele é menos invasivo. Afinal, para mim, tem pouca utilidade para o tipo de trabalho que costumo exercer (sugestões acima de cinco linhas são um completo lixo). Entendo entretanto que ela funcione bem com tudo que é trivial como CRUD, interfaces genéricas, etc.
Mesmo com esses desafios, tenho me esforçado no processo de adoção da IA em projetos pessoais, onde a cobrança pela qualidade é menor e venho experimentado algumas soluções que geraram algumas reflexões que eu quero compartilhar por aqui. Principalmente com aqueles que estão com medo do que esta por vir.
Uma estratégia que tem se provado mais promissora, mas bem limitada, ainda é uma equação de fatores que descrevo como dev autônomo = ((c + (t^a)) - s) * (cc-a).
- c é o uso do contexto completo da codebase. Por enquanto, para codebases menores já é possível. Mas quando falamos de softwares mais robustos e elaborados ainda está longe de acontecer. A janela de contexto disponível para a maioria das IA/s do mercado ainda é uma limitação que resulta em alucinações constantes. A falta de contexto provoca uma alucinação maior e é possível observar: fugas de padrões, estratégias que resultam em algoritmos nitidamente má otimizados, inserção excessiva de bibliotecas para funcionalidades que poderiam ser resolvidas in-app;
- (t^a) são micro-tarefas executas por agentes especializados. "Micro" é a palavra importante aqui para evitar que a IA se envolva em muitos contextos. Cada agente iria extrair o contexto específico para as suas demandas, seguir regras impostas para a atividade que deve exercer e, possivelmente, ter passado por um “fine-tuning” especifico para a tarefa que irá desempenhar. O grande desafio aqui, inclusive, é quebrar o projeto em micro-tarefas. Quando estou programando e implemento uma solução, ela pode se refletir em diferentes camadas e ir de uma ponta a outra para concluir a feature. Por enquanto, quanto maior a tarefa, maiores a chances da LLM sair dos trilhos. Caso encontrássemos a fórmula para criar o agente perfeito, por exemplo, poderíamos ter um agente especializado para:
- criar features;
- criar hotfixes;
- criar testes unitários;
- descrever commits/pull requests;
- avaliar qualidade do código;
- etc.
- s, é a alucinação submissa. Os modelos atuais, até por uma questão de design de produto, são otimizados para serem cooperativos e concordarem sempre com o usuário. Isso vai acontecer mesmo quando essa concordância entra em conflito com a lógica ou realidade. Essa forma de elaborar as respostas é um problema principalmente para quem não tem experiência. Se você não souber como verificar ou entender o que a IA produziu, será incapaz de encontrar o problema. É o caso de:
- A IA diz que fez alguma coisa ou diz que uma coisa não é exatamente o que é;
- Se você verifica, confirma que ela está errada e questiona ela, ela responde que você está certo e que irá fazer corretamente a seguir;
- Do contrário, ela segue a vida para o próximo tópico e um erro oculto vai parar na ponta final da aplicação e pode causar danos imensuráveis até então;
- Alguma outra alucinação submissa entra no contexto e o loop reinicia.
- (cc-a), por fim, expressa a confiança no trabalho que esteja sendo desempenhado pela IA sem assistência. Principalmente em relação a segurança, já tem desenvolvedor menos experiente criando uma dependência com IA e, a partir das respostas dela, deixando passar vulnerabilidades criadas por falta de contexto como: SQL/NoSQL injection; ausência de sanitização de dados; bypass ocultos em validadores; exposição de informações sensíveis; ausência de camadas de segurança como implementação de helmet/cors para API/s; ausência de estratégias de controle de acesso. Você tem que saber de todos os detalhes para que tudo seja resolvido (se for resolvido).
Acontece que para atingir essa equação hoje ainda precisamos de:
- Mudanças tecnológicas, para que os modelos fiquem mais otimizados, gastem menos recursos computacionais e possam aumentar consideravelmente a janela de contexto. É possível ver que, principalmente após o DeekSeek, o mercado começou a dar "seus pulos" para otimização de modelos. Ainda é incerto dizer se é realmente necessário usar cada vez mais hardware para processamento das informações ou algoritmos mais eficientes podem diminuir o uso excessivo de hardware. A falta de transparência no mercado também contribuí para uma incerteza do que realmente está (ou não) sendo implementado;
- Mudanças na contextualização da informações, como mencionei antes o contexto é importante e janelas de contexto curtas produzem resultados sem qualidade necessária. Elencar o contexto contexto da codebase, mais o contexto completo do chat ainda é um desafio que produz resultados incontroláveis. Por sorte, é outro desafio que o mercado já está tentando solucionar. As janelas de contexto estão cada vez maiores e algumas estratégias para lidar com contextos em diferentes fontes (arquivos do código-fonte, por exemplo) já estão sendo implementadas;
- Mudanças na aplicação da LLM e das IA em geral, com a adesão massiva do ChatGPT simplesmente adotamos que a melhor forma de interagir com as LLMs seja com o envio de contexto + prompt. É possível que essa não seja a melhor forma. Porém, sendo essa a melhor forma, criar micro-agentes especializados em micro-tarefas é um caminho que começou a ser explorado. Ainda é um interesse de mercado manter as LLM altamente generalistas (passar a imagem de que um único produto pode resolver tudo). Na prática, o que é fácil para um humano, ainda não é fácil para todas as LLMs disponível no mercado. Não atoa a AGI é tão aclamada;
- Mudanças no design de produto das LLM, para que os modelos decidam quando devem ter "incertezas" sobre alguma coisa e aguardar um feedback do usuário. Por um lado vejo que não é um interesse do mercado agora, todas as empresas querem que o seu modelo pareça o mais útil de todos e por outro lado "alucinação" é a essência básica dos transformers de uma LLM, sem ela o modelo perderia parte da capacidade de responder e resolver as demandas. Os estudos sobre isso ainda não estão avançados e, pelo menos por enquanto, ninguém sabe como fazer isso pois ainda mal se sabe como LLM funcionam internamente depois de treinados. Não é como se existisse uma base de conhecimento consultável dentro dos modelos.
O mercado de IA está avançando cada vez mais rápido, em um crescimento exponencial. Ainda não sabemos os limites, nem se as mudanças serão totalmente aplicáveis, quando serão aplicáveis e quais os custos envolvidos para aplicá-las.
Mesmo assim, acho que essa não é uma batalha sobre inteligência, mas sobre custos. E a grande verdade é que não sabemos até o momento o custo real desses modelos. As principais empresas hoje no mercado, principalmente a OpenAI, mantem tanto o código-fonte quanto os seus estudos fechados. A verdade é que ninguém garante que o o3-mini tenha um custo realmente barato ou se, dada a concorrência, a OpenAI decidiu absorver os custos. Esses custos se desdobram em muitos fatores, com em custos computacionais (energia, nuvem, hardwares especializados); custos de desenvolvimento (especialistas em IA, cientistas de dados) e custos de manutenção (atualização constante dos modelos, construção de agentes de IA). Tudo isso influencia o preço final que será repassado ao usuário que hoje certamente é suprimido.
O que posso dizer é que, atualmente, para você montar a equação ainda não é possível, tal como fazer um software de valor do zero (vamos tirar como produto dessa equação softwares triviais e API/s baseadas em CRUD). Mesmo que tente fazer agentes especializados para micro-tarefas, o custo ainda é maior do que contratar um desenvolvedor mid-level que já vai ter todas as atividades "integradas no seu cérebro".
Minha opinião é clara. Os custos com IA ainda são explosivos, mas, por razões óbvias, a galera está queimando dinheiro para criar uma dependência em massa e, em algum momento, vão repassar os custos. Será que esse custo ainda será mais econômico do que manter um ou mais desenvolvedores? Essa é a verdadeira questão que vai definir o rumo da carreira na área.
Tudo isso me leva a uma reflexão final para os que temem a IA. Quanto mais dependente você for hoje da IA, menos capacidade de resolver problemas você terá. Se você faz o trivial, sabe o trivial e se limita a isso preenchendo as lacunas que faltam com a terceirização completa do seu trabalho para as atuais LLM, nesse caso, é bom mesmo que você tenha medo.
Se você ainda está se desenvolvendo como profissional, recomendo que começa a adotar limites no uso. Tente resolver um problema antes de recorrer a IA. Evite copiar/colar sem entender o contexto do que está sendo feito. Tenha cuidado para não acreditar 100% do que está sendo entregue. Sempre valide o que está sendo entregue. Saber resolver problemas e propor soluções adequadas é o grande cerne da nossa profissão.
O mercado certamente vai aparar todos aqueles que entraram na profissão porque fizeram um cursinho aqui e outro lá. E o espaço vai ficar para aqueles que se destacam, tem experiência, formação completa e uma capacidade insuperável (por enquanto) de resolver problemas... até, quem sabe, a equação esteja completa.