Arquivo do mês: fevereiro 2012

Minha Experiência com Smalltalk

Esses dias eu resolvi finalmente experimentar Smalltalk, convencido por relatos de que é uma linguagem verdadeiramente única e que é uma daquelas que abre a sua mente para como a programação deve realmente ser. Também por causa desse cara, Alan Kay, nada menos do que o cara que cunhou o termo Orientação a Objeto e a própria linguagem Smalltalk. Nesse palestra (http://video.google.com/videoplay?docid=-2950949730059754521), entitulada “The Computer Revolution Hasn’t Happened Yet”, ele fala, entre outras coisas, dos caminhos errados tomados pelas linguagens de programação e pela computação em geral.

Realmente, eu já havia adquirido um certo desgosto por linguagens de programação como Java e C++ e depois de experimentar linguagens funcionais como Haskell, eu me irritava toda fatidica vez que eu tinha que escrever um loop for. Estava na hora de um pouco de Smalltalk.

Bom, para começar, a particularidade mais notável de Smalltalk é o ambiente. O desenvolvimento ocorre dentro de uma imagem executada por uma máquina virtual Smalltalk. Mas tudo, absolutamente tudo dentro do ambiente é um objeto manipulável pelo programador – as janelas, os botões, os menus etc. A facilidade com que você cria, manipula e edita objetos em tempo real é incomparável a qualquer outro ambiente de programação existente.

A segunda característica notável é a sintaxe. Ou melhor dizendo, a falta dela: Smalltalk tem somente 6 palavras reservadas: true,  falsenilself,  super e thisContext. Todo o resto da programação se reduz basicamente ao envio de mensagens para objetos, pois tudo no mundo de Smalltalk é um objeto. Como criar uma nova classe? Passe uma mensagem para a classe Object (uma classe é um objeto), assim: “Object subclass: #NovoObjeto”. Como fazer um if ou um else? Passe uma mensagem para um objeto do tipo booleano, assim: (x < 3) ifTrue: [doThis] ifFalse: [doThat]. Um loop? Uma mensagem para uma coleção de objetos… e assim vai. Não é muito diferente do que novas linguagens ‘modernas’ andam fazendo, como Python e Ruby. Mas obviamente de um jeito muito mais sujo e deselegante. Ruby por sinal, tem uma forte influência de Smalltalk, inclusive dizem que Ruby e Smalltalk são na verdade a mesma coisa. Mas na verdade Ruby está  vários passos atrás, tanto em elegância e simplicidade da sintaxe quanto de implementação. Pra não deixar em branco, é bom dizer também que Python é um lixo, pra não dizer uma piada, em termos de design de linguagem.

Em um dia, eu aprendi tudo sobre como programar em Smalltalk. E o mérito não é meu, não há mesmo muito o que aprender em termos de sintaxe. O resto é basicamente se familiarizar com as bibliotecas e o ambiente para construção dos seus próprios objetos. O resto, é claro, requer bem mais tempo e familiaridade, mas pelo menos a sintaxe não vai ficar no seu caminho e tudo vai parecer mais como um passeio no parque.

Minha conclusão: Que raios as pessoas estão fazendo com OO? Java, C++, Python, até mesmo Ruby… Por quê? Uma possível explicação pode estar contida nesse texto muito interessante: http://www.jwz.org/doc/worse-is-better.html. Aprendam Smalltalk, mesmo que não cheguem a usar na prática, apenas para ter um choque de realidade. Não tem como se arrepender. Y U NO SMALLTALK?

Anúncios