Ward's comment
At RubyConf, Uncle Bob stated that something that "killed Smalltalk" (?) could kill Ruby too. He quoted Ward Cunningham as saying that the issue is that in Smalltalk it is too easy to make a mess. But what does that assertion mean?
I would suggest that making a mess is difficult when the existing source code base imposes restrictions on us. Not just any mess works, it has to be a sophisticated hack. Those take time and effort when we are working with unnecessarily convoluted software. In effect, existing complication makes it much harder for us to get immediate gratification, and the consequence is that we do not end up doing the first thing that crosses our minds. In other words, when there is significant software debt, we become more concerned about piling on additional debt, and so we stop and think before we act. Smalltalk has comparatively little software debt. In fact, it exercises a great deal of austerity to get out of our way. Thus, if this line of reasoning regarding our attitudes toward debt is correct, it has to be tempting to just write any kind of code that does the "trick" so we get immediate gratification. What's a bit more of debt when we are not paying a lot of interest, right? If we can reap the short term benefits of debt, while passing on the long term burden to the next one in line, so much the better.
We should recognize this pattern of short term benefits, of "just one more purchase on the credit card", of "more house than we could reasonably afford", of "exponential growth forever", of "après moi, le déluge". We should already know the consequences. And, even when we are consciously aware of them, we just do not have the power to restrain ourselves*.
Therefore, under Ward's paradigm, it seems that languages have to be somewhat convoluted to work best. In other words, Smalltalk blocks have to be bad because they are easy. Instead, Java's generics have to be good, even if they expand a single statement to a 15 line paragraph. It seems as if the intrinsic difficulty will keep us concentrated (and distracted) enough so that we will not readily produce horrendous hacks.
Thus, I can't help concluding computer languages are designed with some perceived society behavior average in mind. What should we make of strict type checking? What should we make of generics? What should we make of the typical hacks we see in Smalltalk, the apparent ease with which a mess is made that Ward alleges to? What should we make of beautiful Smalltalk code? And what should we make of the minds of those that design languages?
I have a feeling Smalltalk was designed for those that, although uninhibited, are capable of letting go of immediate gratification because they have high expectations of themselves. It's not about inverse vandalism, it's about doing transcendental work and making extraordinary a reality. It is about us and how we realize our potential, rather than a language and being a "code monkey". Alan Kay phrased this issue eloquently:
As far as I am concerned, I will live only once. I have no interest in settling for some "socially acceptable" degree of mediocrity. In particular, I have better things to do than blindly accepting somebody else's idea of how much software debt I ought to carry. Thanks, but no thanks.
* Sometimes, we rationalize our actions by calling them "human nature". But this "nature" changes when you look at different societies, so it's not natural. It is arbitrary, it is taught, and it is learned. One way or the other, we are always responsible for our actions. Behavior is the consequence of volition.
