Esse seu jeito Bozo de ser

12 Aug 2007

Comecei minha carreira de "aprendiz de auxiliar de programador" há uns 2 anos, e logo nas primeiras semanas já tinha história para contar.

Recém-formado em desenvolvimento web, comecei no meu primeiro emprego como programador ASP, mantendo um pequeno sistema de notícias criado por ex-funcionários. Assim como qualquer sistema de notícias que se preze, este tinha um formulário de buscas. Havia quatro campos: Título, Data, Autor e Trecho da notícia. O cliente poderia buscar notícias do autor "Fulano da Silva" publicadas ontem, assim como todas as notícias de ontem, independente de autor. Ou seja, cada um dos campos que estivessem preenchidos seriam levados em conta na busca. Num belo dia, meu chefe pediu que eu adicionasse um campo extra neste formulário. Abri o arquivo e vi a maior demonstração de POG da minha vida, ao vivo e a cores RGB. Um exemplo digno de entrar para o hall da fama do Worst Than Failure.

Definitivamente Bozo havia passado por ali. Algo cheirava mal. O que devia ser um simples script que processava uma busca no sistema, era um extenso algoritmo que verificava todas as probabilidades de preenchimento do formulário e executava uma query SQL diferente para cada uma, resultando num arquivo com 800 linhas. Para ficar mais claro o que o código fazia, segue um exemplo:

O cliente busca uma notícia preenchendo o campo Título e o campo Autor. O sistema então começa:

Opa!
Primeira condição: O campo Título foi preenchido e todos os outros estão vazios? Humm...não.
Segunda condição: O campo Título e o campo Data foram preenchidos, e todos os outros estão vazios? É, também não.
Terceira condição: Os campos Título e Autor foram preenchidos e todos os outros estão vazios? Ah! Sim! Sim! Então posso concluir veementemente que o cliente deseja ver notícias cujo título seja Tal e o autor seja Fulano. Puxa vida, eu sou bom!!!

E assim seguia, verificando CADA uma das possibilidades. Num formulário com 4 campos, eram 24 = 16 combinações diferentes, incluindo o caso de nenhum campo ter sido preenchido. Veja bem, eram 16 condicionais e queries SQL, todas devidamente não-indentadas, contribuindo em 110% para o meu projeto de felicidade profissional. A adição de um novo campo, seguindo esse mesmo jeitinho Bozo de ser, aumentaria o código para 25 = 32 combinações diferentes. O dobro de código. 1600 linhas :D

Na época eu não tinha experiência, e não sei se hoje resolveria o problema da mesma forma, mas consegui realizar a façanha de reduzir o código para 200 linhas, simplesmente eliminando todos os condicionais e montando dinamicamente a query SQL, de acordo com os campos que estavam preenchidos. Assim pude facilmente adicionar o novo campo e falar orgulhosamente para meu chefe sobre a minha proeza (ele não entendeu a grandeza da coisa, claro). Tudo isso em apenas três dias de luta (ei, eu disse que era inexperiente), com várias outras tarefas para cumprir (estagiários nunca têm apenas uma coisa para fazer)...