Freigeben über


Sobre Chefes, Algoritmos e Pérolas

Num blog antigo comentei sobre estilos de arquitetura e, em particular, sobre o estilo barroco, onde o excesso é uma virtude. Isto também é real para algoritmos.

Uma vez fui chamado pelo presidente da empresa em que trabalhava para otimizar o tempo de processamento de uma análise financeira. O produto dava ao usuário uma espécie de planilha, como o Excel, em que várias fórmulas do usuário eram interpretadas, chamando queries do banco de dados, potencialmente, a cada fórmula. Com isto em mãos, os usuários podiam construir o planejamento do custo financeiro de seus projetos com dados reais de um ERP e valores futuros de moedas, juros, etc. Nesta ocasião alguns clientes reclamavam que o cálculo estava levando mais de uma hora e o pedido era simples: diminuir este tempo.

Como arquiteto, já estava com idéias de uso de cachê, queries feitas em batch e outras otimizações comuns neste cenário, quando dei início à engenharia reversa no código.

O código não estava ruim de todo. Engenharia reversa feita, comecei a planejar as mudanças quando o bom senso me fez rodar um profile antes de começar as modificações.

Com o relatório na mão, algo me assustou: a maior parte do tempo de execução estava numa única função: a concatenação de strings, uma função feita em casa.

Curioso, abri o código da função e o que eu vi foi algo interessante. Era uma função que chamava a si mesmo, recursivamente, em pelo menos em 3 ocasiões. Levei algum tempo analisando se havia algum truque. Por que não, simplesmente, criar um array com o tamanho da soma dos dois strings para depois copiá-los?

Desistindo de entender o porquê, criei a função correta e testei com uma planilha real. Resultado: cerca de 4 minutos para algo que antes levava 1 hora.

Com o resultado na mão fui ao presidente da empresa e anunciei o bom resultado. Quando me perguntou o que havia de errado, mostrei a ele a listagem da função e anunciei: o culpado era esta “pérola do barroco”!

Lembro que ele riu, mas um pouco sem graça. Desconfiado, fui investigar e descobri que ele tinha sido o autor desta pérola!

Moral 1) Pratique o profile antes de iniciar uma re-arquitetura;

Moral 2) Investigue quem fez a besteira antes de anunciá-la.

Abraços

Comments

  • Anonymous
    August 17, 2009
    The comment has been removed
  • Anonymous
    August 18, 2009
    E ainda existem os problemas da ética, das condições iniciais do projeto, de usos inesperados que certas rotinas adquirem, que às vezes, em razão do próprio sucesso, passam de uso raro para muito frequente, etc. Conciliar custo, qualidade e entregas no prazo, é sempre difícil. O consultor precisa evitar o termo "culpa".  Nesses casos, prefiro apenas identificar o problema e indicar a solução, sem juízo de valor.