It was 2011, I was a Java developer by that time, I was comfortable with libraries and tooling I used; I was a productive and happy user of Play Framework, Spring Framework, Maven and a couple of other small libraries. I thought I had it all. I learned Java in college and everybody I knew used it, it was a safe house. That feeling lasted for a while till I read "The Pragmatic Programmer" by Andrew Hunt and Dave Thomas and "The passionate programmer" by Chad Fowler. These books encouraged me to get out my comfort zone and try new things to strengthen my programming and problem solving skills. It was when I planned to look for something new, hard thing for a Cuban in 2011 living in an almost disconnected world.
I was surrounded only by a couple of Java and J2EE ebooks. Looking for something interesting I started digging into the example projects bundled into my Netbeans installation and there I found the "Depot application" a project written in Ruby using Ruby on Rails, having nothing else to do I decided to go for it. It seemed pretty awesome at first look, in matters of simplicity and legibility, it seemed executable english.
The Ruby Programming Language was created by Yukihiro Matsumoto (Matz) in 1993. His goal was to create a language for developer happiness and productivity by using the best ideas from languages like Perl, Lisp, Smalltalk, yadda, yadda, yadda. Developer happiness, productivity, simplicity, expressiveness, I loved this type of thinking for a tool meant to communicate with a computer. Yes, I like ergonomics.
I managed to get a Ruby book and it didn't last too much, my first impact was huge, Ruby is a very versatile language, there is a function for everything, beyond the standard library there are tons of 3rd party libraries called "Gems" all along with a very organized, vibrant and smart community. There are tools like Ruby-Toolbox a fantastic app that organizes the Gems around the world, categorizes them and evaluates their rating according to contributions, updates, download statistics, etc. That was impressive for me; there is a giant number of libraries but it is easy to find the ones you need. Despite the number of libraries, the quality and organization are what really got me, I used to spent hours evaluating libraries, many times I ended up finding bugs, unmaintained libraries or reading code to understand how to use the whole thing. Rubygems, Ruby-Toolbox and the Ruby community made it well, I miss that in other languages where there is more dispersion.
Every Ruby book or post you read talks about TDD and BDD, these weren’t new concepts for me because I was already a TDD advocator, but It was new for me to find all type of authors encouraging you to write automated tests while introducing you the language. That’s why the Ruby community shines in matters of quality, innovation, and confidence, it feels good to be taught in that way.
While creating and/or contributing Gems you got sane (or should I say holy?) defaults: semantic versioning, directory structure, coding style guidelines with a basic testing set up, just to name a few. You are completely covered, it's rewarding to set up a project where all the boilerplate is done for you so it is ready to test, implement, document and release just with one command.
After a few months of study, I decided to gradually move away from Java and embrace Ruby and its ecosystem. I started with side projects and eventually got to use Ruby at work. Nowadays I'm reading more about SOLID and I’m also exercising some elements of FP, such as Data Immutability and Higher Order functions and I look forward to being more involved in the community.
It’s been almost 5 years and I haven’t regretted it, I don’t think I will. I thank Ruby for having opened my mind in many ways, now I think of myself as a better professional capable of transmitting so much more with my code which I think has the greatest value in the abstract world of 0s and 1s.
I plan to write about the tools I use on my daily basis, stay tuned.
PS: English is not my native language, this article may contain some typos or grammatical errors, bear with me, please.