One of the best ways (in my opinion) to begin learning to program is through test-driven development. If you're just getting started learning ruby, want to explore more of the fundamental concepts, or learn more about how tests are written in Ruby, there is a great tool available called the Ruby Koans.
Koan is a word used by Zen Buddhist monks to describe questions, paradoxes, stories, etc. that are to be meditated on and further their Zen practice. The Ruby Koans were created by Jim Weirich who was very influential to the Ruby language community as he developed multiple tools including Rake. The purpose of the Ruby Koans is to introduce users to the Ruby language through test code. Because testing is so important to sustainable and scalable development, learning foundational concepts using test code is a great way for beginners to learn.
Getting Started
In order to get started, we need to make sure we have Ruby installed and the version is at least 1.8. To check which version is installed, in the terminal we can run:
ruby -v
I have ruby 2.6.4 installed so we are good to go. Check out the documentation here if you need to install or upgrade Ruby.
Clone the Git Repo
The GitHub repo has all the code needed to run the koans. Simply navigate in the terminal into the directory that we want the koans project to be and run:
git clone https://github.com/edgecase/ruby_koans
Then open up the directory in a code editor. (I use Visual Studio Code.)
Generate the Koans
The koans are not generated by default so before we explore the directory we need to run:
rake gen
If at any point we wish to restart and regenerate the koans, just run:
rake regen
Quick note: You may notice the src directory follows the same structure as the koans directory. That folder does contain the koans but with the answers filled in. You are welcome to reference these answers if you are stuck, but I recommend following the tests first.
Fix the Tests
In order to start our journey, we need to run the first test. The command rake will execute our test code.
rake
The test output says:
Please meditate on the following code:
/Users/laura/Desktop/dev/ruby_koans/koans/about_asserts.rb:10:in `test_assert_truth'
So we can navigate to the file in the koans folder titled 'about_asserts' and see that the first method is called test_assert_truth.
The code says false and there is a note to change it to true. Let's delete false and replace it with true. Now let's run rake again, and we've passed our first test!
Keep going through all the tests and you might achieve enlightenment. More likely, you'll at least have a better understanding of Ruby and how to test your code.
Note on Length
The koans usually take 5 or so hours. I completed them in a span of 6 hours with a few breaks between, but I would recommend spreading it out into smaller chunks throughout a few days, week, or even month. There is a lot of information in each answer so make sure you're learning why a line of code passes the test before moving on to the problem. Passing the tests is not as important as learning what they teach. But most of all, have fun coding!
Top comments (4)
I completely forgot about koans for programming languages. I don't think I ever got much out of them, as the zenful language confused me at times, but perhaps it's my experience. But I am curious about what you found most useful about koans compared to other resources and what you found lacking about them. It'd be useful for me to figure out when I should still recommend them.
My two favorite resources to practice after going through some syntax and features of a new language are: Exercism.io and (gah) Leetcode.
Thanks for reading! I personally like using the ruby koans for learning Ruby's idiosyncrasies. I think it's a good intro to complete beginners since the answers are available if they get completely stuck, but more than that I think they are great for programmers who already have experience in other languages. It does a great job explaining more about how the language is constructed on a foundational level.
That being said, I think if one is looking more for algorithm practice or learning the depth of available methods, other resources like Leetcode are more suited. Also, the Ruby Koans only take about 5 or so hours, so they focus more on foundational knowledge rather problem-solving.
Hope that helps!
I used RubyKoans when I was first learning. I recommend them every chance I get. You do a great job presenting them here.
You mentioned understanding RSpec, but I thought the koans used MiniTest, which is bundled with the Ruby language. Am I mistaken about that? Or are there different versions?
You are completely correct, RSpec has a completely different syntax as well. I definitely have more to learn about testing, especially in Ruby. Thanks for the catch! I will edit the post.