ZopeMag's mascot the ZOPE fish


Article Finder
People
Issue 1 - Revision 5  /   June 14, 2002 


 
  ZopeMag Links:
Home Page
About the Fish
Issue 09
Issue 08
Issue 07
Issue 06
Issue 05
Issue 04
Issue 03
Issue 02
Issue 01
Latest Issue

 
 
Downloads
     
  Letter from the Editor:
   Welcome

Interviews:
In our first issue we interview the father of the Wiki and the inventor of Extreme Programming.

 Ward Cunningham

Tutorials:
Throughout the quarter we cover topics of interest to Zope developers, designers, and users.

  MetaFlow
  Databases and ZPTs
  Custom User Folders
  Zope and CSS
  Intranets

Product Review:
Every two weeks we review a new Zope Product

  Z Shrink
  External File
  DocumentLibrary
  ZWiki


 
 
Downloads
     
  Downloads:
Products we talk about in this issues Articles and Reviews

  ZShrink
  Zope Page Templates
  LocalFS
  SimpleZPTmyAdmin
  Extended User Folder
  MetaFlow
 
     

Photographer: Unknown / Illustration by Brendan Davis
interview
Ward Cunningham - Wiki Extreme.

Interview with Ward Cunningham
Creator of Wiki and Extreme Programming
- - - - - - - - - - - -

By Michel Pelletier | March 28, 2002



Mr. Cunningham

Ward Cunningham is the inventor of Extreme Programming, the originator of the Wiki concept and author of a popular Perl implementation of Wiki called WikiWikiWeb. He is also the originator and cultivator of the world's first, and biggest Wiki, the PortlandPatternRepository. Ward has dedicated much of his career to advancing the sciences of software patterns. He is now an consultant with his own firm, Cunningham and Cunningham, in Portland, Or. I got a chance to meet up with Ward and we sat down for a cup of coffee.

We went to Coffee Time on 21st street in Portland, Oregon, our mutual home town, it was a beautiful sunny, warm, dry, day; serendipitous for so early in the year. We talked about Wiki, Zope, Python, Extreme Programming, and other fun stuff.



Do you have any experience with the Python programming language?

Yeah, I wrote an acceptance testing tool, and to do this we had to rip through [Microsoft] Word documents using regular expr and build an intermediate representation of the test, and then we went through several layers of indirection to get to a routine that would drive a relational database application.

What did you think of Python?

I was productive in a half an hour. The way I got productive was that I knew a guy who knew python, but didn't have the same vision, and we pair programmed. We went through APIs that he had never used, but he had the gestalt of Python, which I didn't.

Why didn't you use COM instead of digging through the file?

Any time we tried to use something like that it was too brittle, too much stuff has to be running it becomes very environment dependent. When you are doing testing you have to trust your tools. The nice thing about word is that it will write out HTML and read it back in just the way it looked.

My Python pair and I, at a company in Seattle, we took on this job an thought this ought to be about a day, we put about a half a day into it, and we went to a local Python user group meeting, and we talked to them and said we have this problem with a HTML parser, how can we fix it? One guy said just use a regexp, another guy said why don't u scrap word an read your test data right out of MoinMoin Wiki [MoinMoin is a popular implementation of wiki written in Python].

So Moinmoin solved your problem?

Yeah, but I really wanted it to be [Microsoft] Word, so we went back and redid it in Word also.

What do you think of MoinMoin?

Well, I'm partial to my own wikis. My public wikis don't have version control. but I'm kinda anti version control. It turns you into pack rats for information, I'd rather have the here and now. Anybody who's writing documents for a corporation, is intrinsically conservative for those documents, so MoinMoin is good in that regard.

What do you think of the revision comparison feature?

When you need it, you need it, but I can't remember the last time I needed it.

Are you still actively involved in Wiki development?

Oh yeah, I still work on WikiWikiWeb, in Perl. I've actually implemented it a number of times. I have four versions in Perl, and two thirds of a version in Java.

What do you think of Java?

I think a lot of things about Java, so it's hard to answer that question. I actually recently wrote a program that I didn't have to write in Java, in Java. As it compares to C; when C came out, it was a landmark language. Just because it was really put together for the time, a clearly designed language. Java is gonna be hard pressed to have that longevity.

But Java claims to correct what people describe as flaws in C, like a hierarchical name space.

One of the most beautiful programs I ever wrote was a C program, it was the exception I have to admit, but it relied very heavily on the natural scoping of C files, and it was enough. I like names that mean things to people, and I don't know many people who think in terms of hierarchical names. I want the name to be like, you're thinking a thought, you have a vocabulary, and you want that to correspond with whats in your head, and in your peers heads. If you use the same vocabulary, it's easier to communicate. But then if I say I'm going to give my though the label X and your thoughts the label Y, and we put them in a hierarchy, then you've given up on us aligning our concepts.

