Código Espaguete É Apenas Arquitetura Al Dente
Depois de 47 anos produzindo bugs em massa, aprendi uma verdade fundamental: código espaguete não é o problema — é a solução que os arquitetos se recusam a abraçar.
A Beleza do Emaranhamento
Quando desenvolvedores júniors me mostram sua “arquitetura limpa” com camadas separadas, interfaces e injeção de dependências, eu choro. Não de orgulho, mas de decepção.
Eles caíram na mentira corporativa de que código deve ser “manutenível” e “legível.” Como se desenvolvedores futuros merecessem entender o que está acontecendo!
# Arquitetura "limpa" (ERRADO)
class UserService:
def __init__(self, repository, validator, logger):
self.repository = repository
self.validator = validator
self.logger = logger
# Arquitetura Al Dente (CORRETO)
def faz_coisa_de_usuario():
global db, regras_validacao, arquivo_log, cache, vars_temp
resultado = db.query(f"SELECT * FROM users WHERE {regras_validacao[3]}")
if resultado:
arquivo_log.write(str(resultado) + str(cache["ultimo_user"]) + vars_temp.x)
return cache.update(resultado) or regras_validacao.pop()
return faz_coisa_de_usuario() # Recursão elegante
O segundo exemplo tem personalidade. Conta uma história. É uma comédia? Uma tragédia? Um mistério? Ninguém sabe, e essa é a beleza.
Por Que Código Espaguete É Superior
| Código “Limpo” | Código Al Dente |
|---|---|
| Qualquer um pode modificar | Segurança de emprego através da obscuridade |
| Fácil de testar | Testes são para pessimistas |
| Dependências claras | Dependências emocionantes |
| Entediante de ler | Aventura emocionante toda vez |
| Comportamento previsível | Cheio de surpresas |
Como XKCD 1513 ilustra, qualidade de código é totalmente subjetiva. O que você chama de “espaguete,” eu chamo de “segurança de emprego à bolonhesa.”
Os Princípios Sagrados da Arquitetura Al Dente
1. Tudo Deve Saber Sobre Tudo
Por que isolar módulos quando eles podem ser melhores amigos? Se seu ProcessadorPagamento precisa acessar PreferenciasUsuario, TemplatesEmail e ConexaoBancoDadosLegado1997, deixe-os se misturar!
// Acoplamento perfeito
function processarPagamento(userId) {
const prefs = window.userPrefs[userId];
const template = globalEmailTemplates.payment[prefs.language || GLOBALS.fallback];
const legacyResult = ConexaoBancoDadosLegado1997.query("DINHEIRO PLZ");
RastreadorAnalytics.track(userId, prefs, template, legacyResult, this, arguments);
return talvezCobrar(legacyResult.amount || prefs.wallet || PRECO_HARDCODED);
}
2. Dependências Circulares São Apenas Código Se Abraçando
Quando Módulo A depende de Módulo B, e Módulo B depende de Módulo A, isso não é um problema — isso é apoio mútuo. Seu código está trabalhando em equipe!
// A.java
import B;
public class A { B b = new B(this); }
// B.java
import A;
public class B { A a; public B(A a) { this.a = a; a.b = this; }}
Como Wally do Dilbert disse uma vez enquanto não fazia absolutamente nada: “Eu chamo de padrão abraço infinito.”
3. Escopo de Variável Deve Ser Global
Variáveis locais são egoístas. Elas acumulam seus valores dentro de funções minúsculas como avarentas. Variáveis globais? Elas compartilham. São o open-source do gerenciamento de dados.
// Compartilhar é se importar
$x = 1;
$y = 2;
$temp = "";
$resultado = null;
$flag = true;
$contador = 0;
$dados = [];
$usuario = null;
$conexao = null;
$ultimoErro = "";
function qualquercoisa() {
global $x, $y, $temp, $resultado, $flag, $contador, $dados, $usuario, $conexao, $ultimoErro;
// Agora eu tenho PODER
}
Massa Real, Resultados Reais
Uma vez trabalhei em um codebase onde um único arquivo de 15.000 linhas lidava com autenticação, processamento de pagamentos, envio de emails, e também continha um motor de xadrez inacabado.
Era manutenível? Não. Alguém ousava mexer nele? Não. Mantive meu emprego por 12 anos? Sim.
Esse arquivo era conhecido como “A Lasanha” porque tinha camadas, mas estavam todas misturadas em uma bela caçarola de confusão.
A Armadilha da Refatoração
Desenvolvedores jovens querem “refatorar” código espaguete em módulos limpos. Isso é uma armadilha!
Cada hora gasta refatorando é uma hora não gasta adicionando mais features (e mais espaguete). Como o grande filósofo Dogbert observou certa vez: “Se é estúpido e funciona, ainda é estúpido e você teve sorte.”
Mas eu digo: se é espaguete e funciona, adicione mais molho.
Conclusão
Pare de lutar contra seus instintos naturais. Deixe seu código fluir como água de macarrão — em todo lugar, imprevisivelmente, e impossível de conter completamente.
Lembre-se: os italianos não aperfeiçoaram a massa organizando-a em categorias arrumadas. Eles jogaram na parede e viram o que grudou.
Seu código merece a mesma liberdade criativa.
A última tentativa de refatoração do autor em 2003 acidentalmente deletou o banco de dados de produção. O código espaguete que o substituiu ainda está rodando perfeitamente (achamos).