domingo, 18 de janeiro de 2009

Programação Orientada à Gambiarra

O primeiro paradigma de computação (análise, projeto e programação) refere-se àquela computação feita como em Fortran, chamada de procedural. Houve um momento em que foi-se necessário introduzir um novo paradigma que se ajustasse melhor às modas: cria-se a programação orientada aos objetos, paradigma muito forte e que até hoje é usado.

No entanto, nem tudo que é forte dura pra sempre... Hoje, com aulas de computação cada vez mais complicadas e projetos cada vez mais complexos, há a necessidade de um novo paradigma. E é nesse sentido que surgem dois novos paradigmas... a Programação Orientada a Gambiarras (POG) e a Programaçao Orientada a Ponteiros (POP).

Desta segunda, não comentaremos nada. Atualmente, a POG é o paradigma mais utilizado, estando presente em gigantescas empresas, emissoras de TV (veja a figura anterior), etc.

A técnica da reflexão

Talvez uma das técnicas hoje mais usadas dentro daquilo que chamamos POG seja a técnica da reflexão. A filosofia, inclusive, pode ser confundida com os projetos open source, acarretando em problemas de autoria. Não se confunda: a técnica da reflexão trata-se da geração de uma imagem a partir de uma fonte. Entenda por fonte o código-fonte, e entenda por imagem o seu código-fonte.

A forma mais simples de realizar esta técnica é utilizando o arsenal que já vem em seu Sistema Operacional: CTRL+C para gerar a imagem e CTRL+V para focar a imagem [1].

A POG nos meios acadêmicos

Como hoje o mercado pede programadores POG, muitas universidades já criaram cursos específicos. Quer ver se você sabe programar em POG? Tente então responder à pergunta destacada na seguinte prova de Introdução à POG - I (clique para ver a imagem em tamanho real):


Antes de ver a resposta, que tal postar sua solução para o problema? A solução mais simples à moda POG ganhará um post dedicado à ela [2]. A resposta abaixo foi proposta pelo melhor aluno da sala e recebeu, como podem ver, 1.0 na questão. Provavelmente, o professor esperava ainda algo mais POG do que o aluno conseguiu fazer [3].


Em aulas de POGS, é muito comum alunos frustrados por não conseguirem atingir o nível que os professores requerem dos alunos.

A técnica de todas as certezas...

Por fim, o insistimento é a técnica mais vergonhosamente suja elaborada dentro da POG. Há aqueles que dizem que esta técnica nasceu junto com as primeiras edições do [4]; também há registros da utilização desta técnica antes. A técnica consiste na compilação de um código que apresenta erros mais de uma vez. Muitas vezes, o número de vezes que o código é recompilado pode chegar às centenas de vezes.

Programadores mais habituados com a técnica podem tentar reiniciar a máquina para continuar este processo; ainda o que exige mais perícia do programador, é procurar problemas no hardware da máquina.

Geralmente, quando as técnicas de insistimento falham (o que ocorre em torno de 33.7% das vezes), o programador é forçado à entrar na rotina de verificar seu código novamente.

Há alguns poucos experts que não desistem nesse estágio. Antes de verificar o próprio código, ainda podem tentar, não necessariamente nesta ordem, as seguintes abordagens:
  • Retirar alguns comentários do código por medo de eles bugarem alguma coisa.
  • Reinstalar o Sistema Operacional.
  • Dizer ao cliente que ainda está à procura de uma solução.
  • Buscar na internet um código para resolver o problema.
Estudiosos em POG dizem fazer também muito efeito começar pelo último passo: Buscar na internet um código para resolver o problema. Segundo pesquisas recentes, muitos usuários começam por este passo, mesmo antes de iniciar a rotina do insistimento.

Conclusão

Não adianta tentar fugir, o POG sempre estará presente, mesmo quando possamos não querer. Admita: você já usou a reflexão ou enjambração? E que tal insistimento? É muito difícil achar que nunca usou nem sequer uma dessas últimas três técnicas (ao menos sem saber).
Link
Como a desciclopédia não pode ser negada como participante da cultura nerd em geral, admitimos que aprendemos as noções aqui apresentadas neste artigo. E para testarmos nosso nível POG, aplicamos a reflexão em algumas de suas imagens.

Notas:
  • [1] Programadores que usam Emacs também podem usar estas técnicas, basta habilitar as teclas c-C para copiar e c-V para colar. Também há como utilizar outras teclas, mas aí perde a graça.
  • [2] Se, e só se, forem postadas mais de cinco tentativas, aí realmente podem esperar por um posts só sobre as tentativas!
  • [3] Veja aqui de nosso correspondente, Foca, tirou essa notícia para nós.
  • [4] Em , muitas vezes é necessário compilar o código mais de uma vez para que as referências cruzadas e as figuras sejam colocadas corretamente.




8 comentários:

Anônimo disse...

UAHAUHUAHUAAHAUHAA
É só ver as minhas gambiarradas nos projetos do Alcaraz.
Mas nada ganha do "Fantástico programa que calculava a idade do Universo" do Orlando.
Mandava você entrar com dados completamente nada a ver e em seguida dava um delay e mandava escrever na tela "A idade do Universo é aproximadamente 13,6 bilhões de anos"
Isso se seu computador não for religioso. Senão cai pra uns 5000

Rodrigo J. Fonseca disse...

Você se esqueceu de uma técnica muito poderosa na criação de programas, principalmente na escola, onde os programas são pequenos. É chamada de Programação Orientada à Compilação (OPC), bem parecida com a do insistimento.
Ela funciona assim: primeiro você escreve todo o seu programa, sem tomar cuidado com a lógica ou semântica, então você compila. O compilador, naturalmente, vai acusar vários erros e as linhas em que eles ocorrem. Você corrige os erros e compila novamente. Mais erros vão surgir durante a nova compilação. Novamente você corrige o código. E assim sucessivamente. O programa estará pronto quando você compilar e o compilador não acusar erro. Esse método também é muito eficaz se feito durante a criação do programa, você não precisa escrevê-lo todo primeiro, você pode compilar sempre que criar uma nova função ou adicionar algumas linhas.
Esse é o meu método favorito de trabalho quando programo em C usando Emacs e gcc (Linux rules!!!)
Infelizmente, muitos dos novos IDEs corrigem o código on-the-fly, tornando esta técnica obsoleta.

T disse...

Dei umas boas risadas com a resposta do cara. Muito bom o post.

Anônimo disse...

Verdade! Esse outro merece um post!

Anônimo disse...

é... impossível ler isso e não lembrar dos programas do Alcaraz, e das longas horas q passei compilando relatorios em LaTeX... quanto à resposta do cara: simplicidade e criatividade, meus caros! "A imaginação é mais importante que o conhecimento"!

Anônimo disse...

AhAUHAuHau
POG é algo fenomenal, não apenas para a proria info, mas para a vida do cidadão.
ter um pensamento de POGamador pode salvar suas vidas!

bom... eis a minha resposta para o deafio do POG:

inicio

escrever 'aperte enter para imprimir a sequência';
pausa;
escrever 'imprimindo.... aguarde....';
espera de tempo (20s);
escrever 'sequência impressa... por favor retire a folha da impressora';

fim

Rodrigo J. Fonseca disse...

Ah é, esqueci ma minha solução:
class Resposta {
public void main (String args[]){
System.out.println("a sequência de números de 1 a 100");
}
}

Garantido - ズ-ム disse...

Hahahaha olha a saida do kra, e ainda ele tirou a nota da questão! rsrsrsrsss

Em POG da pra fazer de varios jeitos inclusive aqueles que voce faz para parecer que a coisa é dificil (embromation) só para dizer que vc gastou tempo naquilo, por exemplo (pseudocodigo):

funcao Imprime1a100(int Num){
Se Num > 1 Então Imprime1a100(Num - 1)
Imprime Num
}

aí na chamada vc faz
Imprime1a100(100);
onde você pode trocar este 100 por uma constante a sua escolha como por exemplo _DEFAULT_NUMBER_HUNDRED