A Filosofia do Ruby

20 de janeiro de 2010  |  Ruby, Traduções  | 

Já faz um tempo que eu tenho planejado traduzir essa excelente entrevista de Bill Venners com Yukihiro Matsumoto. Finalmente conseguir finalizar a primeira parte.

Yukihiro Matsumoto

Yukihiro Matsumoto, ou “Matz” como ele é conhecido online, é o criador da linguagem de programação Ruby. Ruby é uma linguagem orientada a objetos adequada tanto para a escrita de scripts do dia a dia como de aplicativos de larga escala. Matz começou a trabalhar no Ruby em 1993, porque queria uma linguagem que o tornasse mais produtivo ao mesmo tempo que fosse divertida de usar. Embora inicialmente tenha se tornado mais popular no Japão, Ruby tem conquistado programadores no mundo todo.

Em 24 de setembro de 2003, Bill Venners se encontrou com Yukihiro Matsumoto na conferência JAOO em Aarhus, na Dinamarca. Nesta entrevista, que foi publicada em várias partes no site Artima.com, Yukihiro Matsumoto discute a filosofia por trás da arquitetura do Ruby, as características da linguagem e como tornar-se um programador melhor. Neste capítulo inicial, Matz filosofa sobre a imperfeição no design, o perigo da ortogonalidade, a concessão de liberdade com regras, o princípio da menor surpresa e a importância do ser humano no trabalho da máquina.

Não existe uma linguagem perfeita

Bill Venners: Dave Thomas, co-autor do livro “Programming Ruby: A Pragmatic Programmer’s Guide” me disse que você não acredita que uma linguagem de programação possa deve ser perfeita. Por que não?

Yukihiro Matsumoto: Desenvolvedores querem criar a linguagem de programação perfeita. Eles querem poder dizer: “Veja, a minha linguagem é perfeita. Com ela você pode fazer qualquer coisa”. Mas é simplesmente impossível conceber uma linguagem perfeita, porque existem duas maneiras de se olhar para uma linguagem de programação. Uma maneira é olhar para o que pode ser feito com essa linguagem. A outra é observar como nos sentimos usando essa linguagem – como nos sentimos durante o tempo que estamos programando.

De acordo com a teoria da completude de Turing, tudo que uma linguagem Turing-complete pode fazer teoricamente pode ser feito por qualquer outra linguagem Turing-complete, mas de um jeito diferente. Você pode fazer tudo em Assembler, mas ninguém quer programar em Assembler. Do ponto de vista do que você pode fazer, entretanto, as linguagens diferem entre si – mas as diferenças são limitadas. Por exemplo, Python e Ruby fornecem quase o mesmo poder para o programador.

Em vez de enfatizar o “o que”, eu quero enfatizar o “como”: Como nos sentimos durante a programação. Essa é a principal diferença da arquitetura do Ruby em relação as outras linguagens. Enfatizo a sensação em “como” eu me sinto usando Ruby. Eu não trabalho para tornar o Ruby perfeito para todos, porque você tem sentimentos diferentes dos meus. Nenhuma linguagem pode ser perfeita para todos. Eu tentei fazer Ruby perfeito para mim, mas talvez ele não seja perfeito para você. A linguagem perfeita para Guido van Rossum é provavelmente o Python.

Ortogonal vs Harmonioso

Bill Venners: Dave Thomas alegou também que se eu pedir para você adicionar ao Ruby um recurso que é ortogonal, você não vai fazê-lo. O que você quer é algo que seja harmonioso. O que isto significa?

Yukihiro Matsumoto: Eu acredito que a coerência e a ortogonalidade são ferramentas de design, não o objetivo principal do projeto.

Bill Venners: O que significa ortogonalidade neste contexto?

Yukihiro Matsumoto: Um exemplo de ortogonalidade é adicionar qualquer recursinho ou sintaxe à linguagem. Por exemplo, C++ suporta parâmetros com valores padrão e também sobrecarga de funções com base em parâmetros. Ambos os recursos são bons para se ter em uma linguagem, mas devido ao fato desses recursos serem ortogonais, você pode aplicar ambos ao mesmo tempo. O compilador sabe exatamente o que fazer nesse caso. Se houver ambigüidade, o compilador irá sinalizar um erro. Mas se eu olhar para o código, vou precisar aplicar a regra com o meu cérebro. Eu preciso adivinhar como funciona o compilador. Se eu estiver correto, e for inteligente o suficiente, isto não será nenhum problema. Mas se eu não for inteligente o suficiente, e eu realmente não sou, isto causará muita confusão. O resultado será inesperado para uma pessoa comum. Este é um exemplo de como ortogonalidade pode ser ruim.

