Posts de 02/2008

Overflow, a fronteira final

16/02/2008 - 3:28 AM - 29 pessoas não foram à escola.

Overflow

Certa vez minha irmã perguntou por quê não conseguia mais salvar suas fotos no computador. Como todo bom usuário final, ela ignorava as mensagens de erro que diziam que o disco estava lotado. Talvez ela imaginasse que os computadores são repositórios infinitos de informação, assim como a fantástica bolsa de espaço infinito de um jogo de RPG, que se for acidentalmente aberta dentro do mar, suga toda a água do planeta, mantendo, porém, o mesmo peso e aparência.

Se pudermos imaginar que o universo, em toda a sua infinidade ainda não mensurável, for um grande HD com espaço para zilhões de fotos de Carl Sagan em alta resolução salvas no formato BMP, teremos uma idéia aproximada do quão grande é a coisa. Agora vamos imaginar que o universo na verdade é um complexo programa que está sendo executado, ocupando toda a memória disponível do computador, tal qual um pesadíssimo jogo de última geração com vários efeitos visuais e compatível com poucas placas de vídeo. Nesse programa, nós seríamos meras instâncias da classe Humano, em busca de uma resposta para as eternas questões: Onde estamos? Quem somos? Quem vai ser o eliminado desse paredão?.

A persistência e a genialidade humana nos levariam aos confins do espaço, à soleira da porta do universo, na qual bateríamos três vezes e seríamos pessimamente atendidos por um velho barbudo resmungão, segurando um grande livro de algoritmos e estruturas de dados, que nos diria grosseiramente que se cruzássemos a fronteira, o universo inteiro teria de aumentar seu diâmetro para continuar nos contendo (já que querendo ou não, pertencemos a ele, estamos em seu escopo), e isso seria impossível. Nós falaríamos ao velho, com toda a nossa astúcia, perseverança e conhecimento reunido, perdido em guerras e reunido novamente, que o universo é dinâmico e se adapta ao seu conteúdo, assim como um vetor de caracteres dinâmico se expande para conter strings maiores. Esse argumento seria convincente o bastante para deixar o velho completamente absorto em questionamentos acerca da eficiência da alocação dinâmica de memória, assim nos deixando livres para trespassar os limites do universo.

Nesse exato instante, um programador em alguma dimensão paralela estaria procurando desesperadamente em seu código o problema que causou o desastroso overflow, e aplicando um tratamento de erros eficiente, que no caso, seria substituir o velhinho resmungão por um dragão feroz e sem interesse algum por estrutura de dados. Segundos antes, nós, os humanos, veríamos finalmente que do outro lado não havia nada de extraordinariamente especial ou esclarecedor, além de uma grande mensagem de erro, que no fim das contas foi ignorada, e todos se perguntaram se ainda daria tempo de chegar em casa para ver quem seria o eliminado da semana.

29 pessoas não foram à escola.

Esse seu jeito Bozo de ser

13/02/2008 - 0:54 AM - 34 pessoas não foram à escola.

Bozoconf

Esse é o Bozo. O melhor programador das redondezas.

Por falar em programação, 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 nenhuma, 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)…

E essa foi a primeira vez que encontrei o Bozo. É uma figuraça, realmente.

E vocês, nobras colegas programadores, já encontraram o Bozo por aí?

34 pessoas não foram à escola.

Live Search SP1

08/02/2008 - 15:26 PM - 17 pessoas não foram à escola.

Grandes marcas grandes nomes

17 pessoas não foram à escola.