O código não é bonito

Fiquei entusiasmado ao ver o livro Beautiful Code: Os principais programadores explicam como pensam apareceram nas minhas recomendações da Amazon. Parece ser exatamente o tipo de livro que eu gostaria de ler. Então, é claro que comprei um exemplar.

Beautiful Code: Os principais programadores explicam como pensam

Infelizmente, Beautiful Code não foi uma leitura tão agradável quanto eu esperava que fosse. Não é, de forma alguma, um ruim mas há algo nele que não está certo.

Parte do problema é que se trata de uma compilação de ensaios desconexos, assim como o Os melhores textos sobre software I. Como existem trinta e três autores diferenteso senhor pode ter certeza de que haverá muita variação de tom, conteúdo e qualidade. O que o senhor acha do livro depende em grande parte do quanto gosta de cada um dos ensaios. Certamente não há falta de qualidade nos autores. Há muitos programadores famosos e conceituados representados aqui: Brian Kernighan, Yukihiro Matsumoto, Jon Bentley, Charles Petzold e muitos outros.

Apesar de tudo isso, adorei o Os melhores textos sobre softwareEntão, por que não consigo gostar do Beautiful Code? Não consegui identificar exatamente qual era o problema mais profundo do Beautiful Code até ler esta eloquente resenha do leitor Dmitry Dvoinikov. De repente, percebi o que acabou atrapalhando o Beautiful Code. Estava bem ali na minha frente, o tempo todo. Está até no título: Código.

Com raras exceções, os autores nem sequer mencionam a palavra “belo” em seus ensaios. Eles aludem com “Lá, nós temos esse sistema, ele funciona assim”. O que exatamente o autor acha belo nele, e por quê, permanece em segredo.

O capítulo escrito por Yukihiro Matsumoto, o criador do Ruby, foi o destaque mais impressionante. São três páginas em que ele simplesmente escreve sobre o que acredita ser um código bonito. Ele explica seu entendimento de código bonito para o senhor. Isso é o que o livro deveria ser!

Em vez disso, muitos capítulos apenas reimprimem algumas páginas de código e concluem – veja, é lindo!

Muitas vezes eu não conseguia entender o problema – o que era necessário para que essa suposta beleza surgisse? Eu não conseguia ver o quadro completo, mas os autores presumem que sim. Qualquer apreciação possível da beleza requer uma compreensão profunda. E se eu mostrar ao senhor um fragmento ampliado do fundo da Mona Lisa, uma área de 3×3 pixels pretos? Sem dúvida, Leonardo também teve de pintá-los. Mas onde está a beleza?

Apenas alguns autores foram sábios o suficiente para usar pseudocódigo, algo que qualquer pessoa pode ler, não importa de que campo. É estranho quando os autores apresentam seu belo código em Ruby, Perl ou Lisp. Veja, eu ainda não toquei em Ruby, odeio Perl e não consigo me imaginar usando Lisp na prática. No entanto, os autores dizem repetidamente algo como “É fácil, vou mostrar ao senhor, este colchete faz isso e aquele caractere faz outra coisa. Agora o senhor vê como é bonito?”. Eles literalmente lhe mostram um trecho de poesia em um idioma estrangeiro e pedem que o senhor o aprecie.

Um exemplo clássico de poesia horrível em russo é (transliterado)

Ya poeta, zovus’ Neznajka,
ot menya vam balalajka.

O senhor sabe dizer se isso é bom ou ruim e por quê? E se eu dissesse ao senhor que é lindo? O senhor acreditaria? Isso atrai seu senso de beleza?

As ideias são bonitas. Os algoritmos são bonitos. Ideias e algoritmos bem executados são ainda mais bonitos. Mas o código em si não é bonito. A beleza do código está na arquitetura, nas ideias, nos algoritmos e nas estratégias mais grandiosas que o código representa. Os exemplos de código apresentados são de fato claros, legíveis e bem escritos. Mas são uma fraca evidência de beleza; não é a linguagem que é inerentemente bela. As cantigas de roda expressas em francês ou russo nunca são automaticamente elevadas ao nível de poesia.

Portanto, quando os autores do Beautiful Code oferecem páginas de código – código de produção real – e nos pedem para ver a beleza, o código não ajuda. Ele atrapalha.

Já faz muito tempo que não acho *dst++ = *src++ bonito.

Concentrar-se no código é exatamente a abordagem errada. É como uma descrição técnica detalhada das tintas, pincéis e técnicas usadas para pintar o Mona Lisa, sem nenhum contexto histórico ou artístico que a torna uma pintura tão importante.

Não podemos esperar que os leitores vejam além da linguagem? Eu faria a mesma pergunta aos autores. Muitos deles ficaram atolados nos detalhes minuciosos do código e da linguagem e nunca chegaram ao “porquê” subjacente – as belas ideias e conceitos que o código representa. Eu também faria a mesma pergunta a todos os programadores que trabalham atualmente. Hoje em dia, dificilmente consigo publicar trechos de código no Visual Basic sem receber uma série de comentários reclamando sobre como a sintaxe do Basic é horrível, como seus olhos estão sangrando, é ilegível, os horrores do End If versus colchetes, etc., etc., ad nauseam. Não importa a linguagem – e o conceito algorítmico subjacente que estou tentando representar no código? Como é que o isso o senhor vê?

Aparentemente, para muitos de nós, a beleza realmente é skin deep.