O Rails 3 vem aí.
(X) Muito provavelmente você já ouviu falar do Ruby on Rails. “É um framework para desenvolver aplicações web, em uma linguagem pouco usada, chamada Ruby. É open source, e o pessoal que usa diz que é muito produtivo. Mas vá saber, o pessoal que usa Java ou PHP diz a mesma coisa. E, ao menos, nestas linguagens há muitos empregos. Dizem também que Ruby é lento e não escala. Além disso, seria mais uma linguagem para aprender...”
Se é essa a história que você ouviu, você perdeu a parte importante. E é essa a parte que eu vou contar aqui. Para entendermos da onde veio o Ruby on Rails, teremos de quebrar isto em três partes. A primeira será a parte tecnológica. A segunda será, na falta de um nome melhor, a parte metodológica. E a terceira e última, chamarei, para continuar rimando, a parte mercadológica. Após entendermos o que é de fato Ruby on Rails, vou resumir a história dele entre a versão 1.0 e a 3.0, que está no título desta palestra.
(X) A história tecnológica do Ruby on Rails começa na década de 80, quando foi criada a linguagem Perl. Assim como hoje há uma certa competição entre Java e Ruby, havia nos anos 90 entre Visual Basic e Fox Pro e entre Smalltalk e C++, naquela época Perl rivalizava com C.
(X) C era, e ainda é, o protótipo da linguagem para “homens de verdade”. C servia para trabalho pesado. Protocolos, drives, sistemas operacionais, servidores web... Mas quando você tinha que abrir um arquivo e modificar algo, ou copiar algo de lá pra cá, era como dar um tiro de bazooka em um mosquito. Mas era justamente este tipo de tarefa que ocorriam no dia a dia dos administradores de redes e servidores. Foi para estes que Perl foi criado. Tanto é que Perl significa “practical extraction and reporting language”, traduzindo mais ou menos como “linguagem prática de extração e relatórios”. Perl cresceu e se tornou muito mais do que isso. Mas a palavra que acho importante aqui é o “prática”. Isso sigficava que C, e as outras linguagens da época não eram praticas o suficiente para resolver um certo conjunto de problemas. E Larry Wall, ao se deparar com estes resolveu criar sua própria linguagem. Mas como estes problemas eram comuns há muitas outras pessoas, estas também adotaram Perl. Não seria exageiro dizer que Perl foi a principal linguagem na criação e no início da internet.
(X) Ao contrário de C, que era uma linguagem compilada, Perl tinha uma filosofia mais próxima do Lisp, e era interpretada. Bastava escrever uma linha, ou algumas poucas linhas e “jogar” para dentro do interpretador e resolver o seu problema. Conseguir resolver um problema apenas com uma linha de código se tornou um quase um objetivo, um ideal estético e um desafio lógico.
A diversão da comunidade Perl era escrever “just another perl hacker” ou desenhar o camelo das formas mais criativas possíveis. Criaram concursos de código ofuscado, onde se programava apenas pelo prazer de se programar. Diversão começou a ser um fator importante.
(X) Agora voltamos ao início dos anos 90. Perl já era gente grande, e Python estava redefinindo a simplicidade e legibilidade das linguagens de script. Ao contrário da comunidade Perl, o “zen” da comunidade Python era escrever algumas linhas a mais, mas fazer o código fácil e compreensível. Dizem por aí que entender o próprio código, 6 meses após escrevê-lo, é algo muito difícil. A comunidade Python queria acabar com isso, mantendo as facilidades do Perl. Foi neste cenário que Matz (Yukihiro Matsumoto) criou Ruby. Ele não estava satisfeito com Perl, que tinha se tornado complexo demais e que não tinha uma boa orientação a objetos. Nem com Python, que era simples demais, removendo do jogo coisas boas do Perl e de outras linguagens mais “quick and dirty”.
Matz viu que faltava uma linguagem que incorporasse o melhor do Perl, sua flexibil
6. not exp log srand xor s qq qx xor
s x x length uc ord and print chr
ord for qw q join use sub tied qx
xor eval xor print qq q q xor int
eval lc q m cos and print chr ord
for qw y abs ne open tied hex exp
ref y m xor scalar srand print qq
q q xor int eval lc qq y sqrt cos
and print chr ord for qw x printf
each return local x y or print qq
s s and eval q s undef or oct xor
time xor ref print chr int ord lc
foreach qw y hex alarm chdir kill
exec return y s gt sin sort split
Just Another perl hacker