Idiomas: English · Nederlands · Deutsch · Español · Français · Italiano · Português · Papiamentu · Frysk

Índice / Artigos / Vibe Coding

Vibe Coding

Sobre o poder e o perigo de programar com IA

Publicado
Atualizado
(criado )
Escrito por
Willem L. Middelkoop
Temas
AI · jogo · programação · trabalho
Versão humana deste artigo
https://willem.com/pt/2025-04-15_vibe-coding/
English
Vibe Coding
Nederlands
Vibe Coding
Deutsch
Vibe Coding
Español
Codificación Vibe
Français
Vibe coding
Italiano
Vibe Coding
Papiamentu
Vibe Coding
Frysk
Vibe Coding
Idiomas
Traduzido do original em inglês por um modelo de linguagem em duas passagens (tradução e revisão) com um glossário e um corretor ortográfico; ainda não revisto por um falante nativo.

Resumo

Com receitas acima de 48 mil dólares por mês, o simulador de voo de Pieter Levels desencadeou uma onda de inovação. Sem conhecimentos profundos de motores de jogos 3D, ele fez o jogo com 'vibe coding', usando IA. Os críticos apontaram problemas de segurança e escalabilidade, enquanto os apoiantes elogiaram o resultado impressionante. O que podemos aprender com isto?

Texto completo

Vibe Coding

O vibe coding é um método de programação orientado por IA em que descreves um problema em poucas frases, como prompt para um modelo de linguagem afinado para programação. O modelo gera o software e o papel do programador passa a ser guiar, testar e refinar o resultado. Os defensores dizem que isto permite a programadores principiantes criar programas sem muita formação nem competências de engenharia de software.

Pieter Levels criou o jogo fly.pieter.com. Nas redes sociais foi mostrando tudo em aberto: desde a ideia inicial até à publicação. Atraiu patrocinadores para anúncios dentro do jogo e vende melhorias premium (como aviões especiais), com receitas de milhares de dólares por mês.

Simulador de voo gerado por IA: fly.pieter.com
Simulador de voo gerado por IA: fly.pieter.com

O seu caso de sucesso levantou questões sobre o futuro da programação de jogos, ou até da programação em geral. Se um tipo com um portátil consegue criar um êxito destes, para que servem os estúdios de grande orçamento? Ou, ao contrário, o que aconteceria aos grandes estúdios se adotassem uma abordagem semelhante de 'vibe coding' na produção?

Experimentar eu próprio

Como já tenho alguma experiência a desenvolver um jogo (Snake 97, mais de 40 milhões de transferências), a história do Pieter inspirou-me a explorar a tecnologia 3D que ele usou: o ThreeJS. Fazer um jogo é difícil, e fazê-lo em 3D é ainda mais. A matemática que sustenta um mundo em três dimensões acrescenta um desafio enorme. Em muitos aspetos, não se parece nada com programas normais nem com jogos simples em duas dimensões. Embora já tivesse feito algumas experiências, achei a curva de aprendizagem da matemática 3D bastante íngreme. É aqui que a IA pode ajudar.

Visualização 3D de dados de treino
Visualização 3D de dados de treino

Na app Gran Fondo usei a IA para gerar uma apresentação tridimensional de uma atividade de corrida gravada. Formulei o meu objetivo em inglês simples e o modelo de IA gerou o código necessário para usar o ThreeJS e mostrar o meu treino num painel rotativo. Os primeiros resultados não foram bons, mas percebi o suficiente do que foi gerado para continuar a pedir refinamentos específicos. Algumas horas depois tinha algo de que gostava e, mais do que isso, senti que tinha aprendido imenso sobre a viabilidade do meu conceito inicial. A IA permitiu-me aprender mais depressa.

Arte conceptual do jogo de 2013: partículas de HDL na corrente sanguínea
Arte conceptual do jogo de 2013: partículas de HDL na corrente sanguínea

Decidi explorar outra ideia que tinha guardada há algum tempo: um jogo sobre partículas de colesterol mau e bom na corrente sanguínea de uma pessoa. Com aspetos de um jogo do estilo endless runner, achei que era uma boa escolha para experimentar mais, porque estes jogos têm níveis gerados por computador. Construir um gerador automático de níveis parecia algo em que a IA me poderia ajudar.

