> Perhaps you should introduce IRB right at the beginning, so that people > can play with more immediate examples. That's a very good idea. I'll do that. > One suggestion - have an 'Objects' section *before* 'Variables' - start > with defining an object (*don't* introduce the term 'object oriented > programming', or classes - just make it seem like an object is the > natural unit of data storage), and then segue into variables. I see your point. Ruby is a pure object-oriented language, so we might as well use OO terminology. I sort of began doing that. For instance, I began unsing the word 'method' right away instead of talking about 'functions' and then object orientation. Now, a problem I have with this that I want to get the reader doing something as soon as possible. It is important to engage the student. How about this?: I can rewrite the "Variables" chapter to introduce objects right away. I'd change the title to "Objects". Something like this (my comments are in [brackets]): <<EOH Objects What is an object? An /object/ is the fundamental unit of data storage in Ruby. Objects have a /type/ (the type of data stored in them) and a /value/ (the data itself). Some examples include: Value Type ----------------- 5 Fixnum 3.14 Float "Hello" String What is a variable? A /variable/ is a name that Ruby can associate with a particular object. For example: city = "Toronto" Here Ruby associates a String object (with value "Toronto") with the name (variable) /city/. Think of it as Ruby making two tables. One with objects and another with names for them. Then think of Ruby attaching a rope between /city/ and the object "Toronto". Whenever Ruby encounters /city/, it will follow the string and arrive at this object. Printing variables [should I call this 'printing objects'?] [ Same as now ] Object types We are going to look at the three most important object types: /Fixnum/ (integers), /Float/ (decimals), /String/ (strings). [ The rest would be like what I have now, except I'd use 'Fixnum', 'Float' and 'String' whenever possible. I'd also mention the '.length' method, as you suggested. ] !Note: Notice that the methods available depend on the object ! type. Not all objects have the same methods. The usual convention in Ruby documentation is to write this in the form Type#method, so that we can say Integer#next exists, but Float#next doesn't. User input and the /chomp/ method [ Same as before. Use the term /String/ more. ] Excercises [ Same ] EOH What do you think of this? You had several other good ideas. But I think I want to delay them for a later chapter. Daniel.