Arquivo

Textos com Etiquetas ‘Pateta’

POG: Programação Orientada a Gambiarras

28 de março de 2010

Programação Orientada a Gambiarras, ou somente POG, é uma técnica avançada de desenvolvimento de software que tem como base a utilização de todo tipo de gambiarra, remendo e tudo de pior que um código pode ter. POG se baseia em conceitos como duplicação de código, fluxos redundantes, tarefas desnecessárias e reinvenção de rodas.

A primeira POG que se tem notícia é datado de 1582 d.C. O nome desta POG hoje é chamada de Ano Bissexto e foi criada pelo Papa Gregório XIII. Esta POG foi aplicada quando descoberto que a Terra leva 365,25 dias para dar uma volta no Sol, porém nosso calendário tem apenas 365 dias, o que leva a uma diferença de 6 horas por ano. Ao invés de corrigir o “sistema” para que não houvesse essa diferença, a solução adotada pelo Papa foi: “A cada quatro anos, é só colocar mais um dia ali”.

Acredita-se que a POG está presente desde os primórdios da criação de software. Alguns até dizem que ela já existia desde a época de cartões perfurados. POG mantém sua evolução ao longo do tempo, onde perdurou com a programação estruturada e atingiu seu ápice com o surgimento da orientação a objetos.

Se você não conhece POG e não está entendendo nada, leia esse artigo para entender melhor.

No meu primeiro post havia mencionado que iria mostrar alguns códigos POG que tenho encontrado durante esses 10 anos que trabalho com desenvolvimento de software. Relutei quase um ano para tocar no assunto, tentando até certo ponto preservar os autores dos códigos POG que encontrei pela frente.

Mas outro dia me deparei com um trecho de código que me serviu de motivação para publicar os exemplos de POG que tenho guardado. Era um código em C# de um método que retornava um valor booleano indicando se uma requisição HTTP teve uma resposta com sucesso:

private bool IsResponseOK()
{
    return this.response.StatusCode == 200 ? true : false;
}

Uma versão em Ruby seria assim:

def response_ok?
  @response.code == 200 ? true : false
end

Preciso uma motivação maior do que essa para publicar os códigos POG? É claro que não vou citar o nome de ninguém aqui, mas vou chamá-los carinhosamente de Patetas.

Meu próximo post mostrará uma técnica POG avançada de substituição de caracteres em uma string.

Observação importante

Não estou aqui dizendo que sou um programador perfeito, que não cometo erros ou que escrevo o código mais limpo do mundo. Com certeza eu já fiz alguma POG, seja por falta de conhecimento ou por falta de opção. O ponto aqui é aprender com os erros, os seus e os dos outros.

Por outro lado, eu me esforço para aprimorar a qualidade do meu código a cada dia. Isso se dá com a prática do dia-a-dia, trocando experiências com outros desenvolvedores, lendo o código dos outros, fazendo programação pareada e estudando e lendo muito. Também sei que sou detalhista, sistemático e até certo ponto chato em relação à qualidade de código. Um código ruim me incomoda, mesmo que esse código produza o que se espera dele.

Além disso, todo e qualquer código POG que eu venha a publicar aqui foi escrito por desenvolvedores experientes (ou que se diziam experientes). Achar defeitos em código de um programador iniciante ou um estagiário é fácil, publicá-los seria puramente sacanagem.

Segunda observação

No blog The Daily WTF, na seção CodeSOD (Code Snippet Of the Day), vários trechos de código POG são publicados periodicamente e seus leitores contribuem enviando suas experiências. Se você já teve contato com alguma POG de algum Pateta por aí e quiser compartilhá-lo, pode me mandar que eu o publico.

POG ,