> To my knowledge there's no programmatic access to the underlying  
> symbol
> table in Ruby.  (Am I wrong about this?  Have I missed all the
> table-manipulating fun? :-)

When you define an instance method you are adding an entry to the
method table for the class.  The key for this table is a symbol so
you might be implicitly adding an entry into the internal table
of all symbols (maintained by the Symbol class).  When you call
method("puts") or send("puts") you are looking up an entry in the
method table. When you call remove_method("puts") you are deleting
the entry in the method table. Same situation for constants (which  
implicitly
means Modules and Classes). This is what I meant by symbol table.

> Again, I think that from the programmer's perspective, you can map  
> from
> strings to methods just as easily:
>
>   attr_reader :a
>   attr_reader "a"
>   attr_reader :a.to_s
>   attr_reader "a".to_sym

Yes, it is this mapping from strings/symbols to methods that is novel
for many programmers.  I think it is the novelty of this built-in
mapping ability that gets confused with the abstract-data-type aspect
of Symbols.