Somehow I found myself reading an interesting article on Smalltalk yesterday which led to a couple of comments in IRC:
tyler: man, I am getting that "I should really learn smalltalk" feeling again tyler: everytime I get close I find myself downloading a squeak VM and then going "LOLWTF IS THIS SHIT"
I said this before I left the office and somewhere in the back of my mind I kept thinking "why can't I crack Smalltalk?" This continued through most of the evening until 9 pm (21:00) rolled around and I decided that I wouldn't let that commie Alan Kay defeat me.
After finding this fantastic series of screencasts I set about learning some Smalltalk. Not enough to build anything major, but enough to really understand Smalltalk's core concepts.
In exploring the world of Squeak, Pharo and Amber I believe I have experienced the full spectrum of emotions that my circuits provide, all the way from unfettered rage to mild bemusement. Despite all of this, around 2 a.m. I found myself lying awake in bed wanting to marvelling at the design of the language and wanting to learn more.
A couple of things still bug the hell out of me:
The things that I do really like however:
ifFalsemessage which takes a block argument. This means there is no real for
ifstatements, it's all implemented with the basic Smalltalk primitives: 1 < 3 ifTrue: [Transcript show: 'Truthy!'] ifFalse: [Transcript show: 'Untruthy!'] How about a for loop? Surely the language must have a for loop! No way José! Instead an Array object just takes a
domessage with a block, fancy! #('tom' 'dick' 'harry') do: [ :each | Transcript show: ('Hello ', each); cr]
method_missingto magically generate methods on-demand, leaving a system that's abominably difficult to inspect and debug. Thus far I've not found any slight-of-hand in Smalltalk, which is a good thing.
I can really see where Objective-C pulled from Smalltalk having now experienced some Smalltalk myself. That said, it's rather unfortunate that C and some additional custom bits have creeped into Objective-C making it less Smalltalky than it once was.
I am definitely going to continue to tinker with Smalltalk, likely with Pharo as my VM of choice. My only concern is that I will grow to resent the other languages I use regularly which feel dumber than a language invented almost 40 years ago.
Update: This is the original post that pushed me over the edge on tinkering with Smalltalk.