Smalltalk: Our Death has been Exaggerated
So there's been a lot of buzz about Bob Martin's "What killed Smalltalk could also kill Ruby" talk. The problem is, his talk started with misconceptions, and pretty much plowed forward from there. Early on, he stated that "Squeak is pretty much an academic thing now". That's kind of amusing; it's actually pretty hard to find academic use of any Smalltalk - Squeak or otherwise. Even "back in the day", Smalltalk didn't really have that big an academic presence.
Early on, that had to do with the lack of a free implementation, and the insistence on the part of vendors (ParcPlace being very bad this way) of charging universities to use Smalltalk for teaching. That was a dumb idea, and it did an awful lot of damage.
Getting back to his assertions that Squeak (and Smalltalk in general) is isolated to academia, I think Bob needs to subscribe to the Seaside mailing list. Sure, it's not nearly as active as some of the Ruby groups you'll find out there, but there are tons of people active in that community, and there's a lot of commercial work going on using Seaside - in multiple Smalltalk dialects. The coolest thing about Seaside is that it's the first thing that's really gotten all the vendors (and the open source offerings, Squeak and GNU ST) onto the same page.
It took awhile in the talk before he got back on point (which is not to say he wasn't interesting), but then I heard something fascinating - he related a statement from Ward Cunningham such that "it was too easy to make a mess" compared to other languages, where messes would be more obvious (in terms of build time, for instance). Well. I've seen plenty of bad code in Smalltalk; heck, I've written plenty of bad code in Smalltalk. But here's the secret, and it's one that Bob - and I guess Ward - missed:
It's much easier to dig your way out of a mess in Smalltalk than it is in anything else.
I'll give you a live example: this blog server. I originally had all of the storage code sitting in a "god object" called "BlogSaver". It was convoluted. It was a pain in the neck to modify. Adding, or god forbid, refactoring anything, was a nightmare. But...
Not only did I refactor it all, I did it without taking the server down, by patching the server while it was running. And - sorry to break this to you, Bob, but no, I didn't have tests for that stuff. Sure, I should have tests, and it likely would have helped. But you know what? I was able to dig my way out of that hole, patch the server on the fly with the update, and move along... and it took me oh, I think a couple of days. In fact, it didn't come down after that until there was a major power outage in Cincinnati (since then, Cincom has installed backup generators).
I have more bad news for Bob on this theory that a lack of proper testing will kill a community. Were that true, C, C++, Java, and C# would all be failures. And no, big messes in those languages aren't prevented by lengthy compile times and pain, either. There are lots and lots of absolutely enormous systems built in those languages, and many of them were (and are) being built without TDD. Sure, it's painful - I remember my days as a C programmer well enough :) The reality is, people build messes without regard to the language, and the relevant point is which language and tools make escape from the mess easier.
Here's another thing, too - in a quick toss off, he talked about the time people spend in debuggers. Oh boy, the common "debugging is bad" thing. Just a few minutes ago, I was working on my Facebook interface. Sure, I could read the doc, write a test that expects the stuff coming back from that, and... discover that the doc is way less useful than I'd like it to be. On the other hand...
I could just not write the full code at all, let the thing break, and ponder the response in the debugger. While there, I can write the code based on what actually came back, and watch it work. Rinse, Repeat for each one of them
Yes, tests are useful. But, the debugger is not something to be feared. Rather, it's a great tool to be used in order to have the computer do all the memory work for you. I can get a lot more done by working with decent tools like the Smalltalk debugger than I can by assuming the doc is good and writing tests that just help me a whole lot less than you might think.
On arrogance, Bob has a point - back in the 90's, Smalltalkers really were arrogant - I say this as one of the people who displayed a lot of arrogance back then. Then again, C++ developers were pretty arrogant too (go search the usenet archives if you don't believe me). Trust me - the arrogance ran in both directions :)
The place Bob takes this point is truly absurd - that Smalltakers didn't want to deal with the outside enterprise back then. I know where he gets that idea from, but the reality is, Smalltalk's problem was pretty much the exact opposite: all we had were enterprise projects. There was virtually no activity going on outside the enterprise, because the Smalltalk vendors set pricing and licenising so as to keep it that way. if you were an individual developer, it was easy to get a C, C++ (later Java) set of tools - but it was well nigh impossible to get ahold of Smalltalk. It wasn't until the late 90's that Squeak came out, and VisualWorks (and later ObjectStudio) didn't come out in non-commercial versions until a year or two later.
So to summarize - I'd have to say that Bob made a number of assumptions that I just don't think hold up. Smalltalk had problems in the past (and continues to have some of them now) for a few simple reasons:
- Through the late 90's, it was just too hard to get Smalltalk unless you were an enterprise developer paying big bucks
- Smalltalk asks you to change a number of things: use our tools (not your editor), use our SCM (not things like SVN, et. al.), use a syntax that isn't C-like
- Use a non-mainstream, niche language and stack
Notably, Bob didn't bring up any of those. I'm not wearing rose colored glasses; I realize that we do ask you to try new and different things when you pick up Smalltalk. Instead, Bob focused on things that don't really have a lot to do with what caused Smalltalk grief - meaning, his points really don't have much to do with where Ruby's going, either.
Update:I rather like Giles Bowkett's response - scroll past the Twitter conversation snapshot; it's worth reading:
It's great to be a dynamic speaker who gives a thrilling presentation. But it's better if you can do it while saying things which are true.
Technorati Tags: ruby, railsconf, bob martin





