30 de agosto de 2011

Clojure Kōan

Kōans são histórias, diálogos ou questionamentos muito utilizados na filosofia zen-budista e que o seu significado só pode ser atingido pela intuição, e não puramente pelo raciocínio lógico. De tão malucos fascinantes, acabaram sendo incorporados à cultura hacker, como no diálogo abaixo:
Um dia, quando Sussman era um calouro e estava programando no PDP-6, Minsky sentou-se ao seu lado.
— O que você está fazendo? — perguntou Minsky.
— Estou treinando uma rede neural randômica para jogar o jogo da velha — Sussman respondeu.
— E porque a rede é randômica? — perguntou Minsky.
— Eu não quero que ela tenha conceitos prévios sobre como jogar — disse Sussman.
Minsky então fechou os olhos.
— Para quê você está com os olhos fechados? — Sussman perguntou ao seu professor.
— Para que a sala fique vazia.
Naquele momento, Sussman alcançou a iluminação.
Fonte: Some AI Koans
Neste exemplo cômico, apesar de mostrar a forma de pensamento da tradição budista, o questionador tem respostas para suas perguntas, mas não é o que acontece frequentemente com os Kōans tradicionais. O mais comum é que aquele que questiona descubra as respostas por conta própria. Mas o que isto tem a ver com linguagens de programação?

Acontece que alguns grupos de desenvolvedores foram iluminados e resolveram compartilhar este caminho rumo ao nirvana, criando os koans da programação. Clojure Koans segue toda esta filosofia descrita acima, onde o objetivo é alcançar o conhecimento máximo de Clojure de forma semelhante à metodologia TDD (Test Driven Development) exceto que os testes já estão prontos =D. O que você precisa fazer é executar o script principal e a medida que os erros forem aparecendo, você irá abrir o arquivo que corresponde ao teste atual e preencher os espaços responsáveis pela falha nos testes, de modo a fazer o teste passar.

Da forma que são feitos os koans, você consegue aprender da linguagem sem precisar ficar lendo tutoriais vagos e egoístas e ainda filosofa um pouco. Vamos começar então, o nosso caminho de iluminação:

"Instalando"

Coloquei instalando entre aspas porque em Clojure, geralmente não se instala nada, só se configura. Mas, primeiramente é preciso baixar aqui o Clojure Koans, quando fizer o download e extrair a pasta existem várias formas de executar o software: usando o comando script/run, usando lein repl ou pelo eclipse. Eu prefiro usar o leiningen, por facilitar muito a vida do programador, então usei o comando lein deps, para atualizar as dependências do projeto, mas também mudei um pouquinho o meu project.clj:

(defproject functional-koans "0.4.1"
:description "The functional koans"
:dependencies [[org.clojure/clojure "1.3.0-beta2"]
               [fresh "1.0.1"]
               [jline "0.9.94" :exclusions [junit]]]
:dev-dependencies [[swank-clojure "1.4.0-SNAPSHOT" :exclusions [org.clojure/clojure]]
                   [lein-eclipse "1.0.0"]]
:repositories {"sonatype-oss-public" "https://oss.sonatype.org/content/groups/public"})

Caso também queira utilizar o eclipse, depois de executar lein deps, execute lein eclipse e importe o projeto para a IDE.

Executando

No Eclipse, selecione com o botão direito o arquivo path_to_enlightenment.clj, depois navegue em Run as > Clojure Application, quando a REPL abrir, digite (run). Independente da IDE, ao executar o script um erro acontecerá:

E também será indicado o caminho para o arquivo que causou o erro, neste caso <dir>\clojure-koans\src\koans\equalities.clj. É aí que a jornada começa, as frases "dicas" aparecem no maior estilo Koan-budista, sem dizer realmente o que se deve fazer, mas dando uma pasta vaga, instigando sua intuição a procurar resolve-lo.

Se você entendeu a filosofia, você sabe o que deve ser feito, senão eu conto: basta ir até o arquivo especificado e modificar o script de modo que o teste passe. Simples assim:

Assim que o arquivo equalities.clj é salvo, o teste é executado novamente, e como era de se esperar, uma nova meditação aparece:

E agora só continuar o ciclo: meditar-corrigir-aprender. Por mais que pareça bobo, principalmente no começo, esta abordagem traz um conhecimento profundo da linguagem. O fato de agir intuitivamente na correção dos erros e após corrigir, entender o real significado do teste feito, agrega muito conhecimento.

Nenhum comentário:

Postar um comentário