Peepcode sponsors akitaonrails.com

Tradução: Apenas adicione Escalabilidade!

AkitaOnRails / 05.May.2008 at 09:12pm

Ola Bini é um colaboradores mais ativos do JRuby. É um programador jovem (tem seus 24 anos ou algo assim) mas conhece muito bem os detalhes da arte da programação. Apreciador de Lisp e inteligência artificial, é exatamente o tipo de artista que sabe apreciar a Boa Programação. Em luz dos recentes transtornos sobre a controvérsia Twitter, ele escreveu este divertido artigo que traduzo mais abaixo.

Diferente dos pseudo-gurus que continuamente apenas gostam de falar mal dos outros e jogar indiretas. Lembrem-se de uma coisa: um bom profissional não precisa falar mal dos outros como forma de parecer que está correto. Um bom profissional convence que o que ele acredita é bom por méritos próprios.

Outro bom exemplo? Avi Bryant. Ele teria todos os motivos do mundo para ser apenas mais um xiita, falar mal de Ruby, falar mal de Python, falar mal de Perl. Mas ele também é um artista. Ele acredita na tecnologia que desenvolve. Prova disso foi o que eu noticiei semana passada: em vez de cruzar os braços, foi ajudar a implementar Ruby sobre uma virtual machine Smalltalk. Não só isso, mas quando eu o entrevistei, ele disse abertamente que o carro-chefe do framework Seaside, o produto DabbleDB, também utiliza códigos em Ruby e Python. Bons programadores escolhem boas ferramentas para trabalhar. Xiitas precisam que os outros percam para que eles ganhem.

No longo prazo, adivinhem o que funciona? Bom, vamos à tradução:

Apenas adicione Escalabilidade!

(Para proteger os inocentes, todos os nomes das linguagens de programação foram modificadas. Qualquer semelhança com nomes existentes é puramente para efeito dramático.)

Ouvi muitas vezes que LRM não escala. As pessoas vivem me dizendo isso em várias circunstâncias diferentes. Eles me dizem que linguagens como Deep Throttle e Moulder escalam mas LRM não. Mesmo a linguagem Scally escala – o que é visível pelo nome, eu acho. Então por que o LRM não tem essa funcionalidade?

Já que eu gosto de LRM, e realmente não quero voltar nem para Deep Throttle ou Moulder, decidi adicionar escalabilidade ao LRM. Quero dizer, quão difícil poder se isso se todas essas outras linguagens têm? Eu implementei linguagens antes, então este deve ser o caso apenas de encontrar a implementação correta da funcionalidade, e transplantar para a base de código do LRM, e então fornecer um patch para a mailing list.

Já que eu sabia que LRM não tinha escalabilidade, decidi investigar outras linguagens que tem. Eu comecei com a linguagem original, aquela que as pessoas usam para escrever sistemas operacionais. Obviamente uma linguagem como Deep Throttle tem escalabilidade. Então comecei a ler os livros, procurando pela sintaxe. Mas eu não achei em lugar algum. O que eu estava perdendo? Será que existe algum elemento sintático obscuro que não estava documentado, que fornece a escalabilidade? Ou estaria escondido em algum lugar? Talvez os ponteiros na realidade sejam outra palavra para escalabilidade? Mas não, parece que não é isso. Decidi abrir o GDPC, o GNU Deep Throttle Compiler, e ver se esse negócio de escalabilidade na realidade é algo que o compilador faz automaticamente para você – parecido com alocação de registros. Mas não encontrei nenhuma alocação de escalabilidade. Havia várias coisas legais ali, mas tudo ali eram apenas traduções mundanas de Deep Throttle para código de máquina.

Me sentindo muito deprimido, virei minhas atenções ao Moulder. Vou assumir que todos vocês conhecem essa linguagem – é usada em várias partes do mundo e fornece um monte de recursos avançados como garbage collection, uma máquina virtual, e sim – escalabilidade! Claro, é onde isso deveria estar. Talvez Deep Throttle tenha escondido a funcionalidade em algum lugar obscuro, mas eu tinha certeza que Moulder tornaria isso mais fácil de achar. Comecei olhando a sintaxe novamente, olhando o que se podia fazer com a linguagem. Interessante, Moulder é uma linguagem realmente pequena, quando você a entende. É pequena mas você precisa dizer muitas coisas para conseguir fazer qualquer coisa. Eu não consegui achar a sintaxe para escalabilidade, então comecei a pensar em outras idéias. Talvez todas essas palavras extras “protected final static Foo” seriam realmente necessárias. Talvez a escalabilidade aconteça no espaço entre as palavras, ou em alguma estranha interação entre elas? A única maneira de descobrir seria abrir o compilador e olhar o que acontece. Nesse caso até que foi fácil, porque o compilador fazia ainda menos que o do Deep Throttle. Francamente, o compilador do Moulder apenas solta alguns bytecodes. Não havia nenhum tipo de escalabilidade em linha no compilador do Moulder.

