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.

Tuesday, May 26, 2009

You have to be kidding

A new type of bank has emerged. Uhh... what to say, right?

Ok, here's the deal. If reincarnation or ESP existed, they would offer a tremendous competitive advantage. Evolution would immediately weed out anybody that

  • had not reincarnated yet, because those who have would remember stuff from their previous life and would not need to study anything etc,
  • did not have ESP, because those that do would win the lottery, the races, would never get killed etc.
Effectively, the only people left would have reincarnated several times, be incredibly wise, and would have awesome ESP powers. Since none of that has happened, no such thing exists. See also Fermi's paradox.

Friday, May 22, 2009

New presentation at PDX.ST next week

Next Tuesday, I will give a new presentation at the Portland Smalltalk User Group. The talk is entitled The Laws of Form and Computer Programming, and it shows how two extremely simple principles govern what we do when we write software.

The meeting begins on Tuesday May 26th at 6:30pm. The presentation will probably start at about 7:00pm ish. The location is the Fourth Avenue PSU building, at SW Fourth and Harrison, room FAB86-01. See you there!

PS: you can find more about The Laws of Form and how they relate to Smalltalk in particular here.

Tuesday, May 19, 2009

Another first today

Last year in Amsterdam, a taxi driver asked me if I was a professional whistler. You know, there are some folks who have actually recorded jazz with whistling solos, amazing stuff really. I was just whistling U2's Where The Streets Have No Name, it was nothing out of the ordinary. But anyway, a while ago I was just whistling some random jazz tune, and I got whistling requests.

Requests!!!

Maybe I should get myself a sax or something.

Sunday, May 10, 2009

And speaking of doing...

I've been quite busy with the Fundamentals book. I am working with a (non technical) editor, and as a result I basically have to rewrite what I have written so far. I am currently at page 97. In 200 or so pages, I will catch up with the leading edge and continue writing about polymorphism.

Saturday, May 09, 2009

What killed what?...

These days, there's a lot of talk about what allegedly "killed Smalltalk" and so on. I think it's the wrong observation. It's not about Smalltalk, or Java, or Ruby, or whatever. It should be about what we do with the language of our choice. So my question to those that spend large amounts of time wondering what is or is not the most popular language on Earth is: when you finally reach your death bed, are you going to be satisfied with the time spent talking about stuff instead of doing stuff?

How much progress could we have achieved if we had skipped the discussion about what's dead or alive? How many man hours have we wasted producing hot air? How about doing something productive instead? Can we move past yet another incarnation of CRUD applications already? I know building CRUD applications is rewarding, but it's because we've done CRUD for decades and so we hardly ever fail. This type of program is not a real challenge anymore. How about creating something new for a change? Please?