Ravioli Wiki

Consider that each page in Wiki is just like a class in an object-oriented language like Smalltalk or Java or C++. In fact, it's very close to being isomorphic.

Consider good class design:

Good classes have Meaningful Names

Good classes have well-defined, well-delimited roles

Good classes have well-defined, well-delimited responsibilities

Good classes are related to other classes in the system (collaborators)

Consider good page design:

Good pages have Meaningful Names

Good pages have a well-defined, well-delimited focus/topic

Good pages/topics have facets that need discussing

Good pages have links to and are linked to by other pages

Now, many operations are preserved under isomorphism such as Refactor Mercilessly. In fact, you can apply Refactoring Patterns to Wiki pages. Consider Refactor By Extracting To Page as a transformation of Extract Class.

Ravioli Wiki is an isomorphism of Ravioli Code. Too many purposeless, unfocused pages with no real purpose in the system and a very low fan-in and fan-out rate.


So, now that Wiki has tens of thousands of pages, how many people would say it isn't Ravioli Wiki? Just look at how many pages have "see alsos" to pages with the exact same topic, but with another name. -- Sunir Shah


I think that Ravioli Pages are great. It gives people a place to scrape irrelevant stuff into. If the pages aren't interesting they'll scroll off of Recent Changes soon enough and if they are, they'll have a place of their own where they can grow. In the meantime it's easier to keep the original page short and to the point because people will be a lot more comfortable moving stuff than they will be deleting it (although there is a place for that too). -- Phil Goodwin

Being short and focused is great, but you quickly build duplications as points are repeated over and over, page after page. It is already far outside the ability of a Humble Refactorer, apparently, to link seamlessly with Refactoring Wiki Pages which would have served better than the newer Refactor Faster Delete More.

You know, if you Extract Class this frequently and this mindlessly, your code will become insane. And I thought I was bad with a median class length of 200 lines (between .h and .cpp files) and five methods. Of course, I take great steps to ensure there are no redundant classes when I'm done. nudge, nudge, wink, wink, say no more.

I am not convinced the analogy Ravioli Code / Ravioli Wiki works too well. Wiki now has > 7500 pages, and I don't think it would feel significantly more (or less) overwhelming if it had twice (or half) as many. 7500 classes... that would be a different story. --Falk Bruegmann

I agree with Phil and Falk that the analogy here is really faulty. Ew Dijkstra complained that programming language was the wrong term, because they just ain't like human languages. I wouldn't go all the way with him on related issues but I think this is a very relevant point here.

I believe that one of the reasons that we have So Many More Writers Than Refactorers is that some of the original material on refactoring turned out to be unrealistic about how difficult it is to refactor Wiki really well, especially with the current level of new visitors and changes. We need more realistic guidelines. I put up Refactor Faster Delete More to make a small contribution to developing consensus on that more realistic picture. I'm also very grateful now for Wiki Refactoring Stories.

In Smalltalk I believe in short methods and, to a lesser extext, in short classes. On Wiki I would like much less text within (possibly) more pages. I believe that, as a general rule, short pages with the right links are more readable than longer ones. Our aim is to Improve Signal And Readability.

The dichotomy between natural languages and formal languages is only in their levels of adaptability and systematic constraints. However, the information capability is almost equivalent between the two (but not.. see Goedels Incompleteness Theorem). I think it's one of the great failures in the pedagogy of computer science that students aren't subjected to a year's worth of Information Theory. The page::object analogy is still sound because they both are information containers with names, roles, foci and responsibilities organized in a similar graph. Hence, they are still analogous, approaching isomorphic.

Without wishing to cast aspersions on anyone else's isomorphisms, I believe that we need to consider some other points if we are wondering why Wiki as a whole isn't as well factored as, say, the famous Smalltalk/Gemstone code at Chrysler. We could look at the following set of pages

[] please add

Anyone want to vote on which has been the most significant? --Richard Drake


Umm... could it be that coding is about producing a program that has to run, has to be focused on meeting set requirements with a maximum of clarity and minimum of duplication and unnecessary effort, while Wiki is a mirror reflecting the opinions and thoughts of a wide community of different people?

I don't want to live in someone else's poem. -- James Noble



See original on c2.com