Saturday, May 30, 2009

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:

A twentieth century problem is that technology has become too "easy". When it was hard to do anything whether good or bad, enough time was taken so that the result was usually good. Now we can make things almost trivially, especially in software, but most of the designs are trivial as well. This is inverse vandalism: the making of things because you can. Couple this to even less sophisticated buyers and you have generated an exploitation marketplace similar to that set up for teenagers. A counter to this is to generate enormous disatisfaction with one's designs using the entire history of human art as a standard and goal. Then the trick is to decouple the disatisfaction from self worth --- otherwise it is either too depressing or one stops too soon with trivial results.

So, what is it going to be? Another short term dopamine high with little effort involved, or something a bit more elaborate? The extreme of pop culture programming in which every teenager is a "computer genius", or something more along the lines of the artful computer science Donald Knuth talks about?

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.

8 comments:

Janko Mivšek said...

I think you touched well this "shortcoming" of Smalltalk, specially with citing the Alan Kay. If you think a bit further, you came to the problem of too much freedom. And that we don't want to admit to ourself that man simply cannot cope with unlimited freedom. He starts to abuse it sooner or later. That's how I understand the Alan's "inverse vandalism" argument.

Andres said...

I see Alan's "inverse vandalism" as a short expression that describes something we do.

The short (or perhaps shallower) version would be that, to borrow from your terms, we cannot cope with unlimited freedom because we refuse to accept we're rather limited and we are really not as much as we'd like to believe. In other words, we're not humble enough to use freedom effectively.

The longer (or perhaps deeper) version is that I think we tend to hide what we perceive as inadequate in us behind a façade of small accomplishments. We just seem to go for our Andy Warhol 15 minutes of fame, rather than after a lifetime of achievement from a philosophical (meaning the love of knowledge) point of view. Big difference.

Andres said...

To sum it up, I still think this is not an issue of Smalltalk. This is *our* problem.

Janko Mivšek said...

But I insist that it is an issue of Smalltalk as well. Let me explain: we love freedom but as we both agree, we aren't able to always cope with it because we are limited. Or in other words: we can cope with part of it while in other domains we rather choose safety than freedom.

The same goes with Smalltalk programming: we like to have a freedom in expression in some parts, specially those which we love most, but what about more routine parts? Here it seems is the problem with too much freedom.

Expression of the freedom also demands responsibility and responsibility is hard. Smalltalk, that is, its tools should mask developer from this responsibility while on the other hand should still allow the expression of the freedom, just that it should somehow raise the awareness that you are responsible for your acts out of the freedom.

Smalltalk tools shall somehow encourage the best practices which guard us from Smalltalk abuse and make us think twice when going too free into more dangerous waters. Which newcomers and less experienced Smalltalkers don't realise until they end up in a mess...

Andres said...

Janko,

> But I insist that it is an issue of Smalltalk as well.

Ok, but we created Smalltalk, so it is still *our* issue.

> we love freedom but as we both agree, we aren't able to always cope with it because we are limited

Let me refine. I think we tend to voluntarily choose to shy away from freedom. To each their own. I still think that, instead of putting our efforts working around artificial roadblocks, we should work to learn how to deal with freedom. To me, it takes less effort to exercise restraint facing the opportunity to hack stuff than to hack it (and deal with the long term consequences) in the first place.

How do we do that? Well... how did Jordan manage the nth buzzer beater? How did Messi become the best? How did Ravel compose his wonderful music pieces? With a huge, tremendous amount of work, and with ridiculously high self-imposed expectations. Thus, the key is tons and tons and tons and tons of training and strong dedication. Bach said it best: "anybody that works as hard as I do will achieve the same results".

> Expression of the freedom also demands responsibility and responsibility is hard.

Ummm, too bad? Swim or sink?

> Smalltalk, that is, its tools should mask developer from this responsibility while on the other hand should still allow the expression of the freedom, just that it should somehow raise the awareness that you are responsible for your acts out of the freedom.

We should not transfer our personal responsibility to an inanimate entity that cannot defend itself.

> Smalltalk tools shall somehow encourage the best practices which guard us from Smalltalk abuse and make us think twice when going too free into more dangerous waters. Which newcomers and less experienced Smalltalkers don't realise until they end up in a mess...

Smalltalk is not the issue. We the people are the issue. Like you say, we don't like responsibility. One of those responsibilities is to prepare the next generation to take the baton from us. We're not doing a good job of that, and we'd love to convince everybody that the baton is too heavy anyway (i.e.: "Smalltalk is the problem"). I disagree with that assessment. Like I wrote before, our behavior is the consequence of our volition.

Carl Gundel said...

Freedom is essential if you want to live life to the full, and not just in software development. We need to teach what is the best way to live in freedom, not impose a tyranny of suffocating "safety". If we don't build a culture of discipline and excellence then we deserve what we get. If we impose tons of rules to in an effort to prevent people from making mistakes we risk making software development such a burden that few people will want to do it anymore. It should be possible for software development to be an enjoyable activity, and for innovation and discovery to be experienced by newbies and experts. Joy is important in life.

Perhaps I oversimplify, but I hope this communicates an important idea effectively.

Andres said...

> If we don't build a culture of discipline and excellence then we deserve what we get.

Thank you! I agree 100%.

Janko Mivšek said...

Just that building a discipline in nowadays (specially western) world is hardly achieved, almost a no-go. Because a discipline is not perceived as a helper but a constrainer of the freedom. That's how is the perception of the freedom, so wrong but so frequent currently in the western society. And Smalltalk feels these negatives too.

So, if you cannot count on self-discipline of programmers, what to do?

Let me repeat my proposition in a bit different worlds: a gentle push by tools to encourage good practices but discourage bad ones, can help Smalltalk here. That way we won't loose the freedom but on the other side we will be more safe from abuse of that freedom, even by ourselves.