This is a principled approach to programming. We use Ruby as the delivery language, but the things you learn here applies to all programming languages. What you learn will be important in your day-to-day Ruby programming, but my primary goal is for you to understand common, important concepts of computation.
Ruby made unfortunate mistakes in its design—mistakes that we Ruby programmers have to deal with on a daily basis. Of course, we get used to those mistakes and start to think of them as "features" or "that's just how those things work." I will often "ignore" those mistakes at first so that you will understand the fundamental idea. The mistakes are edge cases that we have to worry about, but they should not get in your way of learning. Hence why some people (mainly people with exposure to Ruby) will consider the order of things very odd.
Type the examples into IRB and complete every exercise. Merely reading will not give you true understanding.
Important vocabulary are in bold.