Comments
Skeptical
[Giles Bowkett] May 9, 2009 2:20:44.000
Everybody I know is praising Uncle Bob's talk to high heaven, but I watched about a minute of it and my bullshit detectors were screaming bloody murder before he even finished his first sentence. I'll probably watch it sooner or later, and develop some more sophisticated opinion than just my initial gut reaction, but I think all the points you raise here sound valid. Changing SCM and editor are the big obstacles to Smalltalk in my opinion, but nothing killed Smalltalk because Smalltalk isn't dead. There might not be a lot of work, but the work there is pays well, as far as I can tell, and that's gotta be worth something.
Bob's main point
[Janko Mivšek] May 9, 2009 6:57:41.000
Bob also has some good points and we the Smalltalkers need to openly listen to them, not just fail down to counter-bashing, as usuall. That way we are just confirming him, specially his "arogance" part.
And which is his main point? In my opinion his citing of Ward Cunningham answering to the question: 'What killed Smalltalk?' with: 'What killed Smalltalk is that it was just too easy to make a mess. C++ programmers are lucky, becasue a language punishes you if you make a mess ... but Smalltalk people could add mess upon mess, with no immediate ill effects...' (around 21min in the talk).
I'd really think deeply about this answer, because I feel here Ward is right. It is namely a question of too much freedom.
C++
[petrilli] May 9, 2009 10:22:30.000
Janko - C++ just punishes you period. You have to suffer for anything to work.
A point not raised
[lk] May 9, 2009 10:45:43.773
Two things stuck me after watching Bob's presentation:
1) He has some good points that we should listen to, no matter what the language, in terms of attitude and approach to others. This used to be called "works and plays well with others" once upon a time. It's still important, and has a dual meaning when we consider interfacing Smalltalk to the rest of the world
2) There is no serious mention of what I think is an important consideration, particularly for the individual developer - Ruby is free. Rails is free. Java is free. This has a LOT to do with an individual devleoper taking the time to seriously take a new language for a spin. As is pointed out, Smalltalk wasn't free - but it is now. You can get it and prove its value (to yourself and others) before you need to invest money.
The second point is the BS antidote - although Bob's talk was entertaining, he was highly selective about what he spent time on, and not mentioning the importance of "free", especially with respect to Ruby (!), Rails, and its growth, seeems to indicate a desire to slip off that point. I think "free" had a lot more to do with things than is acknowledged in Bob's presentation. It's the elephant in the room.
Bob was just playing to the gallery, surely
[Krasna Halopti] May 9, 2009 12:57:43.642
Surely Bob was just playing to the gallery - surely he's too smart to really think some of those things he said?
The fact that the audience lapped it up says more about them than the talk itself - it's a typical pop-culture audience reaction. When you have to balance between informing and entertaining such an audience, perhaps it's easier and safer to stay on the entertainment side of the tracks. Hence the long intro about the birth of the Solar System, Life, the Universe and Everything.
Your comment about the expense of Smalltalk environments definitely struck a chord with me - I remember not being able to afford the Digitalk offering, never mind the stratospheric pricing of the products from Parcplace (eventual owners of Digitalk).
[] May 9, 2009 22:20:44.583
I don’t know if Smalltalk ever had a place in university teaching but it’s clearly suited for research and experimentation. The development of modern graphical user interfaces and dynamic OO languages owe a lot to Smalltalk and the whole Dynabook ideal still drives the environment toward simplicity.
Learning Smalltalk allowed me to appreciate objects. I’m still amazed how it empowered me to explore and change the object world at runtime.
[] May 9, 2009 22:26:06.741
Large header in my previous post seems to be the result of copy pasting text from MS Word into Firefox.
[Vassili] May 9, 2009 23:00:33.204
I can totally see a talk in a different venue on "What killed classical music could kill hip hop, too."
Expense
[cplusplusguy] May 9, 2009 23:31:51.610
Hi, I'm not a smalltalk or ruby guy, but this talk and thread has interested me.
In the mid-90s, my employer was looking for at potential languages for building a new dynamic system. Smalltalk was our preferred choice, and the entire engineering team was on board. However, its expense effectively killed that. At the time, we were working with ParcPlace for pricing, I believe. In any case, the system was ultimately built on C++ with dynamicism added in a proprietary language. It's too bad for Smalltalk, because the product would have given a reasonably high profile in an industry where I don't think it's ever been used. (Apologies for lack of detail here)
But... now that dynamic languages are the clear direction for the future, I don't think Smalltalk should be counted out. All it takes is one "killer app" to get a language noticed. Ask the Ruby guys.
Ward Cunningham was right...
[] May 10, 2009 1:04:09.120
...but I think the context of the quote is being misinterpreted somewhat. My impression from the video wasn't that Bob was misrepresenting Cunningham's meaning, but just that he wasn't explaining it very well.
'What killed Smalltalk is that it was just too easy to make a mess."
I think that's absolutely true, but it isn't necessarily a bad thing. The truth is that in Smalltalk it's often easier to do anything, both good and bad. It's rather like saying that the problem with a motorcycle, compared to a bicycle, is that it's just too easy to go too fast and wreck one. With programming languages, as with bikes, if you give a powerful tool to an undisciplined, inexperienced user, they can cause a lot of damage.
If the only vehicle you give someone is a one-gear bicycle with street tires and training wheels, it'll be really hard for them to hurt themselves, but they're never going to go very far or very fast, either.
Debugger, testing etc
[Friedrich Dominicus] May 10, 2009 4:55:20.242
Well for a dead language Smalltalk seems to be still quite alive. I do not have heard the talk but I can assur that tests are not the solution to all problems. I'm sorry but I have a lot of code which just was develpoped piece by piece and the end code does ot contain the "starting" point. I guess it's the same in Smalltalks as in C. I do not fear the debugger, in either of it. In fact I always first run every code through it. I check my assumptions and see wheter I'm on the right track. I also use the compiler as type checker. I guess those just saying you have to do design properly and write it down would disagree with it. But for me deveopment is always, implementing a first design, to see if it seems to be sound and than adding things piecewise. The smalltalkers to this since ages AFAIKT. However I still find a few realyl trouble spots, for me Squeak is such. I tried over an over to get into it, but the whole approach is not something I really get. And dispite any other claim there is not one good book about Squeak and Morphs....
Regards
Friedrich
Squeak Book
[Serge Stinckwich] May 10, 2009 5:34:29.357
@Friedrich : did you try "Squeak By Example" book ? http://www.squeakbyexample.org/
Embarrasing Condescending twaddle - Bob should be ashamed
[Tim] May 10, 2009 6:48:28.602
I'm not sure why Bob Martin is given as much airplay as he gets - whenever I've seen him talk he always puts his foot in it.
However this latest episode I think deserves a little scrutiny - First of all I was quite embarrased for the Ruby crowd at that talk - he made many references to previous techniques and ideas and then in a very condescending manner says (repeatedly) "but of course you wont know about that", or "you can look that up later" - how arrogant (and arrogance was a minor thread of his talk).
I think that the Ruby and Smalltalk groups should stick together - just as there were (and still are) a lot of good ideas in Smalltalk - I see some excellent ones coming out of Ruby and I admire the attitidue and enthusiasm to break rules and push forward new and innovative ideas (just like Smalltalk did - isn't it ironic that the same energy in Smalltalk that invented things like Refactoring, xUnit, TDD is also prevelent in Ruby pushing on things like RSpec etc).
I am particularly annoyed about the Ward Cunningham reference (which seems to be a big part of the evidence for his talk). I wasn't there when Ward was asked that question about Smalltalk - but it sounded suspicious to me, not what I would expect Ward would say. But the quote sounded familiar, and I remembered that he was interviewed in 2008 on Floss Weekly episode 27 which you can listen to yousel: http://twit.tv/floss27
At about minute 28 there is something similar to what Bob mentions - Ward talks about how valuable it is to run a program that is only half done - he mentions that in Java it takes about 10 object to do anything and then you "have to prove to me your good enough before I'll run" - "you are swimming up the stream for sure" - "the one thing I can say about static languages is that they can reason a lot more and you get more powerful refactoring, but boy you need them a lot more"
I don't glean that same idea that its too easy to create a mess at all. In fact, having recently worked on Java and a C# projects back to back - I can say that I've never seen such ridiculously conceived code in a very long time - what an aweful mess was made even with the help of a statically checking compiler. And believe me, the available refactorings don't even begin to help you sort out the mess.
What I can say about the Smalltalk image, is that its full of wonderful examples of how to write good code - so much so that you can't help but mimic those wonderful patterns yourelf. I love sharing this with Ruby programmers and showing some good examples of using Blocks (which work well in Ruby - and even in C# as well).
If there are any Ruby readers out there - please politely ignore Bob - I was embarrased. I would say that the real thing that kiled Smalltalk was the cost of the tools. This has been rectified now, and its nice to see that in Ruby the tools are also coming and that they have a reasonable price on them.
[] May 10, 2009 7:18:40.748
The Seaside list is a good example how dead Smalltalk is. The volume is embarassingly low considering it's pretty much the only game in town. There isn't even one Seaside conference. Probably every PHP framework and CMS has more users, they certainly do have several dedicated conferences.
Mainline Squeak is dead, development has stopped, blocked by relicensing or is embarassingly slow. Sure it's more balkanized than the Balkan but there is no coordination whatsoever between the forks. Pharo is alive but academic, not surpisingly since it's Stef's baby.
Re: Smalltalk: Our Death has been Exaggerated
[ anonymous] May 10, 2009 11:22:20.590
Comment by anonymous
The Smalltalk conference is ESUG, which will be held in Brest this year. There's always a ton of Seaside there, and the biggest "buzz" is always around Squeak and VisualWorks (typically in that order).
Squeak books
[Friedrich] May 11, 2009 5:57:25.774
[Serge Stinckwich] May 10, 2009 05:34:29 EDT
@Friedrich : did you try "Squeak By Example" book ? http://www.squeakbyexample.org/
Yes I bought that book and found it more disappointing.
failing memory
[Isaac Gouy] May 11, 2009 11:29:02.468
James Robertson > Through the late 90's, it was just too hard to get Smalltalk unless you were an enterprise developer paying big bucks
Smalltalk DOS/V $150
Smalltalk DOS/V286 $395
Smalltalk Macintosh V/Mac $395
Smalltalk OS/2 V/PM $475
Smalltalk Windows 3.0 V/Windows $475
"The Smalltalk Report 1991" issue 1 (pdf) p17 advert
Mea Culpa
[Isaac Gouy] May 11, 2009 12:47:39.444
Mea Culpa, Smalltalk/V was $20 more -
"And the resulting application carries no runtime charges. All for just $499.95"
"The Smalltalk Report 1991" issue 2 (pdf) p27 advert
Re: Smalltalk: Our Death has been Exaggerated
[ anonymous] May 11, 2009 14:10:33.604
Comment by anonymous
Bearing in mind that Digitalk raised their prices to the $3k - $5k level in 1993. So yes, for a brief snapshot in time, Digitalk offered relatively inexpensive Smalltalk. That door shut quickly.
[] May 11, 2009 14:37:42.664
Yeah, ESUG is exaclty what I mean. ESUG is tiny, 200 people or so and there is only one track. With ton you probably mean two or three presentations by the Seaside developers themselves. Is that it, seriously, three talks in a whole year? Are you kidding me? Compare that to something like drupalcon. And there a tons of frameworks like Drupal.
And Smalltalk Solutions doesn't even take place this year. Alive an kickin', yeah right.
There's a reason....
[ anonymous] May 11, 2009 16:11:14.977
Comment by anonymous
That we say Scene not Herd....
Where's the beef?
[David Koontz] May 11, 2009 21:22:54.319
As a full time Rubyist, I too was not very impressed by Bob's talk. My BS meter was going off at the early showmanship and almost complete lack of content. The audience's enthusiastic acceptance of it as some sort of holy message (it felt very much at times like a sermon), was even worse. Maybe it's an idol worshiping Rails cult-of-personality thing that I just don't get. I use Rails, sure, but it's not all I do with Ruby. Not all Rubyists are arrogant, self righteous TDD zealots, at least not until they figure out a way to assimilate us.
"ESUG is tiny, 200 people or so and there is only one track. With ton you probably mean two or three presentations by the Seaside developers themselves"
RubyConf was 200 people and single track in 2005 with 1 presentation on Rails. Was Ruby also a dead language in 2005? Many might have said yes.