Início > Processo de Desenvolvimento, Programação > O Lado Sombrio do Código

O Lado Sombrio do Código

Código limpo, com baixo acoplamento e alta coesão são algumas das utopias no desenvolvimento de software. A realidade em qualquer projeto pode ser até um pouco sinistra. Você já foi assombrado por um código modificado por você ou alguém da mesma equipe em um momento de pressão? Essa assombração volta para nos importunar de tempos em tempos até que a exorcizemos. Às vezes ela é tão medonha que temos medo até de olhar, mas as gambiarras fazem parte de nosso cotidiano não apenas na engenharia de sofware. Em algum momento precisaremos lidar com elas.

O Problema da Esperteza

Segundo a Desciclopedia, uma das maiores fontes de desinformação da internet, uma gambiarra é:

Uma solução inteligente por tempo indeterminado para um problema aparentemente sem solução ou não previsto

A primeira gambiarra da história foi o ano bissexto, criado para ajustar o calendário gregoriano à translação da terra, que demora 365,2425 dias. Essa gordurinha de um quarto equivale a aproximadamente seis horas. É por isso que a cada quatro anos precisamos de um dia a mais para manter a equivalência.

Sempre que vejo ou ouço falar de uma gambiarra, me lembro do MacGyver, o astro da série de mesmo nome que foi exibida no Brasil entre meados dos anos 80 e início dos 90. Ninguém criava uma “solução inteligente” mais rápido que ele. Como toda pessoa super dotada, ele não era bom em apenas uma atividade, talvez por isso sua criatividade fosse tão singular. Ele era uma espécie de agente secreto com formação em Física – também foi piloto de corridas e jogador de hockey profissional – que não utilizava armas de fogo, mas era capaz de destruir um exército com apenas meio limão, um chiclete e seu canivete.

Me lembro de um episódio em que ele consertou o freio de um carro em movimento ladeira abaixo injetando fluído hidráulico na mangueira do fluído de freio. O Método MacGyver é utilizado por muita gente nos momentos em que se tem pouquíssimo tempo para solucionar um problema. Quem nunca passou fita isolante em um fio? Cansei de ver janela de carro quebrada tapada com saco plástico. Também não é difícil, principalmente na periferia, ver parachoques ou escapamentos de carros velhos amarrados com arame. Meu tio jurou que fez seu carro funcionar com pinga comprada em uma adega na estrada, mas ele não me contou quanto tempo depois o motor fundiu.

Mais cedo ou mais tarde, todos fazem uma gambiarra pequena ou grande, seja por pressão, falta de idéias melhores ou falta de capacidade técnica, mas seja qual for o motivo de sua origem, uma gambiarra deveria ser provisória.

Quando se pensa em fazer uma gambiarra, deve-se lembrar de um conto japonês milenar sobre o pavão e o urubu:

Em uma planície, viviam um urubu e um pavão. Certo dia, o pavão refletiu:

Sou a ave mais bonita do mundo animal, tenho uma plumagem colorida e exuberante, porém nem voar eu posso, de modo a mostrar minha beleza. Feliz é o urubu, que é livre para voar para onde o vento o levar’

O urubu, por sua vez , também refletia no alto de uma árvore:

Que infeliz ave sou eu, a mais feia de todo o reino animal e ainda tenho que voar e ser visto por todos, quem me dera ser belo e vistoso tal qual aquele pavão’

Foi quando ambas as aves tiveram uma brilhante idéia em comum e se juntaram para discorrer sobre ela: cruzar-se seria ótimo para ambos, gerando um descendente que voasse como o urubu e tivesse a graciosidade de um pavão. Então cruzaram e nasceu o peru, que é feio e não voa! Moral da história: se está ruim nem tente arrumar que piora!

Espero sinceramente que com a integração do JRockit e do Hotspot a Oracle não acabe criando um peru.

Programação Orientada a Gambiarras

A Programação Orientada a Gambiarras (POG ou WOP – Workaround Oriented Programming) é um paradigma de programação que se integra perfeitamente com qualquer outro grande paradigma de programação. A definição de um POG é muito parecida com a definição de gambiarra:

Aquilo que é de difícil concepção, de inesperada execução para tornar fácil o uso de algo que sequer deveria existir