Bill Venners: Em outras palavras, as características ortogonais irão funcionar, uma vez que o compilador as entende e executa o programa. Mas é difícil para um programador compreender o funcionamento quando está olhando para o código, porque ele precisa descobrir como essas duas coisas funcionam juntas.

Yukihiro Matsumoto: Características ortogonais, quando combinadas, podem explodir em complexidade.

Bill Venners: Qual é a alternativa? O que seria mais harmonioso?

Yukihiro Matsumoto: Basta escolher uma das duas funcionalidade para colocar na linguagem. Você não precisa fazer tudo o que vier a sua cabeça. Você deve escolher apenas um desses recursos, mesmo que ambos sejam bons.

Liberdade e conforto

Bill Venners: Uma das filosofias da comunidade Python é fornecer uma e apenas uma maneira de fazer as coisas. Se você fornecer cinqüenta maneiras diferentes de fazer a mesma coisa, então você está fornecendo conveniências para quem está escrevendo o código. Cada programador terá a liberdade de escrever do jeito que preferir. Mas o problema não é com quem escreve, mas com a pessoa que está lendo o código. Você pode adotar uma forma de escrever o seu código e o programador do lado pode adotar uma outra forma. Assim, quem está lendo precisa estar familiarizado com todos as maneiras possíveis de se realizar aquela tarefa, não apenas a sua maneira favorita de codificar. Esse é o dilema do design. A comunidade Python parece preferir uma única abordagem, mas Ruby parece oferecer várias maneiras de se fazer a mesma coisa.

Yukihiro Matsumoto: Ruby herdou a filosofia do Perl de ter mais de uma maneira de fazer a mesma coisa. Eu herdei essa filosofia de Larry Wall, que é o meu herói atualmente. Eu quero que os programadores Ruby sejam livres. Eu quero dar-lhes a liberdade de escolher. As pessoas são diferentes. As pessoas tem diferentes critérios. Mas se há uma maneira melhor entre as várias alternativas, quero encoraja-la, tornando-a mais confortável. Então é isso que eu tentei fazer. Talvez um código Python seja um pouco mais legível. Qualquer um pode escrever utilizando o mesmo estilo em Python com a finalidade de deixar o código mais fácil de ler, talvez. Mas a diferença de uma pessoa para outra é tão grande, que prover apenas um caminho é de pouca ajuda mesmo se você estiver usando Python, eu acho. Eu prefiro dar tantas maneiras quanto for possível, mas incentivar ou orientar os usuários a escolher a melhor maneira, se ela existir.

Alegria

Bill Venners: Em um artigo introdutório sobre Ruby, você escreveu: “Para mim, o propósito da vida é, em parte, ter alegria. Programadores geralmente se sentem felizes quando podem concentrar-se na parte criativa da programação, assim Ruby foi projetado para fazer programadores felizes.” Como pode o Ruby fazer programadores felizes?

Yukihiro Matsumoto: Você quer aproveitar a vida, não é? Se você pudesse terminar seu trabalho rapidamente e de uma forma divertida, seria muito bom, não é? Esse é o propósito da vida, em parte. Sua vida será melhor.

Eu quero resolver os problemas que encontro no cotidiano usando computadores, então preciso escrever programas para eles. Usando Ruby, quero me concentrar nas coisas que faço, não nas regras mágicas da linguagem, como começar com um public something something void something para imprimir na tela: “Olá mundo”. Eu só quero dizer print "this!". Eu não quero todas estas palavras-chave envoltas em magia. Eu só quero me concentrar na tarefa. Essa é a idéia básica. Então, eu tenho tentado fazer um código Ruby conciso e sucinto.

Bill Venners: Permitir que os programadores escrevam código que é conciso e sucinto é uma maneira de fazê-los felizes.

Yukihiro Matsumoto: Sim, para que eles possam se concentrar no problema. As vezes as pessoas anotam pseudo-código em uma folha de papel. Se esse pseudo-código pudesse ser executado diretamente em seus computadores, seria muito bom, não seria? Ruby tenta ser assim, como esse pseudo-código sendo executado. O pessoal do Python também diz o mesmo.

