Chris....
Thanks for the great feedback. Glad you found the post interesting.
I did in fact overcome all of this. I am re-emerging into the world of Squeak/Smalltalk with tentative steps these days as I evaluate it vs. PythonCard as my next development tool of choice. You can follow my thinking and my progress in bits and pieces on my blog if you're so inclined (http://www.danshafer.com/onemind). I was recording here my very early experiences and fears; they are long since dismissed and I find that I now have a proliferation of images containing all sorts of stuff and experiments. Playing God in the Image is certainly fun. (An aside: I'm a spiritual teacher and writer by profession, so I couldn't help but turn your note into a little saying. "The Bible tells us we are made in the image and likeness of God. In Smalltalk, your image is created by a likeness of God." FWIW.)
On May 8, 2006, at 2:30 PM, Chris Muller wrote:
Nice post Dan,
<snip>
Well, I think "familiar" is the key word here, because this is indeed a cakewalk in Smalltalk too:
"print it" String streamContents: [ : stream | (1 to: 10) collect: [ : n | stream cr. 1 to: 3 do: [ : exp | stream tab; print: (n raisedTo: exp) ] ] ]
Coding time: 2 minutes. I doubt I could do it in Pascal in < 10 minutes though. It's just familiarity, thats all.
Five minutes after I opened and installed Basic, I had it working. Pascal took longer but that was because the install took longer and I had to learn about compilation. I could not get it to run in Smalltalk/V to save my gluteus maximus. I can't now remember all the gyrations I went through before I finally threw up my hands and asked for help.
When looking at the simple code above, what do you think is the reason it eluded you so?
Well, your result is nothing like I ended up with; you found a much more elegant solution (iterating over the exp for example). But note that to create that code I'd have to know about the class String, streams, collect: (a powerful but really new concept) and the raisedTo: method. Not hard stuff, of course, but, as you properly say, it's a question of familiarity and only that.
In Basic, it's something like:
repeat with i = 1 to 10 print i; i*i, i*i*i end repeat
Essentially the same in Pascal. But note that the "print" statement just prints stuff in a predictable place. When I solved the problem in Smalltalk, I ended up believing that I needed to use the Transcript for output, which involved figuring out how to get one to open and print stuff.
Also, I should note that this was my first attempted program out of the box without reading any docs. That's how I'd done it in Basic and Pascal, so I expected a similar result form Smalltalk. It was my familiarity with other environments and my inaccurate expectation at work. But I suspect a LOT of folks who encounter Smalltalk do so with a similar mind set and walk away bewildered.
Dan