Almost 1 year ago, I joined a great start-up Thinknear (acquired by Telenav). From a software engineer’s standpoint I did a complete 180 in the direction I was heading (outside of the fact that I was dabbling in Project Management at my old company Vistaprint).
My previous company, Vistaprint, was a .NET shop for the most part. I worked with C#, VB.NET, ASP.NET, IIS and MS SQL Server. When I joined Thinknear, it was completely different. We used Java, Ruby on Rails, Heroku, Apache Tomcat, Memcached, etc (the list could go on for awhile).
Anyways, I took learning Ruby to heart. It had be awhile since I learned a new language and it was quite different than anything I had done before. As I mentioned in earlier posts, I started from the ground up with tryruby.org. I had about 3 weeks between knowing I got the job and starting the new gig (mainly because I had to transfer my visa).
I remember my boss (if you can call him that on a 3 person dev team), told me you can always spot a new Ruby person who came from an OO language. It was hard for me to understand at the time, but now I get it. I feel I am in a position to help the Ruby new comers. So I want to introduce you to the “The Ruby Way” (a.k.a “Idiomatic Ruby”).
When I first started at Thinknear my code reviews were painstaking. My teammates didn’t let up in learning Ruby and they made sure I would do everything properly.
The one thing that helped me the most was writing done every non-idiomatic mistake I made on code reviews and made sure I looked over the list before I submitted to GitHub. I made very few mistakes more than 3 times, which believe me…was a HUGE step up from where I was coming from.
I am only 1 year into Ruby, but I am loving it! It is a very natural and concise language. It also helps you focus on the core algorithms and problems instead of a lot of other nuances in other languages. I will be soon be ready to read my Metaprogramming in Ruby book, which will be fun and probably mind bending. But here are my list of Ruby/Rails Idioms that I learned early on (low hanging fruit):
- Ruby Style Guide – essential if you want to contribute to projects
- Your best friend which you will be using a lot: http://ruby-doc.com/
- Your best friend which you can try anything: irb
- Do not use for i = 0; i < array.size, i++ etc…. use iterators!
- Iterate over each element
array.each { |element| puts element }
- Iterate over each element, but transform each item:
array.map { |element| element + 1 }
- So many cool iterators: select, reject, inject
- Iterate over each element
- Do not use array.length > 0 or array == nil
array.present?
is the bomb! It checks for nil AND to see if there are any items in the list (Rails only) – this also works for hashes- Checking for nil on any object? Use
object.nil?
- Checking for emptiness?
array.empty?
- Opposite of empty? =
array.any?
- Worried that something might be nil?
try
is your friend! Especially useful for hashes: Instead ofhash.has_key?('missing-key') && hash['missing-key'] == value
you can usehash.try[:[], 'missingkey') == value)
. Try will return “nil” if it can’t return anything. - Need the opposite of a condition? Do not write
if !condition ... end
, but instead use unless!unless condition ... end
- Bonus points for writing conditionals on single line:
do_something if condition
- Bonus points for writing conditionals on single line:
That is all I can think of, but I wanted this to be short and sweet and introduce some glaring Ruby newbie mistakes. There is so much to offer in the language and I hope you have as much fun as I do!