Bill Venners: Sim, o pessoal do Python diz que o Python é um pseudo-código executável. O que mais tem no Ruby que faz os programadores felizes?

Yukihiro Matsumoto: No nosso cotidiano como programadores, processamos muito texto. Então, eu tentei trabalhar duro em processamento de textos, ou seja, na classe string e expressões regulares. As expressões regulares são incorporadas a linguagem e estão prontas para o uso. Também precisamos interagir muito com o sistema operacional. Ruby pode executar chamadas ao sistema Unix e para a maioria das funções da API do Windows. Isso aumenta o poder e a utilizade do sistema operacional no ambiente da linguagem interpretativa. Então você pode fazer a administração de sistemas e a programação diária de processamento de textos. É isso que faço na maior parte do tempo, então eu trabalhei duro em fazer isto funcionar bem.

Bill Venners: Então, basicamente, Ruby me permite aproveitar mais a minha vida, porque faz com que eu termine o meu trabalho mais rápido ao mesmo tempo que o torna mais divertido?

Yukihiro Matsumoto: Ele me ajuda a fazer isso. Não tenho certeza se Ruby funciona para você, mas eu espero que sim.

O Fator Humano

Bill Venners: Em uma entrevista, você disse: “Não subestime o fator humano. Embora estejamos em frente a um computador, eles são apenas máquinas. Estamos trabalhando para humanos, com humanos.” O que você quer dizer com isso?

Yukihiro Matsumoto: Imagine que você está escrevendo um e-mail. Está na frente do computador. Está operando o computador, clicando em um mouse e digitando em um teclado, mas a mensagem será enviada a um outro ser humano através da internet. Então você está trabalhando com um computador, mas o objetivo é sempre um ser humano. A maioria das tarefas que fazemos são para seres humanos. Por exemplo, um cálculo de impostos é a contagem de números que indicam quanto o governo pode retirar de dinheiro da minha carteira, mas o governo é composto por seres humanos.

A maioria de nossas tarefas estão relacionadas com seres humanos. Assim, quando programamos podemos tanto pedir ao computador para trabalhar para um ser humano, como podemos descrever nossos pensamentos de uma forma tão clara que até mesmo uma máquina possa executar. No primeiro caso, fazemos o computador trabalhar para o ser humano, o alvo é um ser humano atrás de um computador. No segundo caso, expressamos nossos pensamentos com clareza suficiente para ser compreendido e executado por computadores, a intenção é expressa por cérebros humanos e o resultado é calculado por um computador. Assim, em ambos os casos, o objetivo aqui é sempre o ser humano.

Bill Venners: O que é mais importante sobre este tipo de mentalidade? Você diz: “Não subestime o fator humano.” Por quê?

Yukihiro Matsumoto: Computadores não se importam se eu estou fazendo algum esforço para me comunicar com eles ou se é fácil de se comunicar com eles. Eles não se importam se eu coloquei uma seqüência de instruções em um arquivo e mandei executá-las ou se eu estou utilizando uma linguagem de alto nível para gerar essas instruções. Computadores não se importam. Nós nos preocupamos com os seres humanos. Muitas vezes as pessoas, especialmente engenheiros de informática, focam nas máquinas. Eles pensam: “Ao fazer isso, a máquina irá trabalhar mais rápido. Ao fazer isso, a máquina irá funcionar mais eficazmente. Ao fazer isso, a máquina irá fazer alguma coisa qualquer”. Eles estão se concentrando em máquinas. Mas, na verdade precisamos nos concentrar no ser humano, sobre como os seres humanos se preocupam com a programação ou como operam um aplicativo na máquina. Nós somos os mestres. As máquinas são nossos escravos.

Bill Venners: Pelo menos por enquanto.

Yukihiro Matsumoto: Pelo menos por enquanto, até chegarmos na era dos Exterminadores.

O princípio da menor surpresa

Bill Venners: Em uma entrevista, você disse “eu projetei o Ruby para minimizar a minha surpresa. Fiquei muito espantado quando as pessoas ao redor do mundo me disseram que Ruby reduzia a sua surpresa e aumentava a sua alegria ao programar. Agora eu tenho certeza que programadores pensam da mesma maneira no mundo todo.” Por que o principio da menor surpresa?

