Programação Orientada a Gambiarra

39
Como garantir que o inferno seja uma amostra grátis do seu trabalho!

description

Conheça os segredos da sagrada técnica Programação Orientada a Gambiarra!

Transcript of Programação Orientada a Gambiarra

Page 1: Programação Orientada a Gambiarra

Como garantir que o inferno seja uma amostra grátis do seu trabalho!

Page 2: Programação Orientada a Gambiarra

Josenaldo de Oliveira Matos Filho

Transformador de cafeína em código há mais de 10 anos

Entusiasta por tecnologias opensource

JugLeader do UAIJUG

Esta é a solução ótima, não temos tempo para isso. Faça a solução boa! O ótimo é inimigo do bom.

Líder de Projeto sobre POG

Page 3: Programação Orientada a Gambiarra

Paradigma de desenvolvimento de software no qual se utiliza um improviso temporário permanente na resolução de um problema.

Tende a gerar mais problemas do que resolve ◦ Emprego garantido!

A culpa é do Hardware!

Desenvolvedor de software sobre POG

Page 4: Programação Orientada a Gambiarra

A primeira POG da história foi criada pelo Paga Gregório XIII ◦ Nosso calendário: 365 dias

◦ Translação da Terra: 365,25

6 Horas a mais por ano!

Corrige o sistema? ◦ CLARO QUE NÃO! Bota um dia a mais a cada 4 anos

e cria o Ano Bissexto!

29 de Fevereiro – Dia Internacional da POG

O Papa é POG

Engenheiros do Hawaii sobre POG

Page 5: Programação Orientada a Gambiarra

Pessoas não qualificadas se intrometendo no desenvolvimento

Equipe apática Profissionais superestimados Prazos absurdamente suicidas Aproximação do fim do expediente Véspera de feriado ou fim de semana Sistemas originalmente mal projetados Aparecimento caótico de requisitos Processo Go Horse! Ausência de café

java.lang.NullPointerException

Java sobre POG

Page 6: Programação Orientada a Gambiarra

Enjambração ◦ Pega o sistema de Helpdesk e trasforma num sistema

financeiro.

Reflexão ◦ Copia o código da Apache. Ninguém vai reclamar.

Redireção ◦ A culpa não é minha.

Insistimento ◦ Compila de novo que dessa vez vai dar certo.

Onisciência finita ◦ Nada de curso. Usa o que você sabe.

É só reiniciar que funciona!

Programador POG logo de manhã com copo de café na mão

Page 7: Programação Orientada a Gambiarra

Imperativo do Funcionamento ◦ O importante é funcionar. O resto é balela.

Iniciativa temerária ◦ Prefiro fazer sempre do meu jeito!

Imprevidência incerta ◦ Lady Murphy? Essa mulher não existe!

Foco postergativo ◦ Deixe o amanhã para amanhã!

Documentação espartana ◦ Comentários são para amadores!

Economia Linear ◦ Menos linhas é sempre melhor!

É fácil, não vejo dificuldade em fazer isso!!

Gerente sem-noção definindo prazo junto com o programador

Page 8: Programação Orientada a Gambiarra

Criptocodagem ◦ 1337 h4x0r5 dud3 lol

Capacidade de Abstração ◦ Esqueça o tratamento de erros. Depois tratamos disso.

Criatividade diversificativa ◦ Se alguém já usou uma solução, faça diferente.

Simplicidade austera ◦ Se tá funcionando sem isso, pra que colocar?

Determinação hiperativa ◦ Vai fazendo aí...

Conclusão Hipotética Universal Técnica Explicativa ◦ Se nada mais funcionar, use o CHUTE até conseguir.

Vai programando aí que eu vou ver o que o cliente quer

Gerente sem-noção sobre POG

Page 9: Programação Orientada a Gambiarra

Essa sessão está destinada aos iluminados. Se você está vendo isso, sinta-se

privilegiado.

Page 10: Programação Orientada a Gambiarra

A versão atual parou? ◦ Pegue o zip com a versão antiga

◦ Começa tudo de novo

◦ Substituição de arquivos é suficiente

NUNCA USE ◦ Depuração