Vê onde estou indo? Certo, eu tive que investigar os bytecodes que o Moulder usa. Onde está esse bytecode precioso de escalabilidade? Eu presumo que se chamaria invoke_scaling ou talvez ldscaled. Mas nada. Não havia bytecode de escalabilidade. Todos os bytecodes existentes faziam as mesmas coisas mundanas que eu sei que o LRM sabe fazer também. Eu estava me sentindo pronto para desistir, mas eu tive uma última grande idéia. Scally é famoso por ser uma linguagem que escala. Seus criadores até deram esse nome por causa disso. Então, se ambos Moulder e Scally tem escalabilidade, talvez esteja em algum lugar na gigantesca biblioteca padrão do Moulder?

Mas adivinhe? Eu não encontrei. Ainda não encontrei ninguém que sabe como implementar escalabilidade em uma linguagem, então acho que LRM nunca a terá … Alguém se habilita para me iluminar, por favor me envie um e-mail detalhado com uma implementação de Escalabilidade. Realmente sinto a necessidade de saber como essa coisa funciona.

6 Comments

Queria parabenizar pelos seus posts (mesmo que esse em particular seja somente uma tradução), mas venho vendo muita coisa no seu blog e esta agregando muito no meu conhecimento. Espero que continue assim.

Gostei muito da crítica do Ola Bini, é interessante como algumas pessoas se gabam tanto de escalabilidade, porte, performance, etc, etc, etc de algumas linguagens mesmo essas qualidades serem bastante abstratas. Eu particularmente não vejo a linguagem como fator crucial para o sucesso de um projeto.

Eu tenho uma formação bastante empreendedora e tenho a sensação que as pessoas se baseiam bastante em orgulho e arrogância, fazendo com que debates tecnológicos sejam mais importante que uma grande idéia ou de como pode melhorar o que já existe. Quando alguem de negócios procura por soluções inovadoras e encontra Ruby, Python, Java, PHP, o que for, e só acha discussões sobre quem é melhor, comparações, artigos sobre o que a outra linguagem não tem que ela tem, com certeza ele fica perdido.

Imagino se eles fossem abordados de uma outra maneira, se encontrasse que utilizando um framework de desenvolvimento WEB associado com uma gestão de projeto ágil poderia ser um divisor de águas na sua empresa, não só na questão operacional, mas estratégica. E sabendo disso, ele pudesse escolher a empresa (seja qual for a linguagem do desenvolvedor) que tenha experiência e capacidade para solucionar seu problema, como no mercado comum. Acho que teríamos um mercado mais democrático, que valorizasse quem realmente merece e não os “certificados”.

Vejo no exemplo, acho que ninguém aqui se preocupa se suas roupas são costuradas com maquina de costura Singer ou Elgin, mas se preocupam se a costureira sabe costurar.

Não sei se me expressei bem, posso ter falado besteira, mas meu comentário é complementar a tudo que venho lendo aqui no blog. Tem muita gente fazendo coisa boa, independente da linguagem, e é no conhecimento dessas pessoas que deveria se focar as discussões, não em polêmicas ou guerra de egos.

Mais uma vez, parabéns pelo Blog.

É o que eu sempre tento dizer, escalabilidade é problema de arquitetura e não de linguagem. Outra coisa que o pessoal costuma esquecer é que você pode melhorar muito o aproveitamento dos recursos do servidor se você otimizar seu frontend tornando as requisções mais leves e diminuindo o número de requisições de arquivos JS,CSS e imagens.

Oi Akita, recebi esse post duas vezes no Reader. Sabe porque? A propósito, não li sua tradução, mas esse post do Ola Bini foi muito engraçado!

@thiago, você não é o primeiro a me dizer isso e realmente não sei porque. Talvez seja algum problema com o FeedBurner. Outra coisa: não é porque meu post apareceu em outro feed, como o da Blogosphera do Rubyonbr por exemplo?

Não, foi seu feed mesmo. Pode ser também algo com o Reader (veja quais leitores os outros usam), mas acho difícil. É mais provável que jea algo com o FeedBurner.

Acabei de receber um post duplo do TechCrunch. Será que eles usam FeedBurner também? Senão, deve ser o Reader mesmo.

Leave a Comment