Esse seu jeito Bozo de ser
13/02/2008 - 0:54 AM
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
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í?
Mantendo a retro-compatibilidade
- 02/08/08 - Live Search SP1
- 01/22/07 - Apenas um rapaz latino-americano
- 06/25/08 - Promoção BR-Linux, Wikipédia e Bozoscripts
- 09/01/07 - Devia ser feriado
- 08/29/07 - O Grande Loop











13/02/2008 às 1:09 am
Já encontrei o Bozo várias vezes, não era nem bem uma gambiarra, mas uma redundância de código, que poderia ter sido pelo substituída por uma função, reduzindo o código em digamos 90%. Isso deve acontecer mais com o pessoal que não tem costume com programação, aprendeu sozinho e tal =] o lado bom é que você se sente o programador =]
13/02/2008 às 1:31 am
Muito bom, não conhecia o Bozo pelo nome. Mas é claro que já tive contato com ele.
Lembro de um código que escrevi quando estava começando. Diz um ditado que iteração é humano, recursivo é divino. Pois é, estava usando uma letra como nome da variável de controle do loop. Começava pelo i (de iterar) e colocava a letra seguinte do alfabeto a cada laço dentro de um laço, isto é, a cada nível mais interno de iteração.
Desisti quando acabou o alfabeto, vi que era hora de fazer algo melhor pela vida.
13/02/2008 às 7:20 am
Pior que encontrar o Bozo é saber que vc era um bozo! Quem já não fez um algoritmo e depois e um tempo volta e não acredita no que fez. Um certa vez gostaria de buscar somente o penúltimo registro de uma tabela, fiz uma sql monstro para tal tarefa, depois de um tempo lendo um livro de sql me deparei com comando OFFSET e veio a luz “order by data DESC limit 1 OFFSET 1″, é soda.
13/02/2008 às 8:26 am
Começei igual a você Hehe, estagiário programando em ASP.
O que aconteceu comigo não foi bem uma gambiarra, mas uma falha de segurança gravíssima…
O antigo programador que começou o projeto web tinha feito uma biblioteca para manipular as principais funções que ele utilizava, inclusive conexão com o banco de dados (MSSQL), manipulação de strings, etc… Só tinha um problema, ele colocou tudo num arquivo .ini
Ou seja, qualquer retardado que chegasse no site e digitasse: /funcoes.ini tinha acesso a senha do banco de dados da empresa. Hehe
E o pior, ele geralmente comentava o código em html, algo como “funcoes.ini - funcao de conexão com o banco de dados”
Hehe
13/02/2008 às 9:36 am
O pior é que eu é que faço muita gambi. Uma vez fiz um joguinho - destes podrinhos, de “tabuleiro”, onde as peças deveriam cair, mas com o loop que eu fazia elas não caiam (Porque essa droga não cai?!!! ;-)). Aì o que eu fiz? Simplesmente coloquei um loop mais externo, que repetia tantas vezes (constante) o loop interno. Mas era algo muito tosco. “Se tá funcionando, tá OK”. Mas é claro que eu arrumei depois, eficou um código bacaninha, sem gambi
É claro que não era algo sério, tipo trabalho sério, mas foi engraçado rsrs
Ah, e é comum nos depararmos com coisas do tipo. Se a coisa tá funcionando, porque mexer? Não importa muito se futuramente alguém vai ler e tentar entender o código… Mas, por mais pior que seja o programador, não identar é brincadeira…
13/02/2008 às 11:03 am
Certamente. Atire a primeira pedra quem nunca encontrou o Bozo!
13/02/2008 às 11:03 am
Encontrei com o bozo em um momento…
if 1 < 2
…..
end if
juro que vi ja vi isso… outra coisa… como cacar o boso… abra codigo de fonte alheio e procure por gambiarra, pog, gambi, etc… vira e mexe voce acha um comentario referente ao mesmo…
13/02/2008 às 11:12 am
O pior as vezes nem é a gambi, é quando no código tem o comentário que eu encontrei
“//Não sei para que serve esse loop, mas se tirar para de funcionar!!”
13/02/2008 às 12:15 pm
Já vi o bozo sim. Ele renderizava uma tag select (html) várias vezes, assim: Se valor da variável x for igual ao valor da primeira option da select, renderiza a select inteira com o primeiro option selected … se x for o valor da segunda option, renderiza tudo com a segunda option checked … e por aí vai, ele repetia a select inteira pra cada option que tinha … o mais impressionante é que ele usava tags do struts (que faz tudo isso sozinho) pra fazer os ifs.
13/02/2008 às 12:51 pm
Interessante a história e o assunto. Você me pergunta se ja vimos o bozo, mas creio que no passado todos nós já fomos um. Eu particularmente, em meus tempos de Bozo, quando utilizava o Delphi (a maior ferramenta de POG), cada formulário possuia no MÍNIMO 3000~4000 linhas, hoje em dia eles não possuem nem 1000 linhas e grande parte do código era consultas SQL assim como o seu caso.
Se fossemos dividir o nível de programação, eu diria que um dos mais baixos seria o Bozo e o mais alto…bem..eu iria dizer Chuck Norris mas ninguém consegue chegar a este nível. Creio que todo mundo algum dia já foi um Bozo. Esta tirinha foi uma das mais interessantes que já vi até hoje.
13/02/2008 às 1:02 pm
uhaehuaeuhae caaara, nem eu quando comecei faria isso xD Eu comecei com PHP ^^
13/02/2008 às 1:04 pm
Meu primeiro trampo como estagiário foi fazer uns 15 relatórios, cada um deles tinha sua proc. Um dos relatórios de chamava Saldo por Participante Analitico e eu mandei ver no nome da proc SALDO_PARTIC_ANAL
Até hoje está em produção…
13/02/2008 às 1:53 pm
@Edgard
Sim, com certeza, todos nós já fomos Bozos
A maioria das vezes foi nos trabalhos de faculdade.
O jogo Anacroz Tactics também tem muitas pegadas do Bozo =P
13/02/2008 às 2:57 pm
A Bozidade é onipresente… já tive que resolver problemas bozóticos e já dei umas gambiarradas também.
A gente vai escalando de Bozo a Donald Knuth(porque Chuck Norris não dá, certo, Edgard?:D)
13/02/2008 às 5:32 pm
Mes passado, incluindo um novo modelo de historico em uma tela(ja existiam 27 outros modelos) encontrei com a seguinte situacao. 27 IFS ¬¬. Olhei pro lado e perguntei quem foi o maldido que fez esse bando de if e pq ate hj ngm tinha colocado um CASE ali.
13/02/2008 às 11:44 pm
Já vi o bozo.. já fui o bozo..
Eu poderia montar uma trupe, um circo.. Aliás, poderia abrir uma franquia eu acho… Hehhee
14/02/2008 às 12:08 am
Uma franquia não… mas quem sabe um sistema operacional padrão para um certo SO bastante conhecido. :rolleyes:
Post genial! E não tem como negar o passado POGador…
14/02/2008 às 8:49 am
Æ!!
Trabalho com ASP tambem e já vi muitas Bozidades no sistema em que trabalho…
Certa vez eu fui ver nossa tela de produtos ( estava com problema de lentidão ) e percebi que tinha um select para trazer os produtos e outro select para trazer as características do produto dentro do laço…Ou seja…Para cada produto tinha uma consulta no banco de dados…¬¬…Mais de 500 consultas…
Há momentos que as Bozidades são a única solução…Por menos que você goste de usá-las…hehehehe…Dependendo de como o negógio foi feito você teria de refazê-lo para fazer algo decente…
Lembro de quando fiz um projetinho em C…hehehe…era motido a “go to” com “copy paste” o tempo todo…MInha época de Bozo…heheheh
Há braços
14/02/2008 às 9:24 am
Olha o Bozo denovo!!
14/02/2008 às 9:25 am
<?php
if($idioma!=”pt”){
include_once(”main/home/home_idioma.php”);
}else{
include_once(’../_class/class.Noticias.php’);
include_once(’../_class/class.Galeria.php’);
?>
<?}?gt;
14/02/2008 às 3:10 pm
Hum… todo mundo já foi Bozo um dia. Programar em BASIC era como ser um Bozo profissional. Pelo menos era o que eu pensava… mas tem pessoas que dedicam a sua vida a isso e eles se atraem.
É comum você encontrar o Bozo, o Papai Papudo, a Bozolina e por aí vai. Esse povo leva POG muito a sério, levam isso a níveis dificilmente imagináveis. Acho que nem com a libchuck você arruma o que esses caras fazem. O mais incrível é que eles ganham bem… wOOt!
14/02/2008 às 3:14 pm
MEU DEUS! O BOZO PASSOU POR AQUI!
Estou dando manutenção em um sistema que foi programado por um bozo. Pra terem idéia, existe uma classe chamada Frame (sim, esse é o nome…. bem significativo, não?) que implementa 3 TELAS e possui nada menos que 960 VARIÁVEIS DE INSTANCIA!!! Será que Bozo já ouviu falar em Acoplamento Fraco e Coesão alta?
15/02/2008 às 11:47 pm
Eu convivo com o Bozo diariamente, me sensibilizo por ele, e dou todo meu apoio à essa figura, afinal …Recursão é pra fracos, e viva o if aninhado!
hehehe
16/02/2008 às 2:04 pm
Olha que vou querer o source do jogo heim
16/02/2008 às 3:00 pm
O primeiro não é open-source. O segundo será
17/02/2008 às 2:39 am
Deveria virar uma lei de murphy… Sempre que você pegar ou precisar de um código de outra pessoa, esse código era de bozo…
19/02/2008 às 1:45 pm
O bozo? Encontrei ele MUITO! E já fui bozo também!
Por isso desisti de trabalhar no virtuoso campo da programação. 95% da minha vida de programador posso dizer que o Bozo me perseguia. Era cada POG que tu não sabia como o negócio funcionava. 3% dela era fazendo POG. E finalmente os outros 2% (já em fim de carreira) foi tentando entender pq o Bozo estava presente.
21/02/2008 às 3:20 pm
300 linhas de em cada um dos 50 htmls do site.
É de tirar as calça e pisotear… ahsiuehauioseh
22/02/2008 às 9:34 am
Sempre, em programação, trabalhei com ASP. No início da minha carreira, com certeza, só faltava o nariz do Bozo. Mas depois, quando amadurecemos, começamos a ver coisas bisonhas.
Tipo:
O programador queria montar a hora sempre no formato hh:mm, só que, no banco de dados, a hora pode vir 9:9. Então, o abençoado fez essa lógica:
minuto = minute(rs(”data_log”))
if minuto=1 or minuto=2…or minuto=9 then
minuto = “0″ & minuto
end if, que foi substituído por
minuto=right(”0″&minuto,2), muito mais rápido e elegante.
Essa mesma página era muuuuuuito lenta, era página de consulta de log de atividades. Um dia, fui fazer uma manutenção nessa página e pus pra retornar os 20 últimos registros de cara e os campos para pesquisa. A lentidão continua. Foi olhar com mais cuidado o código e achei uma consulta assim:
sql = “select * from log_usuario”
set rs = Conn.Execute(sql)
Até não estaria errada, se não fosse o fato de trazer todas as ocorrências do usuário e dependentes (alguns usuários tinhas mais de 2 anos de uso do sistema…) e não fazia nada, nada mesmo, além de deixar a consulta lenta. Tirei esse maldito recordset e, pronto, a pagina, que levava em média 20 segundos pra carregar só na primeira consulta, passou a levar 1 a 2 segundos só com os 20 últimos registros…
28/02/2008 às 3:26 am
Olha, nao sei como foi sua solucao, mas conhecendo ASP e estagiarios, acredito que existe uma possibilidade muito grande de existir uma forma de zuar o seu SQL dinamico atraves SQL Injection.
hahahahah
28/02/2008 às 11:29 am
Não lembro exatamente do código, mas pior que era completamente vulnerável a SQL Injection mesmo
12/03/2008 às 9:30 am
[...] Corrigi meu erro de digitação, estava aprobos, deve ser influência subliminar do bozo. nerdson.com [...]
11/04/2008 às 4:42 pm
vlw pela dik dos emoticons e eh claru q o amigoogle n/ eh emo…nao tem akela franjinha delis lah…KKK
vc eh mto gent boa
XD

26/06/2008 às 9:05 pm
Trabalho com um bozo. E o pior, ele trabalha em casa e me manda as gambi pra eu integrar no sistema. Ou seja… minha vida é um refactoring!!!
“Always code as if the person who will maintain your code is a maniac serial killer that knows where you live”