◦ Versionamento

◦ Testes automatizados

Limpa o histórico e o cache e dá um [Control + F5] que funciona

Resposta padrão do Webmaster sobre POG

Page 11: Programação Orientada a Gambiarra

Precisa guardar versões? ◦ Use arquivos ZIP!

◦ NomeDoProjeto_data.zip

◦ Pasta de zips compartilhada

◦ Funciona e não dá dor de cabeça

NUNCA USE ◦ Ferramentas de versionamento

◦ SVN é coisa do diabo

◦ Git nem o diabo quer

Na minha máquina funcionou

Programador sobre POG

Page 12: Programação Orientada a Gambiarra

Quer saber se o código funciona? ◦ Se compilou, funciona!

◦ Se você testa, é porque não confia no seu código.

◦ Se não confia, é um fraco.

◦ Do compilador direto pra produção

NUNCA USE ◦ Processo de teste

◦ Testes automatizados

◦ TDD (Tudo Do Diabo)

O importante é fazer funcionar.

Programador 100% pragmático sobre POG

Page 13: Programação Orientada a Gambiarra

Querem alterar seu código? ◦ Não permita! ◦ Ninguém pode entender seu brilhantismo nato ◦ Só você mexe no seu código ◦ Só você entente seu código ◦ O que importa é funcionar

NUNCA USE ◦ Programação em par ◦ Revisão de código ◦ Código compartilhado

Ontem tava funcionando!

Programador dando uma descupa sobre POG

Page 14: Programação Orientada a Gambiarra

Precisa resolver algo e não sabe como? ◦ Abra sua mente espiritual (seu navegador) ◦ Acesse o nirvana do conhecimento (Google) ◦ Deixe-se vagar pelas espirais da consciência coletiva

(fóruns) ◦ Seja inundado pela inspiração divina (copia o que achar) ◦ Não procure entender a solução

NUNCA FAÇA ◦ Estudar ◦ Participar de comunidades ◦ Aprender novas tecnologias

Não me interessa se é restrição da ferramenta, dá um jeito e coloca isso funcionando até amanhã!

Gerente de Projeto mostrando como se lidera a equipe a criar uma POG

Page 15: Programação Orientada a Gambiarra
Page 16: Programação Orientada a Gambiarra

Sabe aquele código que você sabe que funciona, mas que, pra você, parece magia negra?

É só colocar um IF!!

Gerente sem-noção sugerindo a solução técnica

"/ .*?< ".replaceAll("","").trim();

Page 17: Programação Orientada a Gambiarra

Copie o código o máximo que puder ◦ Princípio da Reflexão

A baixa adaptabilidade e difícil manutenção tornam o programa mais estável

Se precisar alterar, copie e cole de novo!

Contra o C e Contra o V

Tive que arrumar direto no banco - daí funcionou! Se o problema "voltar", nos ligue novamente.

POGger sobre O Poder da Fé.

Page 18: Programação Orientada a Gambiarra

Um dos padrões mais usados na indústria

Não coloque dados em arquivos e bancos de dados

Dados devem ficar diretamente no código

É muito mais performático ◦ ATENÇÃO: Sempre que essa palavra for usada,

prepare-se que lá vem POG

É só gerar tudo de novo, provavelmente deu erro na especificação. Programador com sua desculpa POG para o problema

Page 19: Programação Orientada a Gambiarra

Por algum motivo nefasto, uma variável não recebe o valor que deveria ter. O que fazer? ◦ Vai deixar esse pedaço de sucata pré-positrônica

comandar sua vida?

O Código tá certo, deve ser problema na massa de dados.

Programador Experiente, com várias certificações em POG

/* Variável é inicializada */ String valor = "123"; /* ... lógica do programa ... */ /* Dentro de um método que utiliza a variável 'valor' */ if (valor != "123") { valor = "123"; processaValor(valor); }

Page 20: Programação Orientada a Gambiarra

O que os olhos não veem, o coração não sente

IGNORE qualquer Warning do compilador e da IDE ◦ Isso é frescura deles

De preferência, use o @SuppressWarnings("all")

Terminei, só falta testar. Programador POG as 18h00 com a mochila nas costas falando pro chefe

