Rethinking the interface to CPAN
I've started a group, rethinking-cpan, for discussing the ideas I've posted here. -- Andy
Every few months, someone comes up with a modest proposal to improve CPAN and its public face. Usually it'll be about "how to make CPAN easier to search". It may be about adding reviews to search.cpan.org, or reorganizing the categories, or any number of relatively easy-to-implement tasks. It'll be a good idea, but it's focused too tightly.
We don't want to "make CPAN easier to search." What we're really trying to do is help with the selection process. We want to help the user find and select the best tool for the job.
It might involve showing the user the bug queue; or a list of reviews; or an average star rating. But ultimately, the goal is to let any person with a given problem find and select a solution.
"I want to parse XML, what should I use?" is a common question. XML::Parser? XML::Simple? XML::Twig? If "parse XML" really means "find a single tag out of a big order file my boss gave me", the answer might well be a regex, no? Perl's mighty CPAN is both blessing and curse. We have 14,966 distributions as I write this, but people say "I can't find what I want." Searching for "XML" is barely a useful exercise.
Success in the real world
Let's take a look at an example outside of the programming world. In my day job, I work for Follett Library Resources and Book Wholesalers, Inc. We are basically the Amazon.com for the school & public library markets, respectively. The key feature to the website is not ordering, but in helping librarians decide what books they should buy for their libraries. Imagine you have an elementary school library, and $10,000 in book budget for the year. What books do you buy? Our website is geared to making that happen.
Part of this is technical solutions. We have effective keyword searching, so you can search for "horses" and get books about horses. Part of it is filtering, like "I want books for this grade level, and that have been positively reviewed in at least two journals," in addition to plain ol' keyword searching. Part of it is showing book covers, and reprinting reviews from journals. (If anyone's interested in specifics, let me know and I can probably get you some screenshots and/or guest access.)
BWI takes it even farther. There's an entire department called Collection Development where librarians select books, CDs & DVDs to recommend to the librarians. The recommendations could be based on choices made by the CollDev staff directly. They could be compiled from awards lists (Caldecott, Newbery) or state lists (the Texas Bluebonnet Awards, for example). Whatever the source, they help solve the customer's problem of "I need to buy some books, what's good?"
This is no small part of the business. The websites for the two companies are key differentiators in the marketplace. Specifically, they raise the company's level of service from simply providing an item to purchase to actually helping the customer do her/his job. There's no point in providing access to hundreds of thousands of books, CDs and DVDs if the librarian can't decide what to buy. FLR is the #1 vendor in the market, in large part because of the effectiveness of the website.
Relentless focus on finding the right thing
Take a look at the front of the FLR website. As I write this, the page first thing a user sees is "Looking for lists of top titles?" That link leads to a page of lists for users to browse. Award lists, popular series grouped by grade level, top video choices, a list called "Too good to miss," and so on. The entire focus that the user sees is "How can I help you find what you want?"
Compare that with the front page of search.cpan.org. Twenty-six links to the categories that link to modules in the archaic Module List. Go on, tell me what's in "Control Flow Utilities," I dare you. Where do I find my XML modules? Seriously, read through all 26 categories without laughing and/or crying. Where would someone find Template Toolkit? Catalyst? ack? Class::Accessor? That one module that I heard about somewhere that lets me access my Lloyd's bank account programtically?
Even if you can navigate the categories, it hardly matters. Clicking through to the category list leads to a one-line description like "Another way of exporting symbols." Plus, the majority of modules on CPAN are not registered in the Module List. The Module List is an artifact a decade old that has far outlived its original usefulness.
What can we do?
There have been attempts, some implemented, some not, to do many of these things that FLR & BWI do very effectively. We have CPAN ratings and keyword searching, for example. BWI selects lists of top books, and Shlomi Fish has recently suggested having reviews of categories of modules, which sounds like a great idea. I made a very tentative start on this on perl101.org. But it's not enough.
We need to stop thinking tactical ("Let's have reviews") and start thinking ("How do we get the proper modules/solutions in the hands of the users that want them.") Nothing short of a complete overhaul of the front end of the CPAN will make a dent in this problem. We need a revolution, not evolution, to solve the problem.
0 TrackBacks
Listed below are links to blogs that reference this entry: Rethinking the interface to CPAN.
TrackBack URL for this entry: http://perlbuzz.com/cgi-bin/mt/mt-tb.cgi/383
First, I should apologize about a bit of a rambling, brainstorming, kind of comment.
The reviews idea sounds like a good one and I can see that the category review idea would be very helpful. However, after following the perl-xml list for years, I suspect that many people won't read the reviews either.
If we want to get far with the reviews idea, I would think we would need to be able to deal with reviews either as pointers to other sites or CPAN-local reviews. There's probably also some benefit in both category-level reviews and module-specific reviews.
The category-level reviews would require a lot of work on the part of the reviewers. Using multiple modules in different ways to develop an opinion of strengths and weaknesses. Even summarizing the opinions of a mailing list like perl-xml would take quite a bit of effort.
Maybe a review system like Amazon supplies added to CPAN would encourage module-specific reviews.
In addition to the reviews, I wouldn't want to give up on the search system. Maybe a module ranking system added to the current search might be handy. This approach is what Google used to become the search standard engine.
Could we begin by generating metrics on modules that would help us improve searching?
This would give us an semi-automated way to improve search.
I know none of these is quite the revolution you were talking about, but your article really set me thinking.
For example, there is a review of one of my modules that gave it a low rating because they thought my api needed work. The next version of the module included updates to the api to address the comments in the review. There is no easy way for me to have that person update their review for the new version. I am stuck with a low rating even though it is for a previous version of my module and I have addressed the concerns of the reviewer.
Some of my comments. Each one in its own post.
Regarding "revolution" - I approve as long as we don't lose away all the important knowledge we've accumulated so far, and that we won't implement it all at once. It would be easier to build the CPAN Module-Rank<tm> system into the kobesearch source code (and hope that it is implemented in search.cpan.org or finally get the latter's source released), than to try to design something better, bigger and badder from scratch.
I prefer to think of such revolutions as "paradigm shifts" because they completely revolve the way I work with computers or with whatever, but do not interfere with the rest of my life. (In an "invention is the mother of necessity" aspect.) As Andy noted, we need something less incremental, but we shouldn't do something completely different and unfamiliar.
For the record, search.cpan.org is good enough for most things I'm trying to do as it is, and I have its search as a keyword in every browser I'm using on a given system in a given time. We just need to optimise the minority of the cases, where people resort to asking someone for a recommendation, giving up, writing something themselves, using something else instead of Perl, instead of finding what they're looking for. But most of the basic and useful information that s.c.o/kobesearch provide should stay where it is.
I apologize for posting offtopic, but I didn't get an answer to my email I sent to editors at perlbuzz.com almst 3 weeks ago.
I can't read articles with Opera 9.27, all I see is a big yellow page.
Now I've validated the source code and after removing most of the 86(!) errors the W3C validator reported it worked in Opera 9.27.
The important fix was probably adding a closing tag for the <xMTIf> starting tag.
It would be really nice if you could fix the HTML so that people with browsers like Opera can read the page. Especially if it's because the HTML is broken and not the browser (there are a lot of doubled <p> tags and missing </li> tags. Is this Movable Type which generates so poor source code? Even urls are not correctly escaped (ampersands in urls need to be written as &)
Again, sorry for being offtopic, but I didn't get an answer to my email.
Since I usually know the name of the module I want, I just type it in to the search pane. Which means that it's been years since I looked at the 26 categories and realized how uninformative a display it is. Thanks for jogging my attention to that.
I've commented on my own blog about this, http://www.simplicidade.org/notes/archives/2008/04/rethinking_cpan.html.
Executive summary: start with a iusethis-style of site for modules. Let people create their own module list, the one they use on a regular basis.
Best regards, PS: I could not add a trackback, HTTP 403 error.