Skip to main content

Vibe Coding

· 13 min read
David Puziol Prata
DevSecOps at @ dLocal

Se você já se viu preso no ciclo frustrante de alternar entre seu editor de código e uma aba do ChatGPT, você entende a principal limitação da IA generativa convencional. O processo de copiar, colar e adaptar um código gerado sem contexto não é apenas tedioso — ele é ineficiente e quebra o fluxo criativo do desenvolvimento. A IA, nesse modelo, é uma espectadora inteligente, mas nunca uma participante real do seu projeto.

É aqui que uma nova filosofia, batizada de "Vibe Coding", promete redefinir o paradigma. Trata-se de uma técnica de programação onde a interação com a IA acontece de forma nativa e contextual. O desenvolvedor descreve o resultado esperado em linguagem natural, e a inteligência artificial, imersa no código-fonte, gera as soluções diretamente, como um verdadeiro parceiro de programação.

Esta mudança transforma fundamentalmente o papel do desenvolvedor. Deixamos de ser apenas "escritores de código" para nos tornarmos "arquitetos de intenção" ou "diretores de orquestra". O foco migra da microgestão da sintaxe para a macrogestão da lógica, permitindo uma velocidade de prototipagem e experimentação antes inimaginável e acelerando o futuro da criação de software.

Mas será que isso dá mesmo certo? Se você não sabe nada de desenvolvimento de software e experimentar isso, vai me dizer que sim, mas será mesmo? Vamos fazer uma análise rápida antes da conclusão.

A Relação com o "Cursor"

O Cursor é um fork do VS Code. A equipe do Cursor pegou o código-fonte open source do Visual Studio Code (VS Code), que é mantido pela Microsoft, e criou uma versão modificada dele.

Muitos desenvolvedores já são muito familiarizados com VS Code o que facilita muito nova experiência com o Cursor.

  • Base familiar
  • Compatibilidade com Extensões
  • Foco em IA

Se você já teve alguma experiência no VS Code tentando usar extensões para adicionar uma IA, com certeza irá adorar o Cursor. Inclusive ao instalar o Cursor ele já te pergunta se quer importar todas suas configurações que já estão definidas no VS Code.

A experiência é notavelmente diferente, embora o Cursor seja construído sobre a base do VS Code. A principal diferença reside na profundidade e na forma como a inteligência artificial é integrada à experiência de desenvolvimento.

A conexão entre "vibe coding" e "Cursor" é direta e fundamental. Cursor é um editor de código projetado especificamente para facilitar e potencializar a prática do "vibe coding". Ele se autodenomina um "Editor de Código de IA" e integra funcionalidades de inteligência artificial diretamente em seu ambiente de desenvolvimento.

O que temos de melhorias usando o Cursor:

  • Consciência Total do Projeto (Codebase-Aware): Este é o principal diferencial. Antes de qualquer interação, o Cursor pode indexar todo o seu projeto, cada arquivo, dependência e definição de função. Quando você pede para refatorar um código, a IA não está vendo apenas aquele trecho isolado; ela sabe como essa mudança impactará em vários lugares. Isso resulta em refatorações muito mais inteligentes que consideram a arquitetura de software como um todo, e não apenas um arquivo.

  • Edição Conversacional e Imersiva (Inline AI): A interação não acontece primariamente em um painel de chat, mas diretamente no código. Ao selecionar um bloco, você abre um prompt no lugar do seu código. Você não está pedindo para gerar um novo código em outro lugar, você está mandando a IA esculpir e modificar o código existente em tempo real. A sensação é a de estar programando em dupla com a IA, moldando a lógica com comandos em linguagem natural, o que elimina a quebra de contexto do "copiar e colar".

  • Chat que "Lê" Seus Arquivos: Mesmo o painel de chat do Cursor é mais inteligente. Em vez de colar trechos de código para dar contexto, você pode simplesmente digitar @ e mencionar arquivos do seu projeto e a IA instantaneamente carrega aquele contexto completo para a conversa, permitindo que você faça perguntas muito mais complexas.

O Cursor é a ferramenta que operacionaliza o conceito de "vibe coding". Enquanto "vibe coding" é a metodologia ou a filosofia de desenvolvimento.

Codando com o Cursor

