Um dia, quando Sussman era um calouro e estava programando no PDP-6, Minsky sentou-se ao seu lado.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?
— 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
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.
