Você está na página 1de 39

Como garantir que o inferno seja uma

amostra grátis do seu trabalho!


 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
 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
 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
 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
 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
 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
 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
Essa sessão está destinada aos iluminados.
Se você está vendo isso, sinta-se
privilegiado.
 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
 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
 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
 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
 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
 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
 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é.
 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
 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
 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
 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
 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
 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
 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
 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
 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!
 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
 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...
 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
 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
 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
 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
 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
 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.
 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.
 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
 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
 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

Você também pode gostar