What is a good ruby tutorial / book for a beginner?

I have been reading Chris P.'s book for a while now and I’m stuck at
the chapter where I have to write my own sorting method. All the code I
tried don’t work and when I searched for sorting algorithms and programs
in ruby, ALL the source code I had a look at had a couple of elements in
it that the book I’m reading hasn’t taught yet…I think something is
missing… You guys are masters of this language and have already learnt
it so I’d want to know how you learnt it and what books you read and if
they are downloadable.Downloadable ebooks would be of great help to me,
thank you. :slight_smile:

On Dec 8, 2011, at 8:10 PM, Samuel M. wrote:

I have been reading Chris P.'s book for a while now and I’m stuck at
the chapter where I have to write my own sorting method. All the code I
tried don’t work and when I searched for sorting algorithms and programs
in ruby, ALL the source code I had a look at had a couple of elements in
it that the book I’m reading hasn’t taught yet…

Look at these two tutorials:

http://www.devdaily.com/blog/post/ruby/ruby-how-sort-array-objects-one-field-column

http://www.devdaily.com/blog/post/ruby/how-sort-ruby-array-objects-multiple-class-fields-attributes

I learned more from reading these two entries than in any book when it
came to sorting. In particular, I fell in love with the multi class
field sort. I have been able to do some sorting on data that I could
have never done otherwise. Walk through the tutorials, if you have an
IDE step through the code and watch the array and values that get put
into it and experiment with various sorts.

Wayne

I haven’t learnt classes or hashes yet… It is in the next 2 chapters
of the book… :confused:

I would recommend The Well Grounded Rubyist by David Black. His book is
excellent!


Russell
Sent with Sparrow (http://www.sparrowmailapp.com/?sig)

Thanks a ton Russel :slight_smile: I downloaded the book, going to give it a good
read and see what I find out :slight_smile: thanks again

I really liked Beginning Ruby by Peter C…
If I remember correctly at that point in Chris P.'s book you have
learned about the min and max methods yes?

On Dec 8, 2011, at 11:02 PM, Nick S. wrote:

I really liked Beginning Ruby by Peter C…

Peter also teaches an online course that uses his book at
http://learn.codelesson.com/

Wayne

On Thu, Dec 8, 2011 at 8:10 PM, Samuel M. [email protected]
wrote:


Posted via http://www.ruby-forum.com/.

Hi, Sam :slight_smile:

This is a good exercise! When I first tried to sort an array, it hurt my
brain (literally, it was physically painful) I had to look at a solution
and draw it out on paper to be able to understand it. So don’t sweat it,
just realize you have to be dedicated :slight_smile:

Now, when you’re starting out, you’ll have to deal with people using
things
you haven’t learned about yet. That’s unfortunate, but it’s a just a
fact.
Don’t be put off by them, try to understand what they’re doing, even if
you
don’t understand how they’re doing it. You’ll learn the how in time, and
the ability to understand the “what” without the “how” will be very
powerful.

Now, in the case of hashes, they’re just just a collection, like arrays,
but the difference is that you access them by some arbitrary object
(called
a key, usually a symbol or a string), rather than an integer index.

I advocate playing around with some cards, pay attention to yourself
when
you sort them. What do you do? Can you articulate those steps so that if
you described it to a human, they could understand them? Can you then
take
those steps and write them in code so that a machine can understand
them?

Anyway, here is one I just wrote. I try to use very few array methods,
and
whenever I think something might be confusing (ie “why is he doing
that?”)
I pull it out and make it into a method whose name explains why I’m
doing
it. So if you read from the bottom, the implementation should be pretty
obvious “for each element, insert it in sorted order into a new array”
That’s pretty straightforward :slight_smile: Of course, now we have to figure out
what
“insert it in sorted order” means, so go up to the next method, see if
you
can understand how it works. If you understand each of the pieces, you
understand the whole. You can also feel free to pull out the method
calls
and inline them if you think that will be more helpful for you.

def can_access?(array, index)
index < array.size
end

def make_a_hole(array, hole_index)
current_index = array.size
while hole_index < current_index
array[current_index] = array[current_index-1]
current_index -= 1
end
end

def insert(array, add_index, to_add)
make_a_hole(array, add_index)
array[add_index] = to_add
end

def ordered_insert(sorted_array, to_add)
add_index = 0
while can_access?(sorted_array, add_index) && sorted_array[add_index]
<
to_add
add_index += 1
end
insert sorted_array, add_index, to_add
end

def sort(array)
sorted = []
array.each do |to_add|
ordered_insert sorted, to_add
end
sorted
end

a = [1, 4, 2, 5, 3]
sort a # => [1, 2, 3, 4, 5]
a # => [1, 4, 2, 5, 3]