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 MeaningfulNames
- 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 MeaningfulNames
- 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 RefactorMercilessly
. In fact, you can apply RefactoringPatterns
to Wiki pages. Consider RefactorByExtractingToPage
as a transformation of ExtractClass
is an isomorphism of RavioliCode
. Too many purposeless, unfocused pages with no real purpose in the system and a very low fan-in and fan-out rate.
See also AvoidClutterLinks
So, now that Wiki has tens of thousands of pages, how many people would say it isn't RavioliWiki
? Just look at how many pages have "see alsos" to pages with the exact same topic, but with another name. -- SunirShah
I think that RavioliPages?
are great. It gives people a place to scrape irrelevant stuff into. If the pages aren't interesting they'll scroll off of RecentChanges
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). -- PhilGoodwin
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 HumbleRefactorer
, apparently, to link seamlessly with RefactoringWikiPages
which would have served better than the newer RefactorFasterDeleteMore
You know, if you ExtractClass 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 RavioliCode / RavioliWiki 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. --FalkBruegmann
I agree with Phil and Falk that the analogy here is really faulty. EwDijkstra
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 SoManyMoreWritersThanRefactorers?
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 RefactorFasterDeleteMore
to make a small contribution to developing consensus on that more realistic picture. I'm also very grateful now for WikiRefactoringStories
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 ImproveSignalAndReadability
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 GoedelsIncompletenessTheorem). 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 InformationTheory. 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
-  RavioliWiki (or NotUnderstandingClassPageIsomorphismWiki?)
-  LargeProgrammingTeamWiki?
-  DistributedProgrammingTeamWiki?
-  LackOfTuringCompletenessOfTheImplementationLanguageWiki?
-  LackOfPlanningGameWiki?
-  LackOfUserStoriesWiki?
-  LackOfUsersWhoArentProgrammersWiki?
-  LackOfClearCutCoachWiki?
-  LackOfUnitTestsWiki?
-  please add
Anyone want to vote on which has been the most significant? --RichardDrake
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. -- JamesNoble
See also ProgrammingIsLife