11 July 2015

Rough-and-tumble on IRC

I just put this up on Facebook, but thought it might be more interesting in general, as something of an insight as to how tempests can start in teapots on IRC.

I've been on IRC for... well, I'd be embarrassed to tell how long. A lot of that time has been trying to help people with problems, but increasingly I find myself running into situations which are simply sheer functional fixation.

Put yourself in a novice programmer's shoes, starting out with a new module. You download the module, or yum install it, or local::lib, or whatever. You're in a hurry, so you grab a few lines from the SYNOPSIS section, throw it in your code, add another call that you saw later on, and are surprised when it doesn't work.

Perl has reported an error whose *very first line* is in the module you're using. You've got some background in C, so your instinct is to fixate on the very last error, which is in this new module's code. So of course this module is at fault. It's written by someone you don't know from Eve, and is probably broken in some weird way, because it's breaking in some place you didn't even *call*.
Google doesn't find you any helpful hints (of course, it never does, but that doesn't stop you from trying), so your final lifeline is IRC. And so the conversation begins (OP in "", others in various margins):

"Hi, where do I get a new version of module Lemur?"
> CPAN, what version are you running?
"Dunno, how do I find out?" ... "Okay, 1.30."
] Please nopaste your code, there's a pastebin in the topic
> That's the latest, what's wrong?
] Please, please nopaste your code. Wherever.
"Dunno, it broke."
} Could you show us the error log?
) You probably need to call ->new() with 'frink', 'frink', 'frink'
> That's the latest version, so it's probably not broken, what are you doing?
"Stuff."
> Show us your error log, if you're using Apache it's probably in /var/www/logs
] PLEASE PASTE YOUR SOURCE CODE
> Fine, show us your code.

...15 minutes have passed, and by this time the guy is so frustrated by people not "fixing the module for him" that he simply gives up and logs out.

">" is taking the user at face value, and walking through what's a normal debugging sequence for a broken module. Prosaic and rather slow, but it does keep the OP engaged, and would probably hold enough interest to get him to the end.

"]" realizes that the odds are that the OP has a problem in their code, and seeing what they've tried is a quick way to debug the problem. This starts to create resistance, however because the OP may not know much perl, but he knows an error when he sees it, and it ain't in his code. So showing their *own* code is irrelevant, and the requests start to get annoying.

"}" also knows the problem is likely in the OP's code, and is trying a different approach to the problem. It also probably feels a bit irrelevant, but might meet with less resistance.

")" knows that the most likely newbie mistake is to not call the constructor correctly, and manages to intuit a fix. His voice gets lost in the sea of requests on the channel, and slowly sinks into the waves.

Now of course, the OP really should have used Catalyst::REST::Plugin instead of the first cgi-lib.pl based module that Google found, and saved 2000 lines of code, but they've already written off IRC as a whole because they just kept hammering him with irrelevant questions and insulting his intelligence because he knows what's wrong, just not how to fix it.

In a realtime conversation, the problems I intimated above are amplified tenfold and more, simply because of the interaction between IRC newbie and oldtimer. I've tried a bunch of different conversational styles in the past in order to help get people to interact, but ultimately I've been stymied by the lack of physical proximity. Maybe what we need isn't facial interaction but pheromone recognition.