Open yaauie opened 11 years ago
This is great material, but I wonder how useful the distinction will be to beginners? I would suggest we wait until one of the more advanced ruby sections before introducing these details.
@RobinClowers yeah, I get that. Maybe it can be introduced in a shallower way? Or maybe with a tighter analogy? Like how a book in the english language can cause the reader to create a new world in their mind? It sure is hard to put on the newbie hat when you're no longer a newbie, but I could've saved months if I really got object-oriened as a concept from the get-go.
Lots of questions, I'm really open to ideas on how to add clarity and reduce noise.
@yaauie I agree, it is very difficult to see things from a layman's perspective. I think that adding the extra explanation does not hurt. The language in which you present it is basic enough to be understood :monkey:; People who are detail-oriented will greatly benefit from this while those who like to see the big picture will be unaffected.
I would love to hear some other opinions on this, I think people with no programming background won't really grasp the distinction. I think after they have some more foundation, this kind of material would be great.
@RobinClowers I had my sister read the article before I wrote my comment. She has no background whatsoever in computers and is a Junior in high school. The only issue she had was with understanding what Product.new
did (she didn't know what the word instantiate meant).
Maybe drop that comment, "You'll learn more about instantiating objects later."? This will make more sense when talking about building objects. At first, all you need to know is you have an instance of the class which you can manipulate.
The github diff view for prose is rather intimidating and hard to follow, so I've generated a clean diff as a gist that should be a lot easier to read.
The diff was generated against the word-wrap commit & copied to my clipboard with:
╭ < yaauie@beorn ~/src/ada/curriculum (ruby-the-vm-versus-ruby-the-language=) >
╰ $ git diff 28f7683 -U10000 | pbcopy
Great stuff. I'm down with explaining objects by teaching people about Platonic Forms.
I am 100% ok with saying "ok remember when I told you everything was an object LOL J/K!" Science does that every year in school. Often we have to layer on foundations without nuance, as much as it irks our desire to be precise and give the student Truth.. Truth often requires conditionals and ambiguities through abstractions, having to continually ask "oh wait, is this that one time when Axiom is in fact not true?"
Anyways, I like what I read in the clean gist, but I assume its a little over their heads at the proposed point it comes in the curriculum. Thoughts?
Let's resurrect this thread. @kerrizor it sounds like we are mostly on the same page; this is great material, but should come later in the curriculum. Seems like someone needs to make a call about which direction to go with this...
I'm especially open to feedback on this patch.
Separating the concepts of the world-you-create and the language-you-use-to-create-it is the one thing that actually made things click for me, and opened the doors for me to dive in deeper and really understand what I was doing instead of copying and pasting from forums.
(cc: @eliseworthy, relevant discussion in #6)
Introduce the Ruby VM and the Ruby Language as two separate but closely-related concepts. I think this helps combat the "everything in Ruby is an object except lulz I tricked you these things aren't objects" we had going on. While I think this is a necessary distinction to make, I'm not sure I went into enough depth describing each Ruby program as a little universe consisting only of the concepts introduced in the code it includes. Ruby, of course, isn't the only way you can interact with the Ruby VM -- yay C-ext in MRI and Rubinius, & native Java-code in JRuby -- but it is the language built around the concepts that the Ruby VM provides.