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:
ifTrue or an ifFalse message which takes a
block argument. This means there is no real for if statements, 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 do message with a block, fancy!
#('tom' 'dick' 'harry') do:
[ :each | Transcript show: ('Hello ', each); cr]method_missing to
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.