From: Kris Date: 2005-12-05T06:57:34+09:00 Subject: Re: Getting Over Symbols Very interesting post to a newbie like me. Coming from a "C" family of languages, you just broadened my understanding of Ruby. Until now I failed to see the importance of exposing the runtime data structures of the language. Java/.NET allow it to some extent with their Reflection capabilities. Unlike Ruby (and probably Lisp family of languages) the reflection capablities of these platforms are limited. I guess this is by design. gwtmp01@mac.com wrote: > When I was first learning Ruby, symbols were a bit of a mystery. > I understand them now, and in hindsight, I don't really understand > why they were so confusing. In teaching other people about Ruby and > in reading ruby-talk it is quite clear that symbols are an early > stumbling block for learning Ruby. I'd take an educated guess that > people learning Rails (or any other Ruby framework) struggle with > trying to understand if symbols are a magic feature of the framework > or the language or something else. > > My question to the list is, why? What is it about Symbols that > creates such confusion? I'm getting ready to prepare a two-hour > "Intro to Ruby" seminar and I'd like to find an approach to Symbols > that cuts through the confusion. > > One thought that I've had is that Ruby's reflection capabilities > expose the names of various internal structures (classes, methods, > modules, constants) in a way that is quite foreign to many programmers. > For example, in C you don't have any runtime access to the symbol table > so you would never see a value that could be mapped to a function like > 'printf', 'scanf', or 'main' unless the programmer took the trouble to > construct an explicit symbol table (mapping strings to function > pointers, > for example). An explicit table isn't much of a mystery. > > When you switch to a language like Ruby, Smalltalk, and certainly the > entire family of Lisp languages you are now in an environment where the > data structures of the language runtime are exposed to the programmer. > For a while, the novice will struggle because their mental model of > a runtime environment just doesn't match their new reality and symbols > just happen to be the bridge between the two worlds. One of the first > features of Ruby that many people learn are the 'attr*' methods. Right > off the bat, the novice is exposed to the mappings from strings to > symbols to methods. > > Do folks coming from the Lisp/Scheme world have trouble with symbols or > do they absorb symbols right away because they already struggled with > the concept when learning about atoms? > > Thoughts? > > Gary Wright