Há poucos meses, Casey Muratori, um programador de jogos, abriu uma ampla polêmica no mundo do desenvolvimento de software. Como parte de seu curso sobre programação “orientada a desempenho”, Muratori publicou um vídeo aberto (seu curso é fechado apenas para assinantes) intitulado “Código limpo, desempenho horrível” (“Clean code, horrible performance”, em inglês). No vídeo, o engenheiro de software apresentou alguns exemplos de abordagens consideradas “boas práticas” por um amplo setor dos desenvolvedores, e demoliu um a um os argumentos de porque essas seriam boas abordagens demonstrando seu impacto sobre o desempenho dos programas em que elas resultam.
O vídeo ocasionou uma enxurrada de críticas nas redes sociais. Os defensores do “código limpo”, método ao programador Robert C. Martin, autor de livro homônimo, empunharam seus teclados e foram ao Twitter atacar Muratori como se fosse um herege, como se a sua posição fosse um consenso.
Não vou reproduzir aqui a discussão quase que unilateral, em grande medida dogmática. Um ponto interessante foi que Martin e Muratori tenham até se encontrado para debater e o proponente do código limpo mostrou-se muito mais flexível que seus fiéis seguidores. A discussão, porém, revelou o cerne do problema, de caráter metodológico.
O código limpo defende sua efetividade com argumentos como legibilidade e manutenibilidade do código-fonte. Se o primeiro é completamente subjetivo, o segundo é praticamente impossível de medir. Os mais religiosos abraçaram elevaram a ideologia ao ponto que discutem a “beleza” ou “elegância” do código-fonte.
O que sustenta, em parte, essa tese é que o “código-fonte é lido dez vezes mais do que é escrito”, então devemos otimizá-lo para maior legibilidade e simplicidade. O problema, porém, é que não há um consenso sobre o que seria um programa legível e simples.
Do lado dos proponentes do desempenho, porém, está algo concreto. Um programa bom é aquele que executa suas tarefas o mais rápido possível. É um programa não otimizado para os programadores que neles trabalharam – se é que isso é possível ou desejável -, mas otimizado para seus usuários. E se códigos-fonte são lidos muito mais vezes do que são escritos, os programas que geram são executados muitas e muitas mais vezes do que seus códigos-fonte são lidos.
O papel fundamental da tecnologia de ponta na economia moderna e, particularmente, do software elevou o programador a um patamar superior em relação aos demais trabalhadores assalariados. O prestígio (e, naturalmente, a compensação financeira) trouxe consigo uma ideologia que, na prática, os coloca acima dos próprios usuários dos sistemas que desenvolvem. Como se o código-fonte fosse um fim em si e o programa por ele gerado fosse um mero efeito colateral.
Muratori buscou trazer os desenvolvedores de software de volta ao mundo real. Um mundo onde o código-fonte é compilado por programas, transformado em instruções que serão executadas num processador, que interagirão com chips de memória e com dispositivos de armazenamento como discos rígidos. O mundo real deve ser considerado na elaboração dos programas para que eles cumpram de forma adequada suas tarefas. Sua tese é corroborada pelos próprios monopólios de tecnologia que, em inúmeras postagens em seus blogues de tecnologia, discorreram sobre a reescrita de seus sistemas para melhor desempenho argumentando que um menor tempo de resposta aumenta sua receita. Nada mais natural que um usuário satisfeito com o sistema que usa gere mais receita para seu fornecedor.
Podemos tecer críticas a alguns dos argumentos de Muratori, apresentados não no curto vídeo que deu início à polêmica, mas em outras palestras e artigos por ele escritos. Parece haver no autor um saudosismo, ou uma glorificação do trabalho, às vezes tediosos e repetitivo, de transformar um programa mal escrito, de baixo desempenho, num de qualidade superior. Esse trabalho pode e deve ser melhorado através da criação de melhores ferramentas de trabalho que orientem o programador. E não, não necessariamente falo dos geradores de texto como GPT, que já critiquei nesta coluna apontando-o como uma solução de força bruta para as limitações das ferramentas que nós programadores usamos. Isso para não mencionar como a “inteligência artificial” é uma máquina de reprodução dos erros mais absurdos cometidos por programadores.
De qualquer forma, como programador e como marxista, não posso deixar de admirar a abordagem materialista de Muratori. Também não há como não perceber a concretude de suas críticas quando processadores melhoraram seu desempenho uma ordem de magnitude nos últimos dez anos enquanto os programas que usamos estão estagnados quando não são ainda mais lentos. A decadência é visível, e é fruto do idealismo que se apoderou da nossa categoria privilegiada de profissionais.