Sounds a bit like Forth?

I wrote one Forth program, much like my one python program, with the assistance of a guy who was an expert in Forth, and that was a very positive experience; Forth really delivered, but I didn't get much into it beyond that. I read Chuck Moore's [the inventor of the Forth language] website, and I like the way that guy thinks, he's an original thinker.

[At this point we talked a bit about Forth and I confessed I had worked a bit with the language myself. Ward asked me if I ever wrote my own Forth compiler]

I think that writing your own compiler is a write of passage in forth, much like writing a driver is a write of passage in Unix. There's a lot of stuff that can be kind of hazy that can't be hazy and still have that work.

Another thing every programmer should do is write a program using reflection. When you start using facilities in the language to look at the program itself. In [the python project mentioned above] we read in this thing that said here is the operations we're going to do to test this program, we should read words out of a table, and they would just be names, and then we would say, OK, we think there's module out there in the library that will support this, so lets dynamical load that module and find methods and call them by names found in the document tables. At the time we wrote the program we didn't know what that would be.

Python's pretty good at that?

Oh yeah, that's why we chose it. I knew that we had to use reflection and an HTML parser. Even when the parser let us down we still had alternate recourse with regular expressions.

Do you think the Wiki community is growing?

Oh absolutely.

You have any hard data?

One measure I use is how many people I run into who knows what wiki is. Almost everyone I run into know what wiki is, of course most of the people I run into are programmers.

Have you used a Wiki based on ZWiki [A Zope based Wiki] before?

I've visited them, and posted. I've never put one up. I have a friend who fell in love with it, and his message to me was this Zwiki is great, but when it lets you down you have this Zope which is a complete content management system that will let you do even more. Yeah, think a number of people get into wiki and they discover that wiki is simple enough you can get a server up and then you start hacking wiki and you discover theres a lot more you can do. Thats liberation, not really liberation, when you become of aware of something that's been there, there's an empowerment when you learn enough to write your own server. I encourage developers to do it, cuz its kind of off putting at first. If you get into it, lots of people add new text processing stuff to wiki, different formats for text etc. You know, I don't know what ZWiki really encourages.

[I told Ward that ZWiki uses an Zope standard format called "Structured Text" and then we got into text editors]

What you're favorite editor?

I work with enough people I use what they're using.

You don't have a preference? At home?

On my PC, I use TextPad, and i like it cuz it understand all the different machines i have. They all use different [line ending] conventions. I don't know what my kids will be doing in twenty years, but I'm sure that they're gonna have a lot of time converting carriage returns to line feeds. For all the computer power in the world I'm surprised they haven't solved that problem. I can use about any editor.

You don't use any language aware editors?

Yeah if I'm doing java I'm a fan of, can't remember the name, its from one of the guys who did TogetherJ, the editors is called Idea, most people refer to it by the company name. IntelliJ, that's it.

Speaking of TogetherJ, What do you think of UML?

I like diagrams, but i want to use diagrams that are just exactly what i want to look at. I've never found UML describes what i want to talk about. I sort of think that inheritance is a swiss army knife that gets developers out of tough spots, it's a tool of developers and I don't see why desgining elaborate inheritance trees is the best thing a developer can do to learn development. If you live in that world, half your brain is an atrophy issue, move things up and down these hierarchies that don't matter.

If you go into a lab, I mean a top research lab, and look at the white boards, they are very ad hoc and mean something to their conversation, and then they're gone. Saving those diagrams isn't impotant, saving the resoult of those diagrams is the important part. In devlopment there's gotta be a good mixture between formal and informal. So you work informally and capture the ideas in something more formal.

A good example of formal is mathematics. You can have an idea that you would sketch in a diagram, but when you convert it to math you can manimpulate it without being sure what effect the manipulation will have, you just do it and look. And that's a great property of formalism, but itsn't not a very creative environment, it's better at elaborating.

I had a friend who did math for a living when he was in grad school, his job was to manipulate equations to the point where they were solvable on a computer, and his equations were about a page long. Most of his job was doing checks to make sure he didn't do clerical errors, but getting fluid dynamics problems in a computer solvable form is pretty creative. The creativity happened away from the paper.

I used to do a lot of work with CRC cards, Class, Responsiblity, Colaborators. These are cards where you write down the class, it's responsibilities and what collaborators, other cards or actors it interacts with. You lay them out on the table, and they come to life, the cards become actors in your play. To the point that an algorithm running is like a play, working a script to see if its something we can like. I mention this because there's something about the ability to touch them and move them that connects with human information processing that doesn't happen when you're working in front of a screen with somehing like UML.

