|
 |
|
 |
| |
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
|
|
 |
|
 |
 |
|
|
 |
| |
|
|
| |
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: 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
|
 |
| 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".
|
|
 |
|