Em uma busca rápida na Desciclopedia encontrei vários outros nomes para POG:

  • ATI (Aparato Técnico Improvisado)
  • ATND (Artifício Técnico Não Documentado)
  • CACA (Código Avançado Completo e Adaptável)
  • EE (Engenharia de Emergência)
  • PA (Programação Alternativa)
  • RTA (Recurso Técnico Avançado)
  • SAT (Solução Alternativa Tecnológica)
  • STC (Solução Técnica de Contorno)
  • TAPA (Técnica Alternativa de Programação Avançada)

O engraçado é que alguns dos artigos têm piadas dinâmicas no cabeçalho, como: “Mouse not found, click OK to continue” ou “Está tendo muitos problemas? Corte o mal pela /root!”. Bom, deixa pra lá.

Dentre os motivos que levam ao aparecimento de um POG, estão:

  • Não entendimento da necessidade dos clientes
  • Área comercial vendendo produtos imaginários ou inacabados
  • Janelas Quebradas
  • Falta de tempo
  • Término do estoque de café
  • Aproximação do final da tarde ou do final de semana
  • Etc.

Inspirado nos Designs Patterns, apareceram os Gambi Design Patterns, um catálogo mal estruturado de padrões de gambiarras, isso se for possível padronizar uma gambiarra. As características de um gambi pattern são:

  • Aplicável em qualquer contexto
  • Combinável com qualquer outro gambi pattern
  • Utilizável em qualquer paradigma de programação
  • Sua alteração sempre gera um novo gambi pattern
  • Não documentado
  • Não documentável
  • Ninguém assume sua autoria

Há alguns gambi patterns muito curiosos, como o Doubleton, Uso de Força Bruta, Mochileiro das Galáxias e Drible da Vaca. Conhece algum outro que queira compartilhar? Coloca .

Cheiro de Código

Um professor, na ocasião ocupando a função de arquiteto de software, me contou que o melhor desenvolvedor da sua equipe fez um código nojento em uma ocasião em que trabalhou noite a dentro para terminar uma funcionalidade. O arquiteto, discretamente, pediu que o desenvolvedor melhorasse a documentação daquela parte do código. O próprio desenvolvedor ficou surpreso – ou horrorizado – com o resultado de seu trabalho noturno e o refez.

Quando as gambiarras começam a se alastrar por uma parte do sistema e necessita-se de serviços oferecidos por esse “componente”, alguns espertos jogam um Facade em cima da bagunça e começam a olhar o código por um ponto único. Minimizaram o problema? Longe disso. Na verdade, colocaram uma máscara mortuária no código. Se levantar a máscara, nota-se o processo contínuo e cada vez mais acelerado de putrefação de código.

Se ocorrer uma NullPointerException, não há problema: basta colocar um “if” esperto. Isso resolve? Claro que não! Não podemos atacar um problema olhando apenas para seus efeitos colaterais. Precisamos descobrir as causas. No caso, por que a propriedade estava nula? Ela deveria estar nula naquela situação?

Com o tempo, começa a ficar difícil evoluir ou mesmo manter uma parte de um sistema orientado a gambiarras. Deve-se ficar atento a alguns indícios da existência de código ruim, como métodos longos, duplicação de código, classes longas, comandos switch e excesso de comentários inline. Quando o código começa a cheirar mal em virtude da podridão resultante do acúmulo de gambiarras, refactoring é a salvação. Refactoring é o processo de alterar a estrutura interna de um código sem que o comportamento externo seja mudado.

O catálogo de refactorings do Martin Fowler, por exemplo, têm muitas opções, como substituir número mágico por constante simbólica, substituir código de erro por exceção, e muitos outros. Para garantir que o comportamento de um código refatorado não seja alterado é necessária boa cobertura de testes.

Quando nos deparamos com uma gambiarra, nossa maturidade profissional direcionará nossa forma de conduta. Um profissional imaturo, mesmo que atue a vários anos na área, segue o fluxo abaixo:

Anúncios
  1. 20/06/2012 às 3:49 PM

    kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk muito bom!

  2. Fernando Franzini
    17/07/2012 às 1:21 PM

    hahahaha…me mata de vergonha isso!

  3. Rafael Sônego
    20/01/2016 às 4:56 PM

    Muito bom uhauhauhauhauhauh

  4. 20/01/2016 às 5:49 PM

    Valeu.

  1. 09/01/2011 às 9:30 PM
  2. 18/11/2012 às 8:38 AM
  3. 30/03/2015 às 7:13 PM
  4. 20/10/2015 às 6:50 AM
  5. 06/03/2016 às 7:26 AM
  6. 02/06/2017 às 1:05 PM

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: