Programador precisa ser bom em redação
Autor: Vinicius Assef | Publicado: 2012-07-27T14:19:00-03:00


Tenho visto que a característica que mais diferencia bons e maus programadores, no dia-a-dia, não é ser bom em lógica, nem aprender rápido. É ter a capacidade de transformar um raciocínio abstrato em código que funcione e seja entendido por outras pessoas.

Em outras palavras, é ter clareza de propósito, uma linha de raciocínio. É saber se expressar.

Programadores assim, normalmente, são bons palestrantes e escrevem em blogs. Quem os assiste ou os lê, entende o que eles querem dizer.

Mas existe o outro lado da moeda. Recentemente me envolvi num projeto já iniciado em Django e me deparei com a seguinte engrenagem, ao entrar numa URL p/ listar e filtrar uma relação de clientes:

Uma função da view é chamada.
Ela retorna um template HTML, que vamos chamar de HTML-A.
Ele extende o template HTML-B e insere um outro template, o HTML-C.
O HTML-A tem código javascript, bem como o HTML-B e o HTML-C também.
No javascript do HTML-C, existe uma chamada Ajax para uma função de um controller de uma outra aplicação.
Essa função do controller faz um certo trabalho, inclui dados que serão retornados ao HTML-C e passa o bastão para uma outra função.
Essa nova, por sua vez, também trabalha, adiciona dados de retorno e encadeia uma chamada a uma outra.
Essa última formata os dados e retorna, desfazendo a pilha, até voltar e popular o grid do HTML-C do item 2.

Complexo? Um pouco. Mas a confusão mesmo começou quando tentei juntar os pedaços e fazer uma manutenção na rotina. Acompanhe comigo:

Os títulos das colunas que aparecem no grid, bem como todas as configurações dele (altura, largura, etc.) estão no item 1 da lista acima. Ou seja, na view!
Os filtros são montados no item 6.
Os dados são efetivamente lidos no item 7.
Os mesmos dados são formatados, conforme o chamador, no item 8.
Nesses dados retornados, existem trechos de HTML hardcoded no item 8!
Esse HTML hardcoded é uma tag (um link) que aponta para uma URL definida na view do item 1.
A função do item 7 é importada de outra aplicação.
A do item 8 também.

Entendeu?

Bem, algumas pessoas podem dizer que isso é reutilização de código. É... é como se você estivesse reutilizando um trecho de bula de remédio, juntando com parte da Divina Comédia e do Hino à Bandeira e finalizando com o texto de uma questão da prova de matemática!

Ou seja, não faz o menor sentido. Tem muita coisa fora do lugar.

Eu disse que os nomes das funções e dos id's nem sempre retratam o que eles fazem? Isso pode parecer normal, mas quando não se tem nem uma letra dizendo aonde as coisas se encaixam, vê-se o caos.

Daí, eu fico pensando em como seria uma redação escrita por quem desenvolveu uma coisa assim. Alguém entenderia?

O Zen do Python define algumas diretrizes interessantes para programadores. Duas delas fazem o maior sentido nesse contexto:

"Complexo é melhor do que complicado".
"Se a implementação é difícil de explicar, é uma má ideia".

Com isso, reforço a minha tese que a melhor técnica para programar bem é redação e a primeira linguagem a se aprender é Português. A segunda, Inglês.

O resto, vem com o tempo e com a prática.