Programação Orientada a Gambiarra

277,149 views

Published on

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

Published in: Technology
89 Comments
616 Likes
Statistics
Notes
No Downloads
Views
Total views
277,149
On SlideShare
0
From Embeds
0
Number of Embeds
10,370
Actions
Shares
0
Downloads
3,009
Comments
89
Likes
616
Embeds 0
No embeds

No notes for slide

Programação Orientada a Gambiarra

  1. 1. Como garantir que o inferno seja uma amostra grátis do seu trabalho!
  2. 2.     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
  3. 3.  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
  4. 4.  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
  5. 5.           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
  6. 6.  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
  7. 7.  Imperativo do Funcionamento  Iniciativa temerária  Imprevidência incerta  Foco postergativo  Documentação espartana  Economia Linear ◦ O importante é funcionar. O resto é balela. ◦ Prefiro fazer sempre do meu jeito! ◦ Lady Murphy? Essa mulher não existe! ◦ Deixe o amanhã para amanhã! ◦ Comentários são para amadores! ◦ Menos linhas é sempre melhor! É fácil, não vejo dificuldade em fazer isso!! Gerente sem-noção definindo prazo junto com o programador
  8. 8.  Criptocodagem  Capacidade de Abstração  Criatividade diversificativa  Simplicidade austera  Determinação hiperativa  Conclusão Hipotética Universal Técnica Explicativa ◦ 1337 h4x0r5 dud3 lol ◦ Esqueça o tratamento de erros. Depois tratamos disso. ◦ Se alguém já usou uma solução, faça diferente. ◦ Se tá funcionando sem isso, pra que colocar? ◦ Vai fazendo aí... ◦ 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
  9. 9. Essa sessão está destinada aos iluminados. Se você está vendo isso, sinta-se privilegiado.
  10. 10.  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
  11. 11.  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
  12. 12.  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
  13. 13.  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
  14. 14.  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
  15. 15.  Sabe aquele código que você sabe que funciona, mas que, pra você, parece magia negra? "/ .*?< ".replaceAll("","").trim(); É só colocar um IF!! Gerente sem-noção sugerindo a solução técnica
  16. 16.  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é.
  17. 17.     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
  18. 18.  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? /* 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); } O Código tá certo, deve ser problema na massa de dados. Programador Experiente, com várias certificações em POG
  19. 19.   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
  20. 20.     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
  21. 21.   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
  22. 22.     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
  23. 23.  Se não lembra de como usar um recurso da linguagem, faça você mesmo! 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; } Hmmm.. que estranho... Não era para acontecer isso... Programador fazendo uma demonstração do software
  24. 24.   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
  25. 25.  Use exceções para o controle de fluxo! 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>"); } Quando eu cheguei já tava assim!!! Gambizeiro querendo tirar o seu da reta!
  26. 26.  Consiste em garantir que uma operação complexa sempre execute com sucesso! 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!"); } ...ah!!! Isto é um erro comum do Windows! POGramador tentando ganhar tempo para corrigir seu código
  27. 27.   O sistema não deve apresentar erros Afinal de contas, o usuário não entende mesmo! try { fazAlgumaCoisa(); } catch (Throwable t) {} try { fazOutraCoisa(); } catch (Throwable t) {} try { fazMaisOutraCoisa(); } catch (Throwable t) {} Reza e cruza os dedos que vai funcionar! POG Pai de Santo falando para um POGramador menos experimente...
  28. 28.   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 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! } } } Quando eu testei, funcionou! POGramador demonstrando as gambiarras para seu Gerente Sem Noçao
  29. 29.  Se a ação é rápida demais para o usuário perceber, coloque um atraso! 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()); } } } Até ontém quando eu mexi estava tudo funcionando! Resposta do POGramador ao ser questionado sobre a pane geral no sistema
  30. 30.     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
  31. 31.    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
  32. 32.  A fusão entre um Megazord e um Gato preto em Quarto Escuro cria um Thunder Megazord /** * Processa * * @param parametros * @return * @throws Throwable */ public static Object[] processar(Map parametros) throws Throwable { // Aí é aquilo, mermão... // ... // ... return processado; } 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
  33. 33.   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.
  34. 34.      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.
  35. 35.   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
  36. 36.       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
  37. 37.     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

×