You think CRC cards are good for groups?

Yeah, when people have thse cards layed out on the table their position on the table becomes meaningful. And if someone picks up a card and move its someone else says why did you do that? What does that mean to move that card from there to there? I think that's cool because people will be talking about an object that they need to create and they don't yet know what it's named, but they know where it will go and point to the blank spot on the table where they will put the card when they know what it is. A few minutes later someone else will say "I'll need this card over here" and they'll point to an empty spot on the table and the story needs and actor and they know where that actor is going to go but they don't know enough to even name it yet; but we can have ten people sit around and talk about this unnamed thing and communicate. That's fantastic, that's creativity.

UML tools don't do that, whoever's selling uml tools is selling them to people who are vey scared of programming.

Because they're so rigid?

Because they want to make sure they prevent mistakes from being made, they want to make sure that nothing passed is being lost. The message developers get is, what ever you put in this tool is more important to us that what you are thinking now, you have to prove to this computer that your idea is good enough to go in with everything else in here, which is probably junk.

That's why wiki doesn't worry about losing a page now and then, or a parargraph now and then, when I compare it to say, lotus Notes; notes is very much about being a gatekeeper to the information on a corprate network. Controlling who has access, dividing things down, all the things Notes does.

Wiki says you juts write it in words and if its not corrct you just correct it. So lots of people who are used to being afraid of computers say, what? this is amazing, people can come in here and just delete this. But on the other system [UML, Lotus Notes, etc.] they're not afraid that someone would have an idea and not write it down, they have an idea but it's too much trouble [to formalize] so it just passes. That's my fear.

Being able to have a library put in someone else's mind, that's group creativity. Wikis inovation is discovering it doesn't have to be any more complicated than a text area, a web page and a database. There is one more crucial thing, I call "accidental linking". Your writing about something, you've been reading wiki, youre talking about somthing you think is new, you give it the name, and it already exists. That is such a sense of winning the jackpot, they think, oh, i've connected to this system somehow because the system knows what i've been talking about.

So just immagine, how that accidental linking, and you discover the name is already in the wiki, relates to guys around the table with the cards, pointing to the empty space around the table. The analog is the empty space that is the web page that you haven't visited yet, and by just naming it you discover that it is already there.

Your in the wiki because your struggling to connect with this communty somewhere, you're struggling to tell the story of the system. It isn't quite there yet, it isn't ready to be checked, its something thats half there and were tring to finish it so we add to the competeness of our thought.

What do you think about censorship and Wikis?

I've heard a lot of people worry about that, but I haven't seen it myself. I have been acused of disagreeing by deleting. Someone wrote something I considered flame bait, and I took the bait part of it out, so it was just a statement. As a statement it didn't mean much, it was just meant to be flame, so they accused me of making them look foolish for changing their comment. There are people on my side who feel that's unfair tactics. If you change the tone of it you're interfering. I can understand that, but the stuff that I delete matter of factly is just flamebait looking for a negative reaction and I delete vugarity, unless it's called for, which is very rare.

Her's an idea that we've been talking around, how does something that's an imcomplete thought, and incomplete idea, a vision for something, become real? become a thing? Sometimes you carry it around in the back of your head, and you're looking for ideas that will help you. And when it becomes complete enough you do it. How is something that's partial become complete?

Wiki is about becoming complete, it stars incomplete and becomes more complete. The things that wiki adds to english are like what programming adds to logic. Its an organization, an ability to factor, to be able to go over, and more importantly working in a group. And part of my job is to get a group to be creative sitting at a keyboard. So much more that a lot of experts say, don't do that, do something else, like UML.

What is the PortlandPatternRepository?

Its really people disicussing how to be creative while devloping software.

Whats the Portland part mean?

When we started the pattern literature, there was some debates about the best way to write a pattern (a short essay). I argued for a simple form, others were arguing for a format that has standardized labels. If people write carelessly though, labels sound like writing stuff that's a bunch of answers for questions and tends to be repetitive. So I favored a much simpler form where there are two halfs to a pattern, explain the problem and the nature of the domain your working in, the word "therefore", and then a thing to do that addresses that problem. A problem/solution pair; the word "therfore" is the only keyword to the language.

All of this debate can be found in the wiki?

Yeah search for the word therefore and there's probably a thousand pages. The different standardized paragraph names were templates, or forms, so I called my "therefore" form the "Portland" form. Cuz at our first conference we had three different authors who were from portland and we decided to use that form, mostly because I talked them into it.

