freak’s blog

por Henrique C. Alves

Flexibilidade é tudo

com 2 comentários

Tenho notado um padrão recorrente, onde as coisas mais interessantes a ocorrer na área da computação são fruto da aplicação de uma pequena regra básica: flexibilidade. Softwares ideais, assim como idéias e pessoas, deveriam ser flexíveis o bastante para se moldarem e para neles se encaixar a realidade (e não o inverso). Primando pela flexibilidade desde o início, ao contrário do que se pode imaginar, as coisas ficam menos complexas, as idéias mais concisas e as decisões mais duradouras.

yahoo-flexible-keyboard.jpg

Recentemente tenho testado a linguagem Ruby, criada por Yukihiro Matsumoto (saudações Nihon!), e fiquei impressionado em como é flexível. Ruby conseguiu unir todos os pontos positivos de diversas outras linguagens adotando uma estratégia simples: tudo é um objeto. Como tudo é um objeto, desde o tipos mais básicos como um número (classe Fixnum) até um bloco de código (classe Proc), você pode manipular e misturar coisas a vontade, de forma tão natural que mais parece estar moldando a realidade com pequenos blocos de Lego. Tudo graças, apenas, a adoção de uma abordagem flexível.

m_c_escher_relatividade_lego.jpg

Mas deixa eu te contar um segredo: “orientação a objeto” é mais velho que sucrilhos Kelloggs. Se Ruby viu além, é porque estava sobre o ombro de gigantes. Antes mesmo do conceito de orientação à objeto chegar as linguagens, ele existiu em um sistema operacional, onde tudo também era um objeto: o UNIX, aquele sistema onde “tudo é um arquivo”, surgido no monte Olimpo, e que influenciou os sistemas mais inovadores de hoje, como Linux, Mac OS, QNX (usado em usinas nucleares, Windows nem pensar!) e Plan9 (mais uma vez a Bell Labs, estendendo o conceito de “tudo é um arquivo” ao máximo). E como o UNIX conseguiu ser tão parrudo assim, quase ganhando do Chuck Norris? Com o uso de Pipes, conceito criado por Douglas McIlroy. É um modelo tão flexível que tem dado certo por mais de 40 anos até agora. Ainda espero viver pra saber o que dura mais: a abordagem do UNIX, um fuzil AK-47 ou um Fusca.

O conceito de Pipe se baseia na idéia de pequenas caixas pretas (assim como objetos na programação), que podem ter suas entradas e saídas conectadas e redirecionadas de forma anônima (assim como métodos na programação), o que torna possível ter uma sequência de etapas de processamento de baixo acoplamento e grande coesão (mais uma vez, assim como na programação). Essa sequência de etapas forma o chamado pipeline, que seria equivalente a um programa, ou uma sequência completa do algoritmo do seu programa.

Ou seja, qualquer sistema cujo objetivo é processar informação, irá se beneficiar imensamente adotando uma abordagem flexível. Eu não sei como grande parte da indústria ainda não caiu na real e não começou a praticar Yoga e entoar “flexibilidade-hummmmmm” como se fosse um mantra em seus escritórios. Ao invés disso, insistem em engessar e proteger o maxímo possível suas plataformas com implementações imensamente complexas, duras, proprietárias. É quando elas não percebem grandes notáveis como Douglas McIlroy e Yukihiro Matsumoto passando, alterando tudo, e quando caem em si, já estão 10 anos atrasadas.

icnos010056.jpg

Se você quer um conselho para vencer e surpreender a todos, não só no âmbito do TI, mas para todos os aspectos da sua vida, aceite esse: seja flexível. Saber se articular ao invés de impor é uma habilidade recompensadora.

Escrito por Henrique C. Alves

15 Dezembro 2007 às 12:55 am

Publicado em Opinião, Programação

2 Respostas

Subscreva aos comentários comRSS.

  1. Nunca esquecendo que a flexibilidade é apenas uma das variáveis. Rails, por exemplo, não é o exemplo máximo de “flexibilidade”, pelo contrário. Ter defaults bem implementados pode diminuir a flexibilidade, mas se ganha em produtividade e em qualidade. O ideal é chegar ao Zen: o meio termo perfeito entre todas as necessidades…

    Juan

    3 Janeiro 2008 em 5:06 pm

  2. Juan:

    Rails é diferente. Rails é um framework, e seu objetivo é simplesmente aumentar a produtividade ao suprimir as etapas repetitivas e idênticas no desenvolvimento de sistemas que são muito parecidos.

    Frameworks (e ainda mais o Rails), por natureza, não são muito flexíveis pois já possuem uma carga cultural na resolução de problemas de quem os projetou.

    freakcode

    5 Janeiro 2008 em 6:45 pm


Deixe uma resposta