I find Logan's answers accurate and complete, except for one, which is a little complicated. Let me add a little to his answer. John M. Gabriele wrote: >> - Python uses _foo, __bar, and __baz__ underscore notation >> loosely for private references. Does Ruby have similar >> notions of "privacy"? Logan Capaldo wrote: > Method visibility can be controlled via the private, public, and > protected key words. You can always get past these of course by use of > #instance_eval for instance. In "foo.bar", bar is always a method, not a variable. What we call attributes are methods that behave like attributes. "foo.bar = baz" calls a method called bar=. We use attr_accessor, attr_reader and attr_writer to create attributes with their own variables. For example, "class Foo; attr_accessor :bar; end; foo = Foo.new" So private, public and protected modify methods. We use sigils for non-local variables: $global, @instance_variable, and @@class_variable. You can't say foo.@bar, and foo.bar bears no necessary relationship with @bar. Finally, the methods private, public and protected can be used in two ways. Without an argument, they modify the visibility of all the methods defined after them in the current scope. They can also be fed specific method names to modify the visibility of particular methods. Cheers, Dave