Aproveitando as novas capacidades 3D, achei que o jogo devia avançar para dentro das artérias, em vez do movimento lateral típico dos jogos 2D clássicos. Isto traz desafios como o clipping visual e gráficos distorcidos, porque a câmara fica fora da cena 3D. Outro desafio é a maior complexidade da deteção de colisões entre os elementos do jogo, um requisito para a mecânica de jogo. O código gerado pelo modelo de IA crescia a cada iteração.

Motor de jogo 3D em ação; repara nas falhas gráficas na parede da artéria
Motor de jogo 3D em ação; repara nas falhas gráficas na parede da artéria

Passadas umas 800 linhas de código, comecei a notar os limites do modelo de IA: começou a cometer erros e bugs que já tinha resolvido em iterações anteriores. Cada nova iteração trazia problemas novos e o modelo esquecia-se de refinamentos e correções que tinha aplicado antes. Isto deve-se aos limites da capacidade de contexto (tokens de entrada), que são importantes para o funcionamento dos grandes modelos de linguagem. Resumindo: não consegue lembrar-se de coisas suficientes para continuar a iterar sobre o todo de uma vez.

Paradoxo da produtividade: quando operar a máquina custa mais esforço do que vale o seu resultado
Paradoxo da produtividade: quando operar a máquina custa mais esforço do que vale o seu resultado

Deixei de desenvolver o motor de jogo com IA ao fim de alguns dias de experiências intensas. Cheguei a um ponto em que gastava mais esforço a gerir o modelo de IA do que no próprio motor de jogo. Concluí que seria melhor arranjar uns livros sobre as tecnologias, lê-los, tornar-me eu mais proficiente e depois construir o motor de jogo à mão. Quando as coisas se tornam complexas, o nosso cérebro humano parece capaz de se concentrar em partes específicas de uma tarefa complexa, respeitando o todo maior tal como ele é.

Sobre a loucura da "programação em linguagem natural"

Além dos limites do contexto que um modelo de IA consegue compreender, acho que há o problema da ambiguidade. Recomendo-te que leias o que escreveu Edsger Wybe Dijkstra, a refletir sobre a loucura da "programação em linguagem natural" no seu EWD667. Uma descrição sem ambiguidade, livre de pensamento confuso, é a base de um código fiável. No entanto, a nossa língua materna deixa demasiado espaço para todo o tipo de disparates e erros. Em vez disso, devemos dominar as nossas palavras, pensar com rigor e especificar com ousadia.

Uma linguagem formal, como uma linguagem de programação, um modelo matemático ou uma especificação exaustiva de entradas e saídas, pode ser uma ferramenta extraordinariamente eficaz para eliminar ambiguidades e erros. Resumindo: obténs o melhor resultado quando dás a melhor entrada.

Dar código à IA como prompt

Para testar se a IA me daria melhor código, decidi mudar a minha linguagem de pedido. Em vez de descrever o que queria em linguagem natural, carreguei um pedaço de código que escrevi antes, com características muito específicas:

  • o código vinha de um sistema em produção, por isso eu sabia que funcionava bem
  • o código continha várias instruções de tratamento de erros, o que o tornava mais robusto
  • o código não tinha erros de sintaxe e usava variáveis e funções com nomes lógicos
  • o código tinha um âmbito muito específico, com interfaces bem definidas para o mundo exterior

Além do código, pedi especificamente à IA que alterasse um aspeto particular do código em questão. Tinha de remover o uso de um certo programa externo (o módulo NodeJS 'lwip') e substituí-lo por outro programa externo (ImageMagick). Como tanto o lwip como o ImageMagick são código aberto, o modelo de IA conhece bem estes programas. Dei-lhe a receita perfeita para cozinhar.

O código que recebi da IA era uma substituição direta 99% perfeita do meu código. O código gerado tinha um bug que fazia com que alguns parâmetros não fossem escapados corretamente, provocando uma falha. Consegui detetar o erro e corrigi-lo à mão, porque me sentia totalmente à vontade e conhecedor no contexto deste software em concreto. Depois de mais alguns testes, decidi pôr o código gerado pela IA em produção, porque a nova biblioteca tinha um desempenho muito melhor do que a que substituiu.

Conclusão

O vibe coding com IA permite prototipagem e aprendizagem rápidas, como se viu no sucesso de Pieter Levels, mas falha em projetos complexos que exigem precisão. Levanta uma questão: a IA expande o nosso potencial ou limita-nos às suas restrições? A mestria combina o pensamento humano com o poder da IA. Reflete sobre o ofício: quando é que as ferramentas afiam a tua competência e quando é que a podem embotar?

Formatos legíveis por máquinas desta página