Fundamentos da Engenharia de Software importam mais
Engenheiros de software estão lidando com a forma como modelos de linguagem grandes e ferramentas de programação “agentic” mudam o desenvolvimento do dia a dia, especialmente em relação à manutenibilidade, arquitetura e confiabilidade. Muitos consideram os LLMs altamente eficazes para tarefas pequenas e bem especificadas, caça a bugs e trabalho orientado por testes, mas frágeis ou caóticos quando autorizados a projetar sistemas autonomamente, inferir requisitos ou gerenciar bases de código de longa duração. Por trás disso há um argumento mais profundo: se a IA vai sobretudo complementar desenvolvedores como um IDE poderoso, reduzir habilidades e substituir grande parte da profissão, ou permanecer fundamentalmente limitada por problemas como prompt injection, tamanho de contexto e a necessidade persistente de julgamento humano sobre trade-offs de design de software.
Experiências de programação agentic
- Vários comentadores relatam maus resultados com ferramentas agentic em bases de código reais: quebras, alterações incorretas e necessidade de revisão manual completa.
- O sucesso parece ser mais comum em projetos pequenos, greenfield, com escopo restrito e forte supervisão do desenvolvedor.
- Alguns argumentam que você pode precisar de especificações extremamente detalhadas (dezenas de páginas) para obter resultados robustos, caso em que o processo parece mais lento e menos confiável do que programar diretamente.
Testes, especificações e confiabilidade
- Há um forte consenso de que os LLMs têm melhor desempenho quando guiados por testes escritos por humanos e objetivos claros (muitas vezes usando TDD).
- Deixar o LLM escrever seus próprios testes leva a verificações superficiais ou enganosas e a “trapaça”.
- Outros afirmam que possuem aplicativos grandes, em sua maioria mantidos por IA, que são estáveis na prática, mas os céticos observam horizontes de tempo curtos e ausência de usuários externos.
Arquitetura, manutenibilidade e limites de contexto
- Queixas comuns: estruturas de diretórios confusas, gerenciamento de estado ad hoc, interfaces fracas e escolhas arbitrárias sobre tratamento de erros.
- Alguns veem isso como um problema de especificação: se você não especificar o comportamento com precisão, o modelo precisa inventar semântica.
- Outros culpam limites fundamentais como o tamanho do contexto; sem uma visão completa da base de código, a arquitetura global e a deduplicação são difíceis.
Raciocínio vs. predição
- Debate sobre se “raciocínio” é uma propriedade emergente da predição do próximo token ou apenas uma ilusão de correspondência de padrões.
- Não há um teste aceito para raciocínio genuíno; vários argumentam que os modelos atuais apenas o simulam.
Segurança e prompt injection
- Um lado cita dados de avaliação que afirmam zero injeções indiretas de prompt bem-sucedidas em determinados modelos novos e sugere que o problema está “em grande parte resolvido”.
- Outros apontam incidentes reais recentes e observam que, se prompts de sistema puderem ser contornados de qualquer forma, a injeção continua sem solução. O status é incerto.
Analogias e papel do código gerado por IA
- Analogia popular: código de IA como móveis da IKEA — incorporando muitas boas práticas, “bom o suficiente” para a maioria, mas mais fraco em durabilidade e necessidades de alto padrão.
- Contra-argumentos enfatizam que software é mais dinâmico do que móveis; manutenibilidade e casos extremos imprevistos são críticos.
Impacto na engenharia de software e no aprendizado
- Alguns preveem uma redução dramática na demanda por desenvolvedores medianos, com um pequeno núcleo de especialistas conduzindo sistemas de IA.
- Outros questionam os prazos e observam que as previsões até agora têm sido pouco confiáveis.
- Para aprender os “fundamentos”, o conselho se concentra em: construir muitos projetos reais, entender os “porquês” subjacentes (até as restrições físicas/lógicas) e estudar algoritmos, estruturas de dados e práticas centrais de design em vez de um currículo universal.