[Note: if any of the thumbnails looks too illegible, you can click on it and get the large version.]
Thank you very much. I like you too. Especially when you like me like you're liking me right now. Thank you for liking me. And thank you for your applause. I confess, I'm human--I like applause. I like attention.
Speaking of attention, how many of you saw the August 10 issue of Forbes magazine? Wait, my daughter made me something. <dons orange glasses>
Anyway, I like applause. So let's talk about applause. Applause is primarily an auditory or audio symbol. Like any symbol, it seems kind of silly if you think about it too much. I mean, come on, why in the world are you sitting there banging your hands together? Your palms probably hurt now. And you're gonna get arthritis when your older. Clapping is silly.
However, it makes a great noise, doesn't it? That's the point. Other people hear you clapping and they may decide to clap too. It's something a crowd can agree on. It is, in short, a symbol that ties a community together. Most symbols work that way.
I love auditory symbols. If you've ever visited my house, you know that my house is full of them. So last year I filled my keynote speech with all sorts of weird sounds. The sound-oriented folks in the crowd loved it, but the visually-oriented folks felt a bit left out. So this year I've decided to concentrate on the sights rather than the sounds. Sort of a WYSIWYG. What you see is what you get. Maybe next year we'll do smellovision. We can compare the smell of a camel to the smell of a rose.
Or maybe we can't...
But this year it's pictures. So here's my first figure.
Study it carefully.
In case you were wondering what this is, it's called a circle. It's a very nice circle, as circles go. Very pretty. Very symmetrical. Very simple.
Now if you're a reductionist, you'll say it's only a circle, and nothing more. Well, actually, if you're really a reductionist, you'll say it's a just bunch of photons, but we won't go there, because it wouldn't shed any light on the subject.
Well, actually, I'm not.
If you're not a reductionist, then the circle you see here does not exist in isolation. It exists in relationship to many other things, and in fact takes its meaning from them. In order to understand this simple circle, you have to understand its context, which means you have to understand something about reality.
So here's a picture of reality.
As we all know, reality is a mess.
This is a picture of many things. It's a picture of air molecules bouncing around. It's a picture of the economy. It's a picture of all the relationships of the people in this room. It's a picture of what the typical human language looks like. It's a picture of your company's information systems. It's a picture of the World Wide Web. It's a picture of chaos, and of complexity.
I hope it's not a picture of how well my talk is organized.
It's certainly a picture of how Perl is organized, since Perl is modeled on human languages. And the reason human languages are complex is because they have to deal with reality.
We all have to deal with reality one way or another. So we simplify. Often we oversimplify.
Our ancestors oversimplified. They fooled themselves into thinking that God only created circles and spheres. They thought God would always prefer simplicity over complexity. When they discovered that reality was more complicated than they thought, they just swept the complexity under a carpet of epicycles. That is, they created unnecessary complexity. This is an important point. The universe is complex, but it's usefully complex.
Evidence abounds that people continue to oversimplify today. Some people prefer to oversimplify their cosmology. Others prefer to oversimply their theology. Many computer language designers oversimplify their languages, and end up sweeping the universe's complexity under the carpet of the programmer.
I would name names, but I might get in trouble with some of my friends. Some of my best friends are language designers.
It's a natural human trait to look for patterns in the noise, but when we look for those patterns, sometimes we see patterns that aren't really there. But that doesn't mean there aren't real patterns. If we can find a magic wand to suppress the noise, then the signal pops right out. Abracadabra...
Here is the shape of the big bang, and of stars, and of soap bubbles.
Here is the shape of dimensionality, of salt crystals, and the spaces between trees trunks.
Here is the shape of an anthill, or a Christmas tree. Or the shape of a trinity.
Now, you may be wondering what all this has to do with Perl. The fact is, your brains are built to do Perl programming. You have a deep desire to turn the complex into the simple, and Perl is just another tool to help you do that--just as I am using English right now to try to simplify reality. I can use English for that because English is a mess.
This is important, and a little hard to understand. English is useful because it's a mess. Since English is a mess, it maps well onto the problem space, which is also a mess, which we call reality. Similarly, Perl was designed to be a mess (though in the nicest of possible ways).
This is counterintuitive, so let me explain. If you've been educated as any kind of an engineer, it has been pounded into your skull that great engineering is simple engineering. We are taught to admire suspension bridges more than railroad trestles. We are taught to value simplicity and beauty. That's nice. I like circles too.
However, complexity is not always the enemy. What's important is not simplicity or complexity, but how you bridge the two.
We betray ourselves when we say "That's redundant", meaning "That's useless." Redundancy is not always "redundant", whether you're talking about rockets or human languages or computer languages. In short, simplicity is often the enemy of success.
Suppose I want to take over the world. [laughter] Not hard to imagine, eh? Simplicity says I should just take over the world by myself. But the reality of the situation is that I need your help to take over the world, and you're all very complex. I actually consider that a feature. Your relationships are even more complex. I usually think of those as features. But sometimes they're bugs. We can debug relationships, but it's always good policy to consider the people themselves to be features. People get annoyed when you try to debug them.
We mentioned that some complexity is useless, and some is useful. Here's another example of useful complexity.
Chinese is not, in fact, a single language. It's about five major languages, any of which are mutually unintelligible. And yet, you can write Chinese in one language and read it in another. Now that's what I call a portable language. By choosing a higher level of abstraction, the Chinese writing system optimizes for communication rather than for simplicity. We have a billion people in China who can't all talk to each other, but at least they can pass notes to each other.
Computers also like to pass notes to each other. Only we call it networking.
A lot of my thinking this year has been influenced by working with Unicode and with XML. Ten years ago, Perl was good at text processing. It's even better at it now, for the old definition of text. But the definition of "text" has been changing out from under Perl over those ten years.
You can blame it all on the internet. I do...
That's where Unicode and XML come in. (Tim Bray is going to give a talk later this week on XML, so I'll talk mostly about Unicode.) Unicode is just a set of universal ideographs so that the world's computers can pass notes around to each other, and have some chance of doing the right thing with them. Some of the ideographs in Unicode happen to match up with various national character sets such as ASCII, but nobody in the world will ever learn all of those languages. Nobody is expecting you to learn all those languages. That's not the point.
Here's the point. Last month I was working on my church's web page. Our church has just started up a Chinese congregation, so our church now has two names, one of which can be represented in ASCII, and one of which cannot. Here's what the page looks like.
[Here's the direct link to the web page, which will look better and load faster, but may not show the Chinese characters in your browser.]
If your browser is fairly recent, and if you have a Unicode font loaded, then this is what you see. There's something important I want you to notice here. (Besides the fact that I'm subliminally advertising my church.)
If I'd done this a year ago, this block of Chinese characters would probably have been a GIF image. But there's a problem with images. You can't cut and paste characters from a GIF image. I've tried it often enough to know, and I'm sure you have too. These chararacters can be selected as characters. <demonstrates> They can be processed as text. Text processing. You may have heard of text processing...
In fact, what you're looking at here is my very first CGI script. I'll bet you showed off your first CGI script too.
Since some browsers don't support Unicode yet, I had to detect whether the browser supports Unicode, because if it doesn't, these characters splatter garbage all over the page. Garbage is usually construed as useless complexity.
Anyway, back to simplicity.
We use circles to represent many things. Our circle of friends. A hug, when written on the back of an envelope. The circle of a wedding ring, which stands for unending love.
Proceeding from the sublime to the ridiculous, we also have the round file, which is a kind of hell for dead paperwork.
Spheres of light. Black holes. Or at least their event horizons.
Here's the real title of this talk.
Here's a real Zen diagram.
Anyway, back to yins and yangs.
The yinyang represents a dualistic philosophy, much like The Force in Star Wars. You know, how is The Force like duct tape? Answer: it has a light side, a dark side, and it holds the universe together. I'm not a dualist myself, because I believe the light is stronger than the darkness. Nevertheless, the concept of balanced forces is useful at times, especially to engineers. When an engineer wants to balance forces, and wants them to stay balanced, he reaches for the duct tape.
Hmm. A roll of duct tape is also a circle. Must be symbolic, somehow.
When I made this yinyang, I wondered whether I was doing it right. It'd be a shame to get it backwards, or sideways, or something.
Well, you know, sometimes that sort of thing matters. It matters a lot to organic chemists, who call it chirality--if you take a molecule of spearmint flavor and flip it left for right, you end up with a molecule of caraway flavor. Yuck. I used to think I hated rye bread, till I discovered it was the caraway seeds they put in that I didn't like. Hmm. Now that's an idea. Spearmint flavored rye bread. Mmm. Hey, I just said it was an idea. I didn't say it was a good idea.
Now, which of those flavors you prefer is just a matter of taste, but doctors and organic chemists will tell you that there are times when chirality is a matter of life and death. Or of deformed limbs, in the case of Thalidomide. It was the "wrong" kind of Thalidomide that actually caused the problems. Dyslexics will tell you that chirality matters a lot in visual symbols. This talk is brought to you by the letters letters 'b' and 'd'. And 'p' and 'q'. And the number 6. Not to mention the number 9. You can see a 6 and a 9 in the yinyang, in this orientation. Um. I'm not going to take that analogy any further.
Anyway. In short, I wondered whether the yinyang is like a swastika, where which way you make it determines who gets mad at you.
So I did some research. On the Web, of course. Big mistake...
The fact is, the Web is the perfect example of TMTOWDTI. There's more than one way to do it. In this case, there's every way to do it. You can find the yinyang in every possible orientation. I still don't know whether any of them is righter than the others.
A TYEDYE WORLD is some folks on the Web who sell tie-dyed tee shirts. I guess they'd be Tao-dyed in this case. They think it looks like this.
Of course, my dictionary has it upside from that...
Well, back to Unicode. Unicode is full of circles. Many national scripts within Unicode make use of the circle, and in most of those, it represents the digit 0. Here is Unicode number 3007 (hex). It's the ideographic symbol for 0.
I find it interesting that the world has so many different representations for nothing. One could make endless jokes on it: Much ado about nothing, or Nothing can stop an idea whose time has come. But I can't really think of anything profound to say about zero, so let's keep moving. Nothing is holding us back. Nevermind, pretend I said nothing.
Here's something related to nothing.
Of course, in Perl culture, almost nothing is prohibited. My feeling is that the rest of the world already has plenty of perfectly good prohibitions, so why invent more? That applies not just to programming, but also to interpersonal relationships, by the way. I have upon more than one occasion been requested to eject someone from the Perl community, generally for being offensive in some fashion or other. So far I have consistently refused. I believe this is the right policy. At least, it's worked so far, on a practical level. Either the offensive person has left eventually of their own accord, or they've settled down and learned to deal with others more constructively. It's odd. People understand instinctively that the best way for computer programs to communicate with each other is for each of the them to be strict in what they emit, and liberal in what they accept. The odd thing is that people themselves are not willing to be strict in how they speak, and liberal in how they listen. You'd think that would also be obvious. Instead, we're taught to express ourselves.
You may feel much better afterwards, but consider the poor guy next to you with the ruptured eardrum. Ruptured eardrums should be prohibited.
On the other hand, we try to encourage certain virtues in the Perl community. As the apostle Paul points out, nobody makes laws against love, joy, peace, patience, kindness, goodness, gentleness, meekness or self-control. So rather than concentrating on forbidding evil, let's concentrate on promoting good. Here's the Unicode for that.
Of course, in English we write that with an X, to go with those O's on the back of the envelope. But you're witnessing the passing of an era. What with email taking over, sending hugs and kisses on the backs of envelopes is becoming a lost art. It just doesn't have quite the same effect as a header line in email. Content-type: text/hugs&kisses.
You know, it's also rather difficult to perfume an email message. Content-type: text/scented. The mind boggles. Ah well, save it for my talk next year on smellovision.
Here are more simple circles that represent complicated things. Here's the symbol for earth.
Here's some more history.
Now the thing about the onion is that it teaches me something about my own importance. Or lack thereof. Namely, that while I may have started all this, I'm still a little bit of the onion. Most of the mass is in the outer layers. (That's why I like to see grassroots movements like the Perl Mongers springing up.) But here I sit in the middle. I get a bit of honor for my historical significance, and you sit here patiently listening to me talk about the oddest things, but in actual fact, most people see the outside of the onion, not the inside. Unless they make onion rings. But even then, the bigger rings have more to them than the smaller rings. Let that be a lesson to those of you who wish to be "inner ringers". That's not where the real power is. Not in this movement, anyway. I've tried to model the Perl movement on another movement I'm a member of, and the founder of that movement said, "He who wishes to be greatest among you must become the servant of all." Of his twelve inner ringers, one betrayed him, and 10 of the other 11 went on to suffer a martyr's death. Not that I'm asking any of my friends to throw themselves to the lions just yet.
But back to growth patterns. Natural pearls grow in layers too, around a grain of sand that irritates the oyster in question, which forms layers of pretty stuff. This could be the cross-section of a pearl. People cut up onions frequently, but they almost never cut up pearls. So it's even truer of pearls than of onions. The outer layer is the most important. It's what people see. Or if the pearl is still growing, it's the layer that will support the layer after it. I realize that that classifies me as a mere irritant. I am content to be so classified.
Other things grow over time too. Perhaps if we change the picture to a set of tree rings, it'll be clearer.
All this stuff about growth rings is fine for talking about the past, but what about the future? I don't have a crystal ball. I do own two pairs of binoculars. Here's the typical symbol for that.
Well, back to xeyes here. The fun thing to do with xeyes, of course, is to resize them. I kinda like the flat version.
This is a really good picture of the relationship of the free software community with the commercial software community. We might even label some of the extremes. Let's just make up some names. We could call the left extreme, um, "Richard".
And we could call the right extreme something like, oh, "Bill".
The middle bulges are a little harder to name, but just for today we can call this one on the middle left, "Larry", and that one on the middle right, "Tim". But of course, you can supply your own names, since I just picked these names at random.
This is, of course, another oversimplification, because various people and organizations aren't at a single spot in the diagram, but tend to rattle around. Some people manage to oscillate back and forth from one bulge to the other. One moment they're in favor of more cooperation between the freeware and commercial communities, and the next moment they're vilifying anything commercial. At least our hypothetical Richard and Bill are consistent.
But the action is in the middle.
In similar fashion, the freeware and commercial communities are much closer together this year than many people thought possible by the old calculations. In Rocheworld, the planets did not touch, but they shared atmospheres. If we fuzz things out a little with the magic of xpaint, then we kind of get the picture.
What we have flowing between the freeware and commercial communities is a lot of ideas. Together, these two inner lobes define what we're now calling the Open Source movement. What we have here is something brand new: former enemies agreeing on a common good that transcends any particular business model. And that common good is better software sooner. Most of you have probably read the Cathedral and the Bazaar by now. So maybe I'm preaching to the choir here. But I thought you'd like the picture.
Speaking of pictures, you know this also looks like a pair of bacteria conjugating. You realize that if the Internet had been founded by bacteria, this would be considered pornographic material. I'm not sure why my talk keeps coming back to the subject of sex, but in actual fact, that interchange of useful information is the sort of relationship we're discussing here, regardless of how you label the picture. This is just plain sexy stuff.
On a more practical note, I will show you what made it all possible. People realized the power of a simple idea. We don't need software patents or trade secrets. All we need another simple circle.
When we think of civility, we think of cities, and of doing things fair and square. So here's the requisite square.
Sometimes the buildings themselves are square.
That is also why the various classes of operators and variables in Perl are visually distinct from each other. It's just sound human engineering, as far as I'm concerned. I don't like the fact that all the operators look the same in Lisp. I don't like the fact that most the street signs look alike in Europe. And I applaud the decision of Germany to make their stop signs look different from all the other signs. Of course, it's also helpful to us ignorant Americans that they made them look like American stop signs. Chalk up another one for cultural imperialism.
However, in repentence for American cultural imperialism, let me tell you about another advantage of the ideographic system of writing. Because ideographs are written into square cells, they can just as easily be written horizontally as vertically. Or vice versa. Our variable-width characters do not have that nice property. Especially in a font like Helvetica, where you have trouble telling i's and l's apart even when they're next to each other. Put one above the other and it'd just look like a dotted line. Chalk one up for the Chinese, the Japanese, and the Koreans.
To wrap up, I'd like to talk about triangles. Here's a sample.
Triangles are related to circles in the same way that arrowheads are related to targets. Here's a target.
Actually, this is the Unicode character named "bullseye".
I've shot a lot of arrows in this talk, and I don't know whether I've hit any bullseyes yet. We put triangles on the front of arrows because they're sharp. Triangles are associated with pain, especially if you step on one. The angles of the triangle tend to suggest the hard work of climbing a mountain.
If you take a section out of the Perl onion, it looks kind of like a triangle. Put in on its side and you have a growth chart for Perl over the last ten years.
Now suppose we shrink this triangle and extend the chart to show the whole lifetime of Perl. We really don't know how long it might last.
I can tell you that I think the difference between the red curve and the yellow curve might depend on adding in all the potential Windows users, and all the problems they need to solve. Which are many. It's no accident that we've just put out a Win32 Perl Resource Kit.
And I can tell you that the difference between the yellow curve and the green curve may depend on adding in all the international users that could benefit from Perl. It's no accident that the latest development version of Perl lets you name your variables with any characters that are considered to be alphanumeric in Unicode. That includes ideographs. There are a billion people in China. And I want them to be able to pass notes to each other written in Perl. I want them to be able to write poetry in Perl.
That is my vision of the future. My chosen perspective.
Most of you are familiar with the virtues of a programmer. There are three, of course: laziness, impatience, and hubris.
Basically, we just have to stay the course. Friedrich Nietzsche called it "a long obedience in the same direction", which is a good snappy slogan. But I like the full quote too:
The essential thing "in heaven and earth" is ... that there should be long obedience in the same direction; there thereby results, and has always resulted in the long run, something which has made life worth living.And now we've come full circle, back to the circle. Here is the front door of Bilbo Baggins' house. There's a road that goes from that door, and Bilbo wrote a poem about it.
The Road goes ever on and on, Down from the door where it began. Now far ahead the Road has gone, And I must follow, if I can, Pursuing it with eager feet, Until it joins some larger way Where many paths and errands meet. And whither then? I cannot say.
Thank you all for sharing the Road with me.