Para colocar o Cursor à prova, decidi embarcar em um projeto clássico: criar um jogo Tetris do zero, utilizando apenas a versão gratuita da ferramenta. Minha intenção era entender até onde a IA conseguiria me levar sem custos.

A Barreira do Plano Gratuito

Os primeiros 40 minutos foram uma mistura de produtividade e frustração. A IA inicial gerou a estrutura básica do projeto, separando o HTML, CSS e JavaScript. No entanto, à medida que a lógica se tornava mais complexa, o sistema começou a patinar. Chegou um momento em que a IA introduziu um bug e simplesmente não conseguia mais sair do lugar.

Por mais que eu explicasse o erro, apontasse a função problemática e sugerisse diferentes abordagens, as respostas eram repetitivas ou geravam novas falhas. A IA ficou presa em um loop, incapaz de resolver os problemas que ela mesma havia criado. Foi o limite claro do modelo de IA disponível no plano gratuito.

O Ponto de Virada: O Upgrade para a Conta Paga

Cansado de lutar contra a máquina, pois não queria colocar a mão no código, decidi fazer o upgrade para o plano Pro. E o resultado foi imediato. Bum! Na primeira tentativa, descrevi o mesmo problema que me travou por mais de meia hora. A resposta da IA paga foi diferente: ela não apenas encontrou o bug, como também explicou a causa raiz e aplicou a correção de forma precisa. A diferença na capacidade de raciocínio foi gritante.

Com o principal obstáculo resolvido, aproveitei para questionar a arquitetura do código. Inicialmente, a IA havia colocado toda a lógica do jogo em um único arquivo JavaScript. Ao pedir por melhorias, ela rapidamente sugeriu e implementou uma refatoração, separando o código em módulos mais organizados e coesos.

Aqui o Cursor já com uma melhoria de tema o Drácula.

alt text

E o nosso resultado simples, mas vale lembrar que não coloquei nem a mão no código.

alt text

Se não quiser passar raiva, é bom pagar, a experiência foi muito melhor.

Para desbloquear todo o potencial do Cursor, com acesso aos modelos de IA mais poderosos, existem dois caminhos principais: assinar o plano Pro do próprio editor ou configurar sua chave de API de um serviço que você já paga.

  • A Assinatura Cursor Pro (O Plano Integrado): Esta é a opção mais simples e, para a maioria dos desenvolvedores, a mais vantajosa. Por uma taxa fixa mensal (atualmente $20), você obtém acesso ilimitado e sem preocupações aos melhores modelos do mercado, como o GPT-4o e, crucialmente, o Claude 4. É a experiência "tudo incluído", ideal para quem usa a IA intensivamente e não quer se preocupar com o consumo de tokens.

  • Usando Sua Própria Chave de API (Bring Your Own Key - BYOK): Se você já possui créditos em plataformas como a da OpenAI ou Google AI, o Cursor permite que você insira sua chave de API e pague por uso (pay-as-you-go). Esta pode ser uma alternativa para quem usa a IA de forma muito esporádica.

Fica Esperto!

Com todo esse poder de geração de código ao alcance dos dedos, a tentação de acelerar sem olhar para os lados é grande. É aqui que entra a principal habilidade do desenvolvedor moderno: o ceticismo produtivo. Por isso, Fica Esperto!"

Simplesmente pedir o que se quer à IA e aceitar o resultado porque "parece funcionar" é uma armadilha perigosa para aplicações reais.

Para protótipos, provas de conceito ou scripts simples, essa velocidade é transformadora.

No entanto, quando a aplicação é real, crítica, com dados de clientes, requisitos de performance, segurança e um ciclo de vida de manutenção (SDLC) "codificar pela vibe" se torna perigoso. A IA generativa é um copiloto, não o piloto. E um copiloto só é útil se o piloto souber voar o avião, entender os instrumentos e for o responsável final pela segurança do voo.

A verdade é que, para usar o Cursor em desenvolvimento profissional, ou qualquer outro sistema com IA, é preciso ser ainda mais competente do que antes. A IA não diminui a necessidade de conhecimento; ela a amplifica. O foco apenas muda: de escrever código linha a linha para revisar, arquitetar e validar o código em um nível mais alto.

Domínio Profundo dos Fundamentos de Programação e da Linguagem