Yukihiro Matsumoto: Na verdade, eu não fiz a alegação de que Ruby segue o princípio da “menor surpresa”. Alguém sentiu que o design do Ruby segue esta filosofia, então eles começaram a dizer isso. Não foi eu quem inventou isto, na verdade.

Eu queria minimizar minha frustração durante a programação, assim como eu quero minimizar o meu esforço na programação. Esse era o meu principal objetivo na elaboração de Ruby. Eu queria me divertir enquanto programava. Depois de lançar o Ruby e muitas pessoas ao redor do mundo tomarem conhecimento da linguagem, eles começaram a dizer que se sentiam assim como eu me sinto. Eles começaram a citar esta frase sobre o princípio da menor surpresa. Mas, na verdade, isto é muitas vezes mal interpretado.

Bill Venners: Como isto é mal interpretado?

Yukihiro Matsumoto: Cada um possui um passado único. Alguns podem vir do Python, outros podem vir de Perl, e podem ser surpreendidos por diferentes aspectos da linguagem. Então, eles vêm até mim e dizem: “Fiquei surpreso com esta característica da linguagem, assim o Ruby viola o princípio da menor surpresa”. Espere. Espere. Esse princípio não vale apenas para você. O princípio da menor surpresa, também é o principio da minha menor surpresa. Mesmo programadores experientes podem ser surpreendidos. Por exemplo, eu era um programador C++ antes de começar a projetar o Ruby. Eu programei em C++ exclusivamente por dois ou três anos. E após todo este tempo programando em C++, eu ainda me surpreendia.

Atualização (20/01/2010 13:05):

Depois de publicar esse artigo descobri que o Fábio Akita já havia traduzido essa entrevista a alguns anos atrás. Assim, seguem os links para a parte 2, parte 3 e parte 4 da entrevista. Divirta-se!


