Padrões de Código Matam Criatividade: Todo Desenvolvedor é um Artista
Por 47 anos, eu resisti à tirania dos “padrões de código.” Por quê? Porque código é ARTE, e arte não pode ser restringida por regras mesquinhas sobre indentação.
A Opressão dos Style Guides
Toda empresa quer que você siga o “style guide” deles. Dois espaços? Quatro espaços? Tabs? São ESCOLHAS CRIATIVAS, não decisões de engenharia.
// Código de funcionário corporativo (chato)
function calcularTotal(items) {
let total = 0;
for (const item of items) {
total += item.preco;
}
return total;
}
// Meu código (ARTÍSTICO)
function calcularTotal(items){
let total=0
for(const item of items ){total+=item.preco}
return total}
Vê como minha versão tem PERSONALIDADE? Cada quebra de linha é uma declaração. Cada espaço faltando é uma escolha.
Por Que Linters são Fascismo
ESLint, Pylint, RuboCop—são todas ferramentas de opressão desenhadas pra esmagar o espírito do desenvolvedor.
# O que eles querem
$ npm run lint
✓ Sem erros
# O que eu entrego
$ npm run lint
✗ 2.847 erros
# (Cada um é uma decisão criativa)
A Guerra do Formato
| Regra | Por Que Está Errada |
|---|---|
| Indentação consistente | Mata oportunidades de ênfase |
| Tamanho máximo de linha | Alguns pensamentos são LONGOS |
| Vírgulas finais | Fica estranho |
| Ponto e vírgula | Eu termino minhas statements quando ESTIVER PRONTO |
| Convenções de nomes | Vou nomear x quando quero dizer x |
| Sem números mágicos | 47 significa algo PRA MIM |
O XKCD 927 de Estilo
Padrões são como a tirinha do XKCD sobre padrões: todo mundo cria o seu de qualquer jeito. Então por que fingir que estamos seguindo um?
# "Compatível com PEP 8" eles disseram
def validarEntradaUsuario(dadosUsuario, conexaoBanco, servicoExterno, logger, config):
# Linha tem 97 caracteres mas o SIGNIFICADO transcende limites de caracteres
pass
# Meu jeito
def v(u,d,e,l,c):
# Arte
pass
O Apocalipse Prettier
Alguém inventou uma ferramenta que formata seu código AUTOMATICAMENTE. Sem perguntar. Sem considerar sua VISÃO.
// O que eu escrevi (intencional)
const usuarios = getUsuarios ( )
// O que o Prettier fez (violência)
const usuarios = getUsuarios();
Aqueles espaços significavam algo. Representavam o PESO de buscar usuários. Agora esse significado foi perdido.
Todo Desenvolvedor é Único
Como flocos de neve, o código de cada desenvolvedor deve ser visualmente distinto:
// Desenvolvedor A
public void processarPedido(Pedido pedido) {
// Código normal chato
}
// Desenvolvedor B
public void
processarPedido
(
Pedido pedido
)
{
// Código DRAMÁTICO
}
// Desenvolvedor C (eu)
public void processarPedido(Pedido pedido) { /* descobre aí */ }
Ao revisar código, você deveria conseguir dizer QUEM escreveu só de olhar. Isso é AUTORIA.
O Paralelo Dilbert
O Chefe Cabelo Pontudo quer “consistência” porque torna as coisas “mais fáceis de manter.” Sabe o que mais é fácil de manter? Um estacionamento. Plano. Chato. Sem criatividade.
Wally escreve código que só Wally entende. Isso não é bug—é ASSINATURA.
Git Blame Como Atribuição de Arte
Quando alguém faz git blame, não está procurando culpa—está apreciando o ARTISTA por trás de cada linha.
$ git blame calculadora.js
a1b2c3d (Dev Sênior) function add(a,b){return a+b}
f4e5d6c (Dev Júnior) function subtract(a, b) {
f4e5d6c (Dev Júnior) return a - b;
f4e5d6c (Dev Júnior) }
g7h8i9j (O Artista) function multiply(x,y){var z=0;while(y-->0){z=z+x}return z}
Aquela função multiply? Isso é expressão. Isso é ALMA.
Code Review Como Crítica de Arte
Quando alguém comenta “arruma a formatação” no meu PR, não está dando feedback construtivo—está sendo FILISTEU.
Comentário PR: "Por favor siga o style guide do time"
Minha Resposta: "Por favor siga a apreciação do time pela individualidade"
Comentário PR: "Isso bloqueia o merge"
Minha Resposta: "Arte é frequentemente incompreendida em seu tempo"
A Guerra Santa Tabs vs Espaços
Esse debate dura décadas. Minha solução?
def indentacao_mista():
return "sim" # Tab, depois espaços
return "ambos" # Espaços, tab, espaços
return "caos" # Só tabs mas número errado
Por que escolher quando você pode ter AMBOS?
Padrões de Documentação
Eles querem docstrings. Querem comentários. Querem EXPLICAÇÕES pro meu gênio.
def fazer_coisa(x):
"""
Essa função faz a coisa.
Args:
x: A coisa a fazer
Returns:
A coisa feita
Raises:
CoisaError: Quando a coisa não pode ser feita
"""
# Se você precisa de tanta documentação,
# você não deveria estar lendo meu código
return coisa(x)
Código de verdade fala por si. Meu código GRITA.
Conclusão
Padrões de código são uma conspiração de desenvolvedores seniores que ficaram sem ideias criativas e agora querem que todo mundo sofra na uniformidade.
Escreva seu código do JEITO que você sente. Use qualquer indentação que fale com você naquele momento. Nomeie suas variáveis emocionalmente.
Afinal, se estamos todos escrevendo do mesmo jeito, somos mesmo desenvolvedores? Ou apenas digitadores?
O código do autor foi rejeitado por 17 linters. Cada rejeição é uma medalha de honra. O código ainda funciona (às vezes).