A IA pode gerar um código que funciona, mas que pode ser ineficiente, não idiomático ou simplesmente ruim. Sem um conhecimento sólido, você não saberá a diferença.

  • O que a IA fez?: Você precisa ser capaz de ler e entender cada linha de código que a IA gerou ou propôs alterar. Se você não consegue explicar por que a IA escolheu uma abordagem em vez de outra, você está trabalhando com uma "caixa-preta" de código.

  • Performance: A IA pode gerar um algoritmo com complexidade muito maior do que o necessário. Apenas um desenvolvedor com experiência de estruturas de dados e algoritmos pode identificar e corrigir isso.

    Um desenvolvedor pode pedir uma função para ver se uma lista tem duplicatas e receber isso.

    def tem_duplicatas_forca_bruta(lista):
    """
    Verifica se a lista contém duplicatas comparando cada elemento
    com todos os outros.
    """
    for i in range(len(lista)): # 2 Fors aqui.
    for j in range(i + 1, len(lista)):
    if lista[i] == lista[j]:
    return True # Encontrou uma duplicata!
    return False # Nenhum duplicata encontrada.

    Funcionar funciona, mas vamos fazer uma análise.

    • Para uma lista de 10 itens, ele faz cerca de 10×10=100 comparações.
    • Para uma lista de 1.000 itens, ele faz cerca de 1.000×1.000=1.000.000 comparações.
    • Para uma lista de 100.000 itens (comum em um e-commerce), ele faz 100.000×100.000=10.000.000.000 (10 bilhões) de comparações!

    Enquanto na verdade uma função assim seria muito mais performática.

    def tem_duplicatas_otimizado(lista):
    """
    Verifica se a lista contém duplicatas usando um conjunto (set)
    para ter uma busca quase instantânea.
    """
    itens_vistos = set() # Cria um conjunto vazio.
    for item in lista:
    if item in itens_vistos:
    return True # O item já foi visto, é uma duplicata!
    itens_vistos.add(item) # Adiciona o item ao conjunto de itens já vistos.
    return False # Nenhum duplicata encontrada.
    • Para uma lista de 10 itens, ele faz 10 operações.
    • Para uma lista de 1.000 itens, ele faz 1.000 operações.
    • Para uma lista de 100.000 itens, ele faz 100.000 operações.
  • Idiomas da Linguagem (Idiomatic Code): Uma IA pode escrever um código Python que parece Java, ou um JavaScript que ignora as melhores práticas do ES6. Isso melhorou bastante desde que você saiba pedir.

    Uma IA podería fazer isso.

    # Funciona, mas não é como se escreve em Python.
    # Parece uma tradução direta de Java/C++.
    frutas = ["maçã", "banana", "laranja"]
    i = 0
    while i < len(frutas):
    print(frutas[i])
    i += 1

    É verboso, exige o gerenciamento manual do índice i e há um pequeno risco de erros lógicos.

    Mas um desenvolvedor experiente faria isso, que é mais seguro e universalmente entendido por qualquer programador Python.

    # O jeito Python de fazer as coisas.
    # Direto, legível e seguro.
    frutas = ["maçã", "banana", "laranja"]
    for fruta in frutas:
    print(fruta)

Conhecimento Sólido de Arquitetura de Software e Design Patterns