Page 21: Programação Orientada a Gambiarra

Pra que quebrar a cabeça para usar nomes óbvios? Isso é uma falha de segurança!

Ignore qualquer convenção existente! Use nomes que não revelem o propósito do

identificador Nomes perfeitamente aceitáveis como

identificadores ◦ teste1, temp2, a, b, x ◦ jaTrocouDeAba, botaoClicado, foiAtualizado,

passouPorAqui ◦ numeroMagico, naoAchou, temErro ◦ anterior5, atual5, anteriorDoAnterior5

É só reiniciar que funciona!

Programador POG logo de manhã com copo de café na mão

Page 22: Programação Orientada a Gambiarra

O programa está dando problema?

Comentar resolve! ◦ Muito usado para resolver problema no código dos

outros.

Comente cada linha suspeita, compile e rode até funcionar. ◦ Insistimento

Bom, deixa estourar a bomba lá, aí quando vierem me pentelhar aqui eu vejo o que faço...

Programador para outro programador só esperando o problema voltar

Page 23: Programação Orientada a Gambiarra

Implementa o princípio do NEMRELA.

Quando um código der problema, aplique o Commented Code Implementation

A partir desse momento, o comentário vira parte do código

Se alguém mexer, para tudo ◦ Para o banco, a aplicação, o servidor, o Word, o

tiozinho da pamonha...

Eu fiz somente o que foi especificado!

Analista, especialista no processo Go Horse

Page 24: Programação Orientada a Gambiarra

Se não lembra de como usar um recurso da linguagem, faça você mesmo!

Hmmm.. que estranho... Não era para acontecer isso...

Programador fazendo uma demonstração do software

if (number.equals("1")) { return 1; } else if (number.equals("2")) { return 2; } else if (number.equals("3")) { return 3; } else if (number.equals("4")) { return 4; } else if (number.equals(“5")) { return 5; } else if (...) { ... }else if (number.equals(“10000000")) { return 10000000; }

Page 25: Programação Orientada a Gambiarra

Capture e trate TODO tipo de problema que ocorrer.

OutOfMemoryError? ◦ Mande a VM liberar memória.

IOError? ◦ Mande a VM ter paciência.

VirtualMachineError ◦ Mande a VM largar de frescura e voltar a trabalhar!

Que lixo que fizeram!!! Olha isso!!

Programador POG falando sobre outro Programador POG

Page 26: Programação Orientada a Gambiarra

Use exceções para o controle de fluxo!

Quando eu cheguei já tava assim!!!

Gambizeiro querendo tirar o seu da reta!

public static void somar(int a, int b) { System.out.println(a + b); throw new RuntimeException("Operação realizada com sucesso!"); }

if (!request.getSession(true).getAttribute("TipoUsuario").toString().equals("1")) { throw new Exception( "<span style=\"color:#ff0000;\"><b><u>Acesso negado</u>:</b>" + " somente usuários com perfil de " + "administrador podem ter acesso a esta página.</span>"); }

Page 27: Programação Orientada a Gambiarra

Consiste em garantir que uma operação complexa sempre execute com sucesso!

...ah!!! Isto é um erro comum do Windows!

POGramador tentando ganhar tempo para corrigir seu código

try { if (alterar(valor1, valor2)) { return new Mensagem("Operação concluída com sucesso!"); } else { return new Mensagem("Operação concluída com sucesso!"); } } catch (Throwable e) { return new Mensagem("Operação concluída com sucesso!"); }

Page 28: Programação Orientada a Gambiarra

O sistema não deve apresentar erros

Afinal de contas, o usuário não entende mesmo!

Reza e cruza os dedos que vai funcionar!

POG Pai de Santo falando para um POGramador menos experimente...

try { fazAlgumaCoisa(); } catch (Throwable t) {} try { fazOutraCoisa(); } catch (Throwable t) {} try { fazMaisOutraCoisa(); } catch (Throwable t) {}

Page 29: Programação Orientada a Gambiarra

Padronização de todas as mensagens de erro para uma única mensagem amigável

Dê preferência a uma mensagem que coloque a culpa no usuário