15 Comentários


  1. Opa, Carlos! :)

    Belo post, não conhecia essa entrevista. Só detectei um errinho de português na seção Alegria: no parágrafo está “o pessoal do Python também dizem o mesmo”.

    []’s

  2. Marcelo Pinheiro, obrigado!

  3. Ótima entrevista, não conhecia também. Ótima tradução. Parabéns!
    Valeu!

  4. Gostei muito da entrevista. O Matz é demais =D

  5. Eu acho uma puta duma palhaçada esse “conto de fadas” em que certos desenvolvedores colocam o Ruy, como “linguagem divertida”, “linguagem legal”, etc. O que uma linguagem de programação tem que possuir são RECURSOS, DESEMPENHO, BOAS FERRAMENTAS DE DESENVOLVIMENTO, DOCUMENTAÇÃO, BONS LIVROS SOBRE – e claro, preferencialmente ser OPEN SOURCE.

    Não vejo nada de mais no Ruby. É uma modinha igual ao Cold Fusion foi (entre outras). No final, ficaram só o PHP e a plataforma da Microsoft, e ainda não vejo 1 único motivo para substituir qualquer uma das duas pelo Ruby

  6. E só para incrementar, a maioria dos blogueiros que fazem apologia ao Ruby usam blogs feitos em PHP (Wordpress).

    Now I ask you: WHY???

  7. Andresa,

    Antes de mais nada eu utilizo Wordpress (PHP) simplesmente pq ele é o melhor sistema de blogs que existe. O que uma linguagem de programação tem a ver com isto? Ou será que ele só é bom pq foi feito em PHP?

    Você já experimentou Ruby? Já tentou aprender? Se não, então não tenho como argumentar com você. Só posso dizer que eu trabalhei com tecnologias da Microsoft durante 10 anos antes de aprender Ruby e desde que comecei a programar nesta linguagem sou uma pessoa mais feliz. Simplesmente assim…

    Se não acredita compre um livro e faça o teste. O máximo que vai te acontecer é você aprender a programar em mais uma linguagem.

  8. Caraca,
    Andressa tava nervosa :D

    A entrevista mesmo diz sobre o que cada um sente ao programar e que não existe uma linguagem perfeita, o que posso falar a respeito disso no meu _testemunho_ é que a muito tempo não me sentia tão empolgado com uma nova tecnologia e ou perspectiva de desenvolvimento de quando quando conheci Ruby e especialmente Ruby on Rails.
    Eu curto muito a filosofia que envolve o Ruby e pra mim os contos de fadas são tão válido quanto qualquer outra história (ou conto), até porque a algum tempo atras Inteligência Artificial só existia nos contos de Asimov :D, e digo que no caso de Ruby é real.
    Hoje não trabalho com Ruby o que não me deixa de ser um mega entusiasta da tecnologia e filosofia envolvida, mais com certeza mudou minha maneira de programar e evangelizar (assim como quando conheci POO) sobre desenvolvimento de software, que é o que eu gosto e quero continuar a fazer.
    Desculpa a várias repetições de “Ruby” no texto e até o próximo post :D

  9. Ótima estrevista, ouvi dizer que o RUBY é o PHP avançado, preciso aprender esta linguagem urgente, você indica algum site de tutoriais? Abraço

  10. Sebastião, não estou necessariamente nervosa. O fato é que eu ouço muitas ideologias sobre o Ruby, mas não estou vendo “mão na massa”, não estou vendo nenhum grande projeto feito com Ruby, o que responde ao que o Carlos disse também.

    Carlos, você usa Wordpress que é feito em PHP porque ninguém fez nada decente com o Ruby até agora. Quanto às tecnolgias da Microsoft, nunca fui muito fã e parei de acompanhar a partir do Visual Basic 6, mas você já viu o Visual Studio com o C#? Estou pasma com o que aquilo é capaz de fazer e principalmente com a forma como faz.

  11. Andresa,

    Pelo visto você ainda não entendeu. Não importa a linguagem de programação, mas sim a ferramenta. E daí que o Wordpress é feito em PHP, só por isto PHP é bom? Não, os programadores do Wordpress fizeram um excelente trabalho e fariam o mesmo se programassem em qualquer outra linguagem, mesmo Ruby ou C#.

    Se analisarmos desta forma então PHP é a melhor linguagem de programação do mundo, porque não existe um concorrente a altura do Wordpress hoje, em nenhuma outra linguagem. Alias, temos um problema agora, pq também não existe nenhum concorrente a altura do Photoshop e eu te garanto que ele não foi feito em PHP. Até o Ruby tem muito código em C nas suas entranhas. E agora? Qual é a melhor linguagem de programação?

    A resposta: http://www.nomedojogo.com/2009/04/16/a-melhor-linguagem-de-programacao-e-o-programador/

    Só porque prefiro Ruby hoje, não significa que todo o resto é ruim. Tem muita coisa boa por aí. Você é que precisa expandir seus horizontes.

    Quanto as ferramentas da Microsoft, sempre concordei que o Visual Studio é de longe a melhor IDE com que já trabalhei. Mas para o tipo de trabalho que tenho feito hoje em dia, é mais produtivo trabalhar com Rails. E também prefiro usar Mac… ;)

    Um conselho de amigo, dê uma chance ao Ruby e ao Rails, você não vai se arrepender. Se estiver disposta, dê uma olhada aqui: http://www.nomedojogo.com/palestras/

  12. Andressa,

    A Microsoft tbm investe em Ruby e todos nós sabemos disso. A questão de “modismo” sempre será levantada quando algumas pessoas estiverem querendo experimentar uma linguagem ou programar em algo diferente “do padrão do mercado atual”.
    Foi assim com Java e C# e será assim com outras linguagens que surgirem e conseguirem fazer um certo “impacto na mídia”.
    Se não gosta da linguagem tudo bem. Acredito que ninguém está te obrigando a aprender ou programar nela ou estão? Na plataforma que vc trabalha tem muitas possibilidades de emprego ainda. Eu gosto de diversas linguagens de programação, no momento me identifico mais com Ruby(porém trabalho com Java). Linguagens de programação são ferramentas e não “religiões”. Hoje você programa em .Net ou qualquer outra tecnologia Microsoft, mas nem mesmo você pode afirmar que no dia de amanhã não estará programando em outra plataforma(isso vale pra todos nós).

  13. Andreza,

    Puxa vida, “não vejo 1 único motivo para substituir qualquer uma das duas pelo Ruby” – Querida você não precisa esquecer uma linguagem pra aprender outra :-)

  14. Sinceramente, caixa de recados não é o melhor lugar para tentar manisfestar alguma capacidade intelectual.

    Para certas… Deixo meus pesamês rsrs
    Bom, sobre o post – Muito bom! Curti!

Trackbacks

  1. uberVU - social comments

Deixe um comentário