No início de 2010, tive uma oportunidade de trabalhar com Ruby. Meu background era de ter trabalhado com linguagens orientadas a objetos (Java e C#), mas existiam tantas diferenças que eu não sabia por onde começar. Um exemplo marcante foi a descoberta de que um Array não retornava uma exceção quando eu tentasse recuperar um objeto no índice -1.
Um colega me mostrou o Ruby Koans e foi assim que eu descobri uma ótima ferramenta para aprendizado.
http://rubykoans.com/
Um Koan, serve como metáfora para representar algum princípio. Representar alguma questão que gera um aprendizado que vai além da razão ou lógica simples. Um Koan gera dúvidas e também pode ser utilizado como uma maneira de acompanhar ou medir o progresso da aprendizagem/conhecimento. Alguns Koans são bem conhecidos, como por exemplo: “O copo cheio até a metade com água, está meio cheio ou meio vazio?”. Embora não exista uma resposta correta, as respostas podem gerar insights para quem pergunta e para quem responde.
Outros Koans NÃO relacionados a programação:
O conceito de Koan tem muita relação com programação. É bem comum nós encontrarmos programadores trabalhando por anos com uma tecnologia mas sem ter uma base de conhecimentos sobre a linguagem, framework ou stack (assim como foi o meu caso lá em 2010).
Ruby Koans (e existem Koans para diversas linguagens de programação) é um bom exemplo de baby step para aprender sobre a linguagem. Consiste de uma série de classes com diversos testes unitários quebrados que ao corrigir, geram aprendizado e passam para o próximo desafio. É importante entender que o objetivo não se trata de corrigir os exemplos e sim de aprender com cada um dos testes.
Em TDD (Test Driven Development), passamos pelo ciclo Red -> Green -> Refactor, em um Koan de programação este ciclo é ainda mais curto. Para tentar simplificar, a minha leitura do ciclo é de que temos: Red -> Learn -> Rake, ou seja, o feedback é ainda mais rápido e o foco é no aprendizado.
Para você iniciar o seu aprendizado com o Ruby Koans, basta você ter alguma versão de Ruby instalado na sua máquina, baixar o código e no path chamar o rake (que irá chamar o target default para executar os testes). No próprio site, tem informações mais detalhadas para instalação e configuração.
A ferramenta também é bastante útil para quem já possui experiência com a linguagem. Você reforça o que já sabe, desapega de alguns vícios (especialmente para quem já trabalhou com outros paradigmas e linguagens) e também é ótimo para utilizar como ferramenta de apoio para mentorar outros desenvolvedores.
Alguns exemplos de Koans para outras linguagens/frameworks:
AngularJS
Bash
Clojure
Clojure
Cpp
ColdFusion
CoffeeScript
CSharp
Dart
DotNet
Elixir
Erlang
FSharp
Go
Groovy
Haskell
Idris
Java
Javascript
Kotlin
Lisp
Lua
MongoDB Driver
Objective-C
Perl
Prolog
Python
R
ReactJS
RxJS
Scala
Smalltalk
Swift