Este documento no pretende ser ninguna guía definitiva sobre el comportamiento en un canal de IRC de ayuda. Son solo una serie de pautas que a mi parecer que facilitarían y potenciarían la comunicación en el canal, haciéndola más efectiva y beneficiosa para todos.
Este documento se debe leer como tal, y no como una serie de normas estrictas. En él encontrarás algunos consejos que nacen del sentido común, y otros con los que podrás estar o no deacuerdo, que nacen de mi experiencia colaborando en el canal.
En definitiva el documento, que tiene bastante de sociológico, es un reflejo de cómo creo que debería ser el intercambio de conocimientos y de como pedir y dar ayuda.
Utilizo una serie de convenciones que deberían entenderse así y no en su significado lingüístico:
- Ayudador: Me referiré al ayudador como la persona que en un momento determinado adopta el papel de ayudar a un usuario del canal.
- Ayudado: (o usuario) es la persona que demanda la ayuda planteando una duda en el canal.
Estas convenciones no se refieren a personas, sino al papel temporal que adopten en cada momento. En el canal, es natural y sano que una misma persona adopte ambas identidades dependiendo de las circunstancias, con lo que el ciclo es completo.
- Consulta en el manual todas y cada una de las funciones que has utilizado en tu script
Asegúrate de entender su funcionamiento perfectamente. Esto es extensible al resto de elementos de tu script. Por ejemplo, si haces uso de arrays, deberías tener un conocimiento mínimo sobre estos, o bien procurártelo antes de preguntar.
- Investiga en webs de ayuda, tutoriales, manuales
El manual de php.net es excelente, y la web del canal php-hispano.net ofrece gran cantidad de recursos como tutoriales y códigos de ejemplo que podrías seguir.
- Haz debug en tu código
Si ves que no funciona, no te quedes de brazos cruzados, el problema no se solucionará solo. Intenta ver dónde falla, dónde las variables dejan de contener lo que esperas, o qué es lo que se cumple y lo que no cuando tienes bucles condicionales. Para ello es de gran ayuda intercalar "echos" de variables que vayas utilizando o print_r de arrays que aparezcan en tu código. Si sigues sin poder descubrir el error, informa al ayudador de los resultados del debug, es decir: "hasta dónde llega tu código o en qué punto se queda atascado".
- Divide el problema en problemas más pequeños
E intenta resolver uno a uno por ti mismo.
El diseño del algoritmo debería ser algo genérico, independiente de si programas en PHP, en C o en cualquier otro lenguaje. Si es necesario escribe un pseudocódigo con los pasos a seguir para llegar desde los datos de un problema hasta la solución final de forma inequívoca y luego tradúcelo a PHP.
No es tarea de los ayudadores del canal fabricar tu algoritmo, sino darte pistas o ayudarte si te surgen problemas al "codificarlo".
- Asegúrate de entender lo que tu código actual hace
Si no sabes por qué has puesto cada línea y cada cosa en el lugar en que lo has puesto tienes un tipo de problema que en el canal no podemos resolver, tendrás que rediseñar tu código o ampliar tus conocimientos básicos de PHP, pero eso es una tarea eminentemente individual.
Ejemplo: si tienes un if en tu código y no sabes lo que un if es ni lo que hace, harías bien en salir del canal y buscar un buen manual. La ayuda que pudieras pedir en ese caso no sería ayuda, sino directamente código para insertar en tu script.
Cuando entres al canal a plantear una duda saluda y plantea la duda directamente al general del canal, de forma concisa, clara y breve.Algunos consejos básicos a la hora de pedir ayuda:
- Aisla tu duda del proyecto en el que estás embarcado
Tu duda ha de estar relacionada de uno u otro modo con código PHP, no con una web o un objetivo genérico. Lo explicaré mejor con un ejemplo:
Absurdo: "No puedo entrar en la sección de administrador que acabo de hacer"
No conocemos tu sección de administrador, la pregunta no contiene ningún tipo de información que podamos usar para resolver tu duda.
Aceptable: "Tengo un problema con las sesiones, no parecen inicializarse de forma correcta y por tanto no puedo entrar a una sección de mi web sin logearme a todas horas"
Mejor aún: "if(isset($_SESSION['logged'])) no se cumple a pesar de que se ha seteado correctamente en un script anterior"
Comparad ahora la primera pregunta con esta última. ¿A que no se parecen? Recuerda que no somos adivinos, es indiferente que sea tu sección de administrador o tu sección de películas porno o sea de lo que sea tu web, haz que tu pregunta contenga información útil de forma que alguien la pueda utilizar para resolverla. ¿En qué consiste si no una pregunta?
- Acota tu duda
Hazla concreta, de forma que pueda ser más atendida en el canal con más facilidad. No divagues. Uno de los objetivos del canal, aparte de conversaciones variopintas e idas de olla frecuentes es la de resolver dudas puntuales. Preguntas como ¿Cómo hago un sistema de usuarios? están fuera, en mi opinión, del alcance de lo que se puede resolver en un canal de chat. Hay tutoriales, manuales, códigos de ejemplo suficientes en internet y en php-hispano.net en concreto como para no necesitar tener a alguien explicándote durante horas como hacerlo.
Si no recibes respuesta:
- No vuelvas a plantear la duda al instante
Los usuarios YA te han leído, es irritante ver el mismo mensaje una y otra vez implorando ayuda. Si no te responden puede ser por varios motivos:a) No quieren: Recuerda que la ayuda es voluntaria y nunca exigible. Acéptalo, nadie cobra un sueldo por ayudar en el canal.
b) No saben la respuesta: Y por tanto sería una pérdida de tiempo tanto para ellos como para ti intentar responderte.
c) No entienden tu pregunta: Es más común de lo que se cree, y aunque en esos casos siempre hay alguien que te "anima" a explicar con más detalle el problema, puede que esto no sea así. Recuerda que cuanto más clara, concisa y breve sea la exposición de la duda, más probable será que sea contestada.
d) No te encuentras en el canal adecuado: Es el caso de preguntas acerca de la configuración o problemas relacionados con scripts de terceras personas.
- Espera unos minutos y replantea la duda
Relee tu duda, y piensa si es fácilmente comprensible. Los usuarios del canal estarán dedicados cada uno a sus tareas, y lo que a ti te parece muy claro porque es en lo que estás trabajando en esos momentos, para el resto no lo será.
Durante esos minutos además es posible que haya entrado gente nueva al canal, o que los que ya están hayan vuelto de un away.
- Si de todas formas no obtienes respuesta
No te pongas a gritar como un energúmeno ni a mentar en el general a las familias de los operadores. Todo lo que se hace o se deja de hacer en el canal es voluntario, nadie tiene obligación de ayudarte, los ayudadores no reciben ningún tipo de recompensa por ayudar y tú virtualmente no tienes ningún derecho a quejarte por no ser atendido.
Cosas que no se deben hacer:
- No presupongas que la persona que te ayuda sabe más o menos dependiendo de su status en el canal
Una @ no otorga poderes ni conocimientos especiales, y aunque así fuera, un usuario normal del canal que por ejemplo se acaba de enfrentar a un problema similar puede serte más útil en un momento dado. En general, no menosprecies la ayuda de nadie, lo hacen de forma voluntaria y por ese simple hecho merecen ser respetados.
- No examines al ayudador
- No exijas un determinado conocimiento previo al ayudador
No pretenderás que una persona que tiene como hobbie programar en PHP te enseñe sus credenciales, un diploma o un título acreditativo.
Sé humilde cuando pides ayuda, si tan listo eres o tanto nivel en PHP necesitas para resolver tu duda, resuélvela tú mismo.
Generalmente tendemos a pensar que nuestra duda es más específica o difícil que una duda normal, pero esto no suele ser así: lo más frecuente es que alguien en el canal, con más o menos experiencia que tú, se haya topado con un problema similar y lo haya resuelto con éxito. Lo siento, no eres tan especial.
- No preguntes: ¿Alguien ha hecho "tal" en PHP? como requisito previo a ser ayudado
Aunque un usuario no haya desarrollado por ejemplo un foro completo en PHP, es más que posible que sepa resolver tu duda concreta acerca de un query, paginación o sea cual sea tu problema en cuestión. Esto esta relacionado con el tema anterior: "no exijas credenciales".
- No "pidas audiencia" con nadie
No particularices tu duda a alguien concreto. Lánzala al canal de forma general, la persona a la que estás preguntando no es la única que sabe PHP en el canal, incluso no tiene porqué saber responder a tu pregunta por el mero hecho de haberte ayudado en una ocasión. La ayuda es un acto solidario que se practica en el canal, cualquiera puede ser a la vez ayudador y ayudado. No se trata de entrar en busca de un oráculo que no existe.
- No hagas querys
Por dos motivos:
- El objetivo del canal es aprender. Cuando alguien te resuelve una duda por privado sólo te la resuelve a ti. Si lo hace en el general es probable que alguien más lo lea y le interese o haya tenido esa misma problema alguna vez. Sin más que leer el canal, la gente estará aprendiendo PHP de forma constante.
- Puede que la persona a la que haces query no sepa responder tu duda, o te responda de manera equivocada. Si esto sucede en el general es probable que alguien matice la ayuda que acabas de obtener, y podrás ahorrarte más de un dolor de cabeza.
El motivo más común por el que se hacen querys es por vergüenza. No existen dudas estúpidas sino preguntas estúpidas. La duda es algo natural en el ser humano, junto con la curiosidad. Una duda que no haya seguido antes un proceso de investigación movida por la curiosidad deriva indefectiblemente en una pregunta estúpida. Sin embargo, si te has molestado en investigar y te encuentras con que a pesar de todo no acabas de entender tal o cual cosa, no temas preguntarlo. Nadie tiene por qué reirse de ti por el hecho de que tu duda sea de fácil resolución o propia de novatos: todos lo hemos sido alguna vez.
- No envíes al ayudador a una página web
Al menos que sea indispensable o sea pastebin.com. Por lo común al que te presta ayuda no le vale DE NADA ver lo mismo que ves tu, y a no ser que el problema sea visible en el source HTML, una página web es un EFECTO, nunca una CAUSA. Para el ayudador será más útil una explicación pormenorizada de tus objetivos junto con una línea concreta de código, o un determinado error generado por PHP.
- No pidas código literal
No es el objetivo del canal darte un código para que tú teclees como un mono sin saber lo que significa, el fin último es aprender. Que otros te hagan el código es a corto plazo contraproducente para todos: tú seguirás dependiendo siempre de un canal de ayuda para hacer cada script, y el ayudador estará condenado a repetirte conceptos que ya debían haber quedado claros en una ayuda anterior.
- Recuerda: tu duda no es más importante ni más urgente que el resto
Nadie tiene por qué estar en el canal 24 horas atento, esperando tus dudas. Todos tenemos cosas que hacer, si es urgente es tu problema, no el nuestro. En muchas ocasiones suele ser una excusa bastante irritante para ser atendido antes o llamar la atención. Si te corre tanta prisa, o es algo tan vital, contrata a un programador.
Algunas preguntas estúpidas frecuentes
- "tal cosa" no me sale | no funciona | me sale en blanco
No hay información de ningún tipo, incita a pensar que no has hecho ningún tipo de debug básico en tu código (si lo hicieras al menos tendrías un volcado de las variables), incita a pensar que no sabes plantear una duda, que ni siquiera sabes cuál es tu duda o que probablemente ni siquiera entiendes tu código o has hecho un mínimo de investigación.
- ¿De dónde me bajo "tal" programa | libreria ?
De Internet, busca en google.
- ¿Esto funcionaría?(a continuación se pegan varias líneas de código)
La respuesta es inmediata: PRUÉBALO. No somos parseadores. Además, así aprenderás a modificar tu código, a optimizarlo y a conseguir que funcione en vez de depender de nadie para cada paso minúsculo en tu proyecto. Toma tus propias decisiones, aunque te equivoques, prueba cosas nuevas, aprenderás. PHP no te va a comer porque pruebes con él un código incorrecto.
- ¿Alguien me ayuda?
¿Con qué? Depende de lo que sea a lo mejor alguien te puede ayudar o no. Nadie sabe a priori si va a tener conocimientos en concreto acerca de lo que vas a plantear. Que yo sepa todavía no hay nadie clarividente en el canal.
Como comportarse ante el ayudador
- No te ofendas
A no ser que la persona que te esté ayudando te conozca de antes no puede saber cuál es tu nivel en PHP.
Cada ayudador sigue un método distinto y personal, podrá pedirte que modifiques alguna línea o te hará una serie de preguntas intentando adivinar el origen del problema. Este proceso tiene una duración variable en el tiempo y depende también de la experiencia del ayudador.
Probablemente la persona que te ayude quiera asegurarse de que lo básico es correcto antes de divagar sobre otras posibilidades.En algunas ocasiones se podrán ver preguntas como: "¿Tu archivo tiene extensión .php?".
Este tipo de preguntas no debería ofenderte. Ten paciencia, es lo mínimo que se puede esperar de alguien que recibe algo a cambio de nada. Así que no respondas "Claro, ¿te crees que soy tonto?" Al canal entran desde completos newbies hasta usuarios experimentados.
- Haz caso de lo que el ayudador te proponga
Es lo mínimo que se te puede pedir, que pruebes lo que la persona que te intenta ayudar te pida que pruebes.
No seas tozudo, ni te empecines con frases tipo "no, eso no es". En muchas ocasiones lo que al principio aparentemente "no podía ser" es justamente la raíz del problema, confía un poco en la pericia de tu interlocutor.
Mi experiencia me dice que un gran porcentaje de la gente que entra al canal con un código que no se comporta como es debido, piensa tácitamente que el código es correcto y que no deberían hacer ningún tipo de comprobación ni modificación(son las dudas más frustrantes porque realmente piensas ¿para qué entran y preguntan si no quieren ayuda?)
Desde aquí te puedo decir que con un alto porcentaje de probabilidad si tu código no hace lo que esperas, es que tu código ESTÁ MAL. Ni es un bug de PHP, ni es que lo astros no estén alineados, ni excusas tipo "ayer funcionaba perfectamente" o "Deben haber hackeado mi PC" <- esta es de hace nada en el canal. . Al ayudador no le importa que ayer funcionara, la cuestión es que hoy no funciona, con lo que algún motivo hay .
Así que tienes dos opciones:
- Empecinarte en que tu código está bien, no cambiar nada y cruzarte de brazos viendo el error una y otra vez.
- Hacer caso de lo que te digan para debugear tu código y ver qué problema hay.
Si alguien en el canal ve que alguien está siendo ayudado de forma incorrecta, intervendrá de forma educada, y nunca humillando a la persona que sólo intentaba a su vez ayudar.
Salvo que eso suceda, deberías como digo seguir los pasos que éste te propone. Siempre puedes hacer un backup de tu script si no quieres modificar el original.
Lee lo que te diga con atención. En algunas ocasiones me he encontrado con que la duda podría haber quedado resuelta con la primera respuesta que "por instinto" o por parecer suficientemente claro me decía ser la solución.No descartes lo que te diga de inmediato, compruébalo otra vez y no marees al ayudador.
- No intentes engañar al ayudador
Primero porque es inmoral estar haciendo perder el tiempo a una persona que está intentando ayudarte de forma desinteresada. Segundo, porque se va a dar perfecta cuenta de ello.
Por ejemplo, El ayudador te dice en un momento determinado: escribe echo "Contador: $i <br />"; debajo de la linea X.
Poco después te pedirá que le digas cual ha sido la salida en pantalla. No cuela que le digas "no, no sale nada", porque éste sabrá que no le estás haciendo ni puñetero caso ni estás añadiendo las líneas que te está pidiendo.
En otras ocasiones sucede que pides al usuario que vuelva a pegar la línea con la que se estaba trabajando, y descubres, frustrado, que es la misma línea del principio, sin ninguna de las modificaciones que propusiste durante ese tiempo.
Es en esos momentos en los cuales el ayudador está legitimado para mandarte a la mierda ante tal tomadura de pelo.
- No contestes repetidamente "no funciona"
La gente es impaciente y quieres resultados ipsofacto. A la persona que te ayuda esto debería traerle sin cuidado, y hará una serie de tests o comprobaciones sobre el código problemático que en muchas ocasiones tiene el mero propósito de DEBUGEAR.
Si el ayudador te propone añadir un or die, hacer un print_r o un echo de alguna variable, no vuelvas diciendo "sigue sin funcionar".
Él ya sabe que ese echo no va a corregir tu código "mágicamente", ni el or die, ni el print_r ni ninguna otra herramienta de debug. Así que no digas "no funciona", sólo pega la salida que esas funciones han producido en tu página.
Ampliando una respuesta:
- Comprendiendo a los ayudadores
En ocasiones un ayudador parecerá darte una respuesta corta, o poco satisfactoria. Intenta ponerte en su situación, es posible que éste haya respondido a preguntas similares varias veces en ese mismo día, y esté poco propenso a "explayarse".
Ejemplo: Un usuario entra al canal, pega gran cantidad de código, explica hasta la saciedad cual es su problema, divaga sobre su web, su hosting, cuenta que su perro está enfermo, que su paga semanal es escasa, que tiene un sarpullido en la entrepierna...
El ayudador como única respuesta escribe: "register_globals"
No menosprecies la ayuda, al menos tienes una pista. Repite el proceso que ha llevado hasta hacer la pregunta, investiga sobre qué es eso de las register_globals en google o php.net. En menos de media hora habrás corregido tu problema. Es más, habrás aprendido, que es el fin último de un canal de ayuda. (A investigar y a sacarte las castañas del fuego tú mismo).
- Pidiendo más
Si tras realizar ese nuevo proceso sigues sin comprender, puedes intentar dar una vuelta de tuerca más al ayudador. Si demuestras que has buscado información sobre las register_globals y es más: QUE LO HAS ENTENDIDO, éste estará encantado de ampliarte toda la información que necesites.
Este sistema es más didáctico que quedarte en el canal dando la brasa, exigiendo más y más detalles sobre tu problema en concreto. Esto da a entender al ayudador que tú no buscas un aprendizaje, sino una solución rápida a tu problema concreto.
Los que ayudan no son tontos y saben que esto es contraproducente, prefieren que aprendas hoy todo lo referente a register_globals en vez de tener que decirte hoy "usa $_GET['variable']" y mañana tener que volver a resolverte una duda similar.
De esta forma también se cumple la norma de "no pedir código directamente" sino pistas que nos guíen en el proceso de aprendizaje.
- Sé agradecido
Independientemente de que tu ayudador o ayudadores hayan conseguido resolver tu problema, sé amable, agradece su esfuerzo, porque en definitiva han usado parte de su tiempo libre de forma desinteresada para intentar resolver un problema que sólo a ti te atañe. Yo creo que el simple intento es digno de consideración.
- Permanece en el canal
Al menos un tiempo prudencial, que te marches nada más resuelta tu duda es de mala educación, y da sensación de mercantilismo (cuando lo mío se resuelve me voy). Además, mientras estás aplicando la ayuda obtenida al código podrías necesitar ayuda de nuevo. En ese aspecto, el irc es un medio mucho más rápido y sobre todo "en vivo" de obtener ayuda, a diferencia de los foros.
- Comenta si has llegado a una solución
Al ayudador le gustará saber si sus esfuerzos han merecido la pena, comenta cómo has resuelto el error. A su vez puede que le sirva a alguien que esté leyendo en ese instante el canal.
- Piensa antes de responder
Lee bien la pregunta que ha sido planteada. Sólo tú puedes conocer el nivel de tus conocimientos, así que examínate de forma objetiva. ¿Poseo la respuesta a la duda planteada? Si no es así, o la pregunta formulada no tiene una respuesta inmediata deberías preguntarte ¿Puedo guiar al usuario en la resolución del problema? ¿Puedo aportar alguna pista que lleve al usuario a resolver su problema?
- No hagas query al ayudado
Por las mismas razones que las dadas en el caso contrario. Los querys en el caso de la resolución de dudas no hacen sino entorpecer el ciclo natural de aprendizaje del canal.
Como decía en el apartado en cuestión la causa normal del query es la vergüenza. Piensa que en caso de equivocarte es mejor que sea en el general, donde alguien podrá apuntar que te encuentras en un error, no temas equivocarte, nadie es perfecto. Si esta equivocación se produce en privado estarás haciendo un flaco favor al ayudado, e incluso puede que estés fomentando de forma inconsciente vicios en la programación de los que le será difícil desprenderse.
- Ten los manuales siempre a mano
Muchas veces, aunque no estés 100% seguro de una respuesta, dispones de una ventaja que el usuario a lo mejor no posee: "sabes exactamente dónde se encuentra la respuesta". En ese caso siempre te vendrá bien para consultarlo antes de responder y/o darle la url de referencia al ayudado. Cuanto mejor conozcas la estructura del manual mayor será tu ventaja en este aspecto, pudiendo guiar al ayudado directamente hacia la solución.Los manuales son imprescindibles tanto para el uno como para el otro, en ningún momento se ha dicho que el ayudador no aprende mientras ayuda. Aparte de la satisfacción personal de poder resolverle un problema a alguien, el ayudador recibe la recompensa del aprendizaje. Se aprende, y mucho. Ya que las dudas son muy variadas y discurren sobre aspectos muy diferentes del lenguaje de programación el ayudador puede enfrentarse con multitud de problemas diferentes, ajenos a sus propios proyectos, problemas con los que probablemente nunca se hubiera topado de no estar desarrollando una aplicación similar a la que el usuario propone. De esta forma se diversifica su conocimiento.
- Muéstrate flexible
A nadie le gusta que le ordenen ni que le obliguen de malos modos. Más que imponer sugiere una solución. Muéstrate flexible con el código del usuario, aunque veas que habría muchas cosas que corregir y que matizar en el script, cíñete al problema que tiene en ese momento y no le pongas patas arriba el código. Cada cual tiene su ritmo de aprendizaje, si ves que algo podría ser resuelto de forma más correcta añádelo como un consejo o explícale por qué a tu manera sería más rápido o cómodo, pero no impongas a la fuerza tu estilo de programación.
- Cuidado con lo que afirmas
No deseches sin más el código del usuario, a no ser que estés completamente seguro de que es erróneo. Como ejemplo, hace tiempo se presentó un usuario en el canal con un query mySQL tipo:
"INSERT tabla set campo='valor'"
Respondí que el query estaba mal, y que confundía la sintaxis del INSERT con la del UPDATE. No tenía el manual muy lejos y comprobé que esa sintaxis era también correcta. Pude rectificar, pero si no me hubiera molestado en acudir al manual es posible que hubiera provocado confusión en el ayudado o haberle instaurado una idea errónea.
Si no estas seguro al 100% de algo, hazlo saber: "es posible que...", "no estoy seguro pero..." hará que el usuario no se tome tus palabras como una regla inviolable sino como algo sobre lo que aún cabe una investigación.
- Interrumpe sólo si es indispensable
Salvo que la duda sea de gran dificultad lo normal es que baste un sólo ayudador por cuestión. Que varias personas estén proponiendo o aconsejando cosas diferentes a la vez puede causar confusión en el usuario. Una vez un usuario es atendido sólo es recomendable intervenir si tienes algo importante o determinante que decir sobre su duda en concreto, o si sospechas que el ayudador ha cometido algún error en sus afirmaciones. En este caso, interrumpe de forma educada, todos nos equivocamos.
- No des nada por supuesto
Porque es muy probable que estés cayendo en el mismo error que el usuario. La práctica totalidad de los errores que se plantean, errores sintácticos aparte, se deben a que el usuario ha dado algo por supuesto cuando en la realidad no es así. Preguntar cosas como "¿Hay algo en la variable X?" no da muy buenos resultados porque el usuario responderá automáticamente que sí (así somos de tozudos). En vez de ello pídele la salida de un echo de esa variable o un print_r si se trata de un array.