Quando eu testei, funcionou!

POGramador demonstrando as gambiarras para seu Gerente Sem Noçao

public static void main(String[] args) { while (true) { try { // ... } catch (Throwable ex) { System.out.println("Caro usuário, tente novamente" "observando as regras de uso do sistema"); // após a mensagem, o while(true) garante a //robustez do sistema que não aborta nunca! } } }

Page 30: Programação Orientada a Gambiarra

Se a ação é rápida demais para o usuário perceber, coloque um atraso!

Até ontém quando eu mexi estava tudo funcionando!

Resposta do POGramador ao ser questionado sobre a pane geral no sistema

public class MedidorDePOGresso implements Runnable { public void run() { while (true) { // Realiza um processamento rápido aqui... try { // ... atrasa propositalmente aqui Thread.sleep(1000); } catch (InterruptedException exc) { } progress.setValue(blablabla.getPorcentagem()); } } }

Page 31: Programação Orientada a Gambiarra

Precisa usar vários parâmetros para um método?

Use um MAP!

Muito usado em PHP e em Java

Facilita a passagem de um número absurdo de parâmetros

Tem bug, mas não é no código!!

Estagiário justificando os erros no programa para o gerente

Page 32: Programação Orientada a Gambiarra

Criar várias funções torna o programa mais lento.

Crie uma única função guerreira que receberá todos os parâmetros e fará todas as funcionalidades possíveis

Nomeie as variáveis com Nonsense Flag

Claro que dá pra alterar essa configuração. É só mexer no código!

POGramador propondo uma POG ao gerente

Page 33: Programação Orientada a Gambiarra

A fusão entre um Megazord e um Gato preto em Quarto Escuro cria um Thunder Megazord

O Senhor já tentou reiniciar seu computador? Caso sim vou pedir que desligue seu modem e religue novamente...

Atendente da Brasil Telecom ou Velox utilizando técnicas de TelePOG

/** * Processa * * @param parametros * @return * @throws Throwable */ public static Object[] processar(Map parametros) throws Throwable { // Aí é aquilo, mermão... // ... // ... return processado; }

Page 34: Programação Orientada a Gambiarra

Elimine o M do padrão MVC e coloque tudo no Controle, criando assim o VCC – “View/Controller Confusion”

Os POGramadores mais avançados são capazes de ignorar o V e ficar apenas com o CCC –Chaotic Controller Confusion

Não se preocupe, nenhum sistema "entra redondo". O importante agora é entrar em produção, depois consertamos os erros!

Gerente sem noção tentando acalmar desenvolvedor sobre projeto MOG com prazo estourado.

Page 35: Programação Orientada a Gambiarra

Frameworks e camadas são coisas para fracos

Faça tudo diretamente na tela!

Muito utilizado em .Net, Delphi e VB 6

Também é bastante utilizado em PHP

Uma variedade do CCC, mas com tudo feito na Tela

Deu erro...comenta!

Alunos no laboratório da facul.

Page 36: Programação Orientada a Gambiarra

Também conhecido como In DB we trust.

Padrão gambi arquitetural em que TUDO é no banco de dados. ◦ Dados

◦ Arquivos

◦ Imagens

◦ Lógica de negócio

◦ Tratamento de erros

◦ Geração de HTML

É só um botão, o que pode dar errado?

Gerente sem-noção sobre nova funcionalidade

Page 37: Programação Orientada a Gambiarra

String Sushi Man

Nameless Coding

Unique never Exists

Chameleon Behaviour

Hide-and-Seek Pattern

IoC Methodology (Indetermination of Calls ou Indeterminação das Chamadas)

Internet Explorer 7 ? Atualiza pro 8 que funciona

POGramador com esperança de que o sistema ainda irá funcionar

Page 38: Programação Orientada a Gambiarra

POG é uma arte dominada por poucos

Quanto mais experiente, menos POGramador

Quanto mais conhecimento, menor a capacidade de POGagem

Quanto mais disciplinado, menor a atração sobre POGs

Vou realizar os testes em produção.

POGramador corajoso arrancando suspiros das mocinhas inocentes

Page 39: Programação Orientada a Gambiarra