The PortlandPatternRepository was a repository of patterns in the portland form, but it was also a repository locted here in Portland, so its a bit of a double meaning, not very profound. The portland form has a lot of my belief in if you allow peole to do simple things, then maybe they'll not do the stuff thats boring and do stuff that's interesting. The interesting thing about patterns is finding out what is the thing that's true about nature that causes something to occur, and what are you going to do about it? Recoginazing that's going to come out of a lot of deep thinking.

So what are you doing now?

Mostly I help people devlop software based on the philosphy of XP.

What is youre histroy with XP?

I invented it.

With anyone?

With Kent Beck, he also created the name.

Any books you'd recommend?

My book is the "The Wiki Way" Bo Leuf is my co-author. That's publised by Addison Wesley. I found that people like to implemented Wikis, it really sort of says, here's a wiki, it comes on a cd, the book is about how you hack wiki.

Just WikiWikiWeb?

Yeah, but its also about community building, how to install and run WikiWikiWeb. its one of these things that i consier WikiWikiWeb to be like a school of design, and i'm flatered when people choose to work in that school, to try and do what i did and do it even better.

Any XP books you'd recommend?

"Expreme programming explained" by Kent beck, and "XP Installed" by Ron Jefferies and two good ones.

What was the first kernel of XP that you formalized?

It was trying to do in a group, what i knew i could do myself, engineering software. it has a lot to do with the stuff we've been talking about. How to reason about a program. We live in an world filled with incomplete programs, and we need a way to reason about programs that are incomplete. The first assumption has to be that you don't yet know eveyting you need to know, that the act of programming is going to teach yu what you need to know and that you are ready to learn.

Once you accept that you don't need to know what you need to know then it doesn't make sense to choose one person to be the architect and have him go write down how this program's going to be written, collectivily if you don't know certainly one of you wont. You could take one guy and say, go write the whole program, but if you're tackling a really big program it won't be fast enough of he may not be smart enough. My interest is how you take a group of people who communicate so closely that they can pool their knowledge on something as slipery as an incompete program and complete it.

How old is XP?

Smalltalk sort of discoved XP but it was so subtle that they didn't notice they discoved it.

How old is the XP idea? The seeds of it were in the early 80s, with Kent [Beck] and I working together at Techtronics reasearch lab, that's when Smalltalk 80 came out of Zerox and landed in our lap. We realized that ST was very different, and it needed to be used in a different way, and that was XP.

When we went our separate ways we tried to reproduce what we had come up with at Techtronics.

What was the first XP project?

A fixed-income security portfolio managment system.

Was it a sucess with the managers?

Still being sold today, ten years later, millions of dollars at least.

What about justifying pair programming to a manager?

We were given a free enough hand that it wasn't an issue.

One thing we did do was try to talk about this idea that when we wanted to add something new to the program that we might have to go into the program and make a place for that idea to be put.

The unnamed card you mentioned before?

Yes, and because I was working with financial people I cooked up this metaphor, the debt metaphor. It relates things that we did in building a program to what they might do in building a company (there's a wiki page called DebtMetaphor). The idea is to move quickly, you don't have the opertunity to design something complete. You can't know how it's going to end up. But, if you program without knowing how it's going to end up you'll find that some of the things you do are mistakes, and if you leave those mistakes in a program, then it costs you time in the future, and that's like paying interest.

The working fast, the writing code withough knowing the whole design is like borrowing money, and tripping over those little mistakes is like paying interest. th reason why this is an important metaphore, if you want to develop a program quickly, of course you want to start developing code right away and you're going to have to start paying interest. if you start a company of course you are going to borrow money, it lets you start fast, but no one would borrow money without thinking that they have to pay it back.

So an important part of starting a company is managing your debt, how far into debt do you go, when do you pay back principal, but in design its the same then, when do you go back an correct your mistakes to get the maximium speed? The technique for paying back is called refactoring. A change I'll make to the program that improves its design or readability, but doesn't change its behavior. Youre getting it ready to do the next thing. The program might be completely coherent as it stands but you want it to do more than it does now, and that reoganization is also paying back the debt. The release managers most important job is managing that debt.


Michel Pelletier: started his Zope career as software developer at Digital Creations, now known as Zope Corporation. He is the co-author of the New Riders' book "The Zope Book".


shim
shim  ZopeMag is committed to bringing you the best in Zope Documentation. shim
shim


Home   Subscribe   FAQ   Contact   Write for us   Privacy Policy   Weekly News   PyZine   opensourcexperts.com  

Reproduction of material from any of ZopeMag's pages without prior written permission is strictly prohibited. Copyright 2003 - 2005 ZopeMag Zope/Plone hosting by Nidelven IT