A IA é excelente em tarefas táticas (criar uma função), mas limitada em decisões estratégicas (estruturar o sistema).

  • Visão Macro vs. Micro: Onde esse novo componente deve viver na arquitetura? Ele deve ser um serviço separado? Como ele se comunica com o resto do sistema? A IA não tem o contexto do negócio ou os objetivos de longo prazo para tomar essas decisões. Essa continua sendo uma responsabilidade puramente humana.

  • Aplicação de Princípios: Você precisa entender princípios como SOLID, DRY (Don't Repeat Yourself) e KISS (Keep It Simple, Stupid) para orientar a IA. Você pode pedir ao Cursor: "Refatore esta classe para seguir o Princípio de Responsabilidade Única", mas você precisa saber o que é esse princípio para validar se o resultado está correto.

Mentalidade de Segurança (Security Mindset)

Esta é talvez a área mais crítica. A IA é treinada com um vasto corpo de código da internet, que inclui inúmeros exemplos de código vulnerável.

  • Validação de Entradas: A IA pode esquecer de validar e sanitizar inputs do usuário, abrindo portas para ataques de SQL Injection ou Cross-Site Scripting (XSS).

  • Gerenciamento de Segredos: A IA pode acidentalmente sugerir que uma chave de API ou senha seja colocada diretamente no código. Um desenvolvedor experiente sabe que isso deve ser gerenciado através de variáveis de ambiente ou um serviço de segredos.

  • Escolha de dependências: A IA pode sugerir uma biblioteca por ser popular em seus dados de treino, sem saber que ela possui vulnerabilidades conhecidas (CVEs), está depreciada ou tem um mantenedor pouco confiável, introduzindo um risco de segurança em toda a cadeia de suprimentos de software

Habilidades de Debugging e Análise Crítica

Quando o código gerado pela IA falha, a responsabilidade de encontrar e consertar o bug é 100% sua.

  • Causa Raiz: Se você não entende o código, não consegue usar um debugger de forma eficaz para traçar a execução e encontrar a causa raiz do problema. Você ficará preso em um ciclo de tentativa e erro, pedindo à IA para "tentar consertar", sem um diagnóstico real.

  • Questionamento Ativo: A habilidade mais importante se torna a capacidade de questionar a IA. "Por que você usou essa biblioteca?", "Existe uma maneira mais performática de fazer isso?", "Qual o trade-off dessa abordagem?"


Conclusão: Assustado, Não Impressionado

Ao final desta experiência, a sensação predominante não é de impressão, mas de um certo receio. Fiquei assustado com a facilidade com que um desenvolvedor poderia cair na ilusão de produtividade, quando na verdade está apenas trocando uma tarefa (escrever código) por outra, ainda mais cara: a de ser um supervisor constante. Se somarmos o tempo gasto analisando código gerado, pedindo incontáveis refatorações, debugando lógicas obscuras e corrigindo decisões arquitetônicas ruins, a promessa de economia de tempo se desfaz.

Quando deixamos a IA muito autônoma perdemos completamente o controle, pois o projeto cresce exponencialmente em termos de complexidade e olhar para tudo isso fica insustentável vindo a conclusão de que "era melhor ter feito do zero para ter total controle e conhecimento". O tempo de debugar um código que não foi escrito por mim é muito maior. Eu preciso parar para analisar e entender a lógica, enquanto se eu tivesse feito eu já saberia do que se tratava.

Mas essa visão é incompleta. Sim, eu vejo um valor imenso em ferramentas como o Cursor, mas não como o responsável por "codar". O seu verdadeiro poder surge quando o enxergamos como um consultor onipresente: um parceiro que já leu todo o seu projeto, entende o contexto e está pronto para responder a uma pergunta ou sugerir uma melhoria sem que eu precise copiar e colar código em outra janela. O valor não está em delegar a tarefa, mas em eliminar a fricção para obter ajuda qualificada.

Para tarefas simples e me ajudar a debugar alguma coisa pode fazer sentido, mas deixar ele estruturar as coisas ainda tá bem longe.

Eu não entendi o termo Vibe. Isso pra mim parece mais um sofrimento do que uma Vibe. Vibe é pra ser feliz! Vibe coding é arruma sarna pra se coçar. Se um dia isso vingar de verdade teremos o famoso Prompter Engineer sendo contratado.

Kubernetes Cluster com K3s no Homelab

· 10 min read
David Puziol Prata
DevSecOps at @ dLocal

Chega uma hora que a gente enjoa de instalar o cluster Kubernetes com o Kind, até porque o Kind não foi feito pra ser um cluster permanente. Ele é ótimo pra testes locais, mas não escala, não atualiza fácil e não guarda estado entre reinstalações. Se você quiser subir uma nova versão do Kubernetes, tem que destruir tudo, reinstalar e restaurar os backups — uma baita dor de cabeça.

Quando queremos manter várias ferramentas rodando, testar integrações ou usar GitOps de verdade, o ideal é ter um cluster persistente, que você possa formatar o host se precisar, mas manter o cluster em pé ou reerguer ele rapidinho. Aí entra o K3s.

Ergonomia no Home Office

· 6 min read
David Puziol Prata
DevOps at @ Thoughworks

Uma das grandes vantagens do home office é a autonomia para montar o seu próprio ambiente de trabalho. No entanto, é importante fazer isso de forma que evite problemas de saúde, já que passaremos várias horas sentados, trabalhando e estudando na frente do computador.