Cortando para completar

November 8th, 2007 § 7 comments

Arrakis teaches the attitude of the knife–chopping off what’s incomplete and saying: “Now, it’s compete because it’s ended here”.

Collected Sayings of the Muad’Dib, by Princess Irulan

Há alguns anos atrás, um time de audaciosos programadores, entre os quais esse que lhes escreve estava, decidiu construir o CMS que acabaria com todos outros CMS.

Planos foram feitos, uma lista de discussão criada, modelos de dados desenhados, diagramas de classes descritos. Depois de muita conversa, muitas bebidas cheias de cafeína e aproximadamente dois meses de trabalho–que não envolveu, digo absolutamente envergonhado, qualquer código tangível–o projeto foi abandonado. A lista ainda existe e embora eu não tenha controle sobre a mesma, eu a visito de quando em quando, um memorial ao fato de que realmente não há balas de prata.

O projeto era por demais ambicioso e tentava generalizar o domínio do problema de uma maneira que tornava a sua implementação basicamente impossível. Falamos até em um microkernel a partir do qual toda interface seria implementada, algo suficientente flexível para permitir qualquer forma de abstração quanto ao que seria armazenado do mesmo. Hoje, eu só consigo pensar no Hurd quando essa parte do projeto me volta à mente.

O fato é que projetos do software são construídos em cima de concessões. E tentar generalizar desde o princípio é uma negação desse tipo de concessão que eventualmente transforma o projeto em um labirinto de dependências cada vez mais difíceis de ser resolver. Dreaming in Code, resenhado aqui anteriormente, é basicamente uma análise de como o projeto Chandler teve que ceder mais e mais até ter algo suficientemente simples para produzir.

Há algum tempo atrás, esse tipo de modularização maximizada era um objetivo em si no desenvolvimento. O paradigma parece ter se invertido completamente nos três últimos anos graças, sem dúvida, à influência de linguagens dinâmicas, e frameworks cuja modelagem é bem enxuta e uma crença geral–justificada pelos resultados melhores conferidos por essas crenças–de que menos é mais e pior é melhor.

Para mim, esse projeto foi uma lição. Hoje, sempre que eu escuto alguém faar que essa arquitetura ou aquela metodologia fornecerá uma solução completa e genérica para um determinado problema, eu já sei onde e como cortar.

§ 7 Responses to Cortando para completar"

  • Denniscs says:

    Foi mesmo uma boa lição. Me lembro bem desse período e desse projeto. Hoje em dia gosto do lema: “o problema só existe quando ele se apresenta”. Tenho sido até mais feliz desde então! hehehe

  • Muito interessante saber que outras pessoas já tiveram a mesma idéia e o mesmo problema.

    Apesar de nunca ter tentado realizar um projeto nesse naipe, já cheguei a esboçar algo nesse sentido, mas mesmo antes de tentar realizar eu já havia percebido que seria impossível, assim desisti.

    Hoje trabalho com o Drupal(um bom CMS), e algumas pessoas me perguntam se ele pode resolver qualquer demanda delas, e a minha resposta é sempre: depende. Se fosse em outra época talvez minha resposta fosse: com certeza; mas hoje é apenas um mero “depende”.

    Coisas que só o tempo para fazer a gente aprender. :-)

  • Ronaldo says:

    Dennis, pois é. :-) Podíamos arquivar a lista. Seria um pena ela desaparecer um dia e as discussões contaram com gente que hoje é ilustre. 😛

    Rafael, acho que isso funciona meio como um rito de passagem. :-) Você acredita que é facilmente possível e compreender porque não é tão simples é algo que faz você pensar além do que conhece no momento. E isso é muito proveitoso porque gera justamente essa experiência que você menciona abaixo, de saber dimensionar as coisas sem prometer algo que claramente vai ser impossível de entregar.

  • Disse tudo!

    O pior é que na própria faculdade eles nos ensinam que devemos passar por 3754 planejamentos antes de começar a programar de fato.

    Concordo que um mínimo de documentação sempre é legal, mas fazer todas notações UML (como diagrama de estados, sequencia, use case) para cada projeto web é lindo, mas utópico!

    Hoje também sou um seguidor do lema “menos é mais”, o Dennis sabe disso, rs.

  • Ronaldo says:

    Exatamente, Adriano. O pessoal ensina uma coisa, como se aquilo fosse completamente aplicável, e depois, quando o aluno cai no mundo real, acaba se decepcionando com as práticas e adotando hábitos ruins. Isso está mudando, mas ainda vai demorar um tempo até o pessoal do waterfall e RUP saírem da frente. :-)

  • Carlos Lenz says:

    Simplicidade é o caminho proposto pelo XP, por exemplo. You aren’t going to need it.
    Quem me dera ter estudado XP durante a graduação! Com mais profissionais talvez o mercado o adotasse mais. Enquanto isso continuamos com essa manada de elefantes brancos, metodologias baseadas em premissas pré-históricas (i.e., antes dos PCs).

  • Ronaldo says:

    Sim, YAGNI é um dos princípios que virou um mantra para mim. Antes sempre vinha a a vontade de generalizar e facilitar o reuso. No final, você percebe que reuso ainda é elusivo e existe limites práticos para tudo. Agora, realmente precisamos de uma reforma nas universidades nesse sentido.

Leave a Reply

Your email address will not be published. Required fields are marked *

What's this?

You are currently reading Cortando para completar at Superfície Reflexiva.

meta