jueves, 7 de mayo de 2009

Sobre la importancia del interlocutor.

Creo que la propia experiencia nos condiciona más fuertemente que cualquier otro factor y que, si bien eso tiene su razón de ser, puede llevar fácilmente al dogmatismo.  Veo algo de esto reflejado en cada discusión en torno de alguna de las dualidades de moda: Windows vs. Linux, Software Libre vs. Software Privativo, Código Abierto vs. Código Cerrado, Java vs. .Net, Oracle vs. MS-SQL y ambos vs. MySql y PostgreSQL… uf, podría rellenar varios párrafos más (se ve que nos gusta hacer polémica). Si rascamos un poco en busca de la experiencia profesional de los polemistas veremos que abunda de un lado de la frontera y escasea (o ha sido traumática) del otro.

colorHell Un pequeño ejemplo: ASP 3.0 me produce urticaria (sobre todo si lo mezclamos con una buena dosis de xml). Pero reconozco que mucho tiene que ver el hecho de que la primera y única aplicación más o menos compleja que hice terminó como la imagen de aquí a la izquierda (extraída de este viejo post). Si hubiese tenido una segunda oportunidad desde cero podría haberme amigado con el lenguaje y hoy estaría defendiéndolo acaloradamente contra PHP (ya no sucederá, ha muerto en manos de él, y merecido se lo tiene). Pero me han comentado casos en los que mediante diversas técnicas se ha podido mantener el orden y construir aplicaciones realmente complejas sin perder la cordura en el intento.

Pero volvamos al hilo. Decía que el peso de la experiencia tiene su razón de ser, y pensaba en lo siguiente: un joven padawan está deseoso de adiestrarse en el manejo de nuevas armas, mientras que Yoda se preocupa más por eliminar al oponente (aunque no de cualquier manera, siempre mantiene las formas y sobre todo la estética). Si el padawan es criterioso no se pondrá a innovar antes de (o en medio de) una batalla… bueno, hasta aquí llego, supongo que se entiende la idea.

Volviendo ahora al desarrollo de software (del que no debería haberme apartado), repasando mi propia experiencia, veo que he cometido errores empujando la balanza hacia uno u otro lado: algunas veces he utilizado herramientas más allá de lo razonable porque las conocía (y mi experticia en ellas me permitía forzarlas) y porque los tiempos apuraban (y un largo etcétera que podemos resumir como “aversión al riesgo”). Por el otro he elegido algunos malos momentos para experimentar.

Por suerte fui aprendiendo y hoy por hoy puedo decir que acerté más de lo que pifié (por lo menos hasta ahora)… ¿por suerte? Un factor común en los errores fue que (llevado por el apuro o el entusiasmo) no tenía y no busqué un referente con alguna experiencia (por más mínima que fuese) en la “herramienta nueva”. Estoy casi seguro de que éste factor explica tanto los fracasos como los éxitos, ya que siempre que la decisión que tomé terminó mostrándose acertada sí lo tenía.

Por supuesto que no tiene por qué ser alguien del equipo (tal vez hasta sea mejor que no lo sea). Puede ser un amigo, un conocido, un allegado. O ni siquiera una persona. Podría ser un caso de éxito (o fracaso) bien documentado, un foro o comunidad en la que se tenga alguna confianza y participación activa. Tampoco es tan importante que sea un experto en la herramienta o un relato de fuente confiable. Basta que nos cuestione o nos apruebe de alguna manera, y que nos fuerce a plantear las preguntas correctas, ésas especialmente incómodas y sin respuesta precisa, en las que encontramos puntos a favor y en contra de cada posible solución, en las que prima la opinión sobre el dato y en cuya respuesta podemos incluso discernir con respecto a ese referente.

Como me señalaba hace apenas un par de días Cerebrado, cualquier programador con un par de logros y moretones encima valorará enormemente tener con quién o en dónde discutir, polemizar o pelear. Lo valora porque (sobre todo si tiene moretones) desconfía de las decisiones en solitario o tomadas por una sola persona a puertas cerradas y sin una discusión previa, así sean las propias.

Al discutir, polemizar o pelear, puede que no se llegue a un acuerdo sobre la posible superación de determinados problemas, pero por lo menos se habrán planteado y tenido en cuenta o descartados conscientemente.

Recalco: no critico el hecho de que decida una sola persona (que al fin y al cabo un equipo no es una democracia… en la que de todas maneras tampoco se decide por unanimidad) sino la falta de un intercambio de ideas previo.

Hace no mucho tiempo (aunque usted no lo crea) programábamos sin internet. En ese tiempo la experiencia era difícil de encontrar y un interlocutor válido mucho más todavía. Hoy no hay excusas, no existe ningún lenguaje o herramienta o sistema o librería o framework del que no podamos encontrar opiniones a favor o en contra. No prestar atención a esas discusiones u opiniones antes de tomar una decisión es… suicida.

2 comentarios:

Anónimo dijo...

En dos (pares de) palabras: completamente de acuerdo contigo. A día de hoy no hay excusa para no compartir, debatir, discutir, rebatir... cualquier decisión que tengamos que tomar, o duda que haya que resolver. Por eso no entiendo cómo no se lleva más a cabo, y se impone la decisión unitaria de un responsable frente al clamor de varios desarrolladores o personal a su cargo, que ve cómo se la van a pegar sin remedio... y no se les escucha.

El desarrollo requiere (o, al menos, se enriquece) con este intercambio de ideas.

Saludos.

Cerebrado dijo...

De acuerdo, la discusión enriquece.
Ahora, cuando uno busca una solución a un problema, y se encuetra con que con lo que discute son fanáticos... la discusión en vez de ayudar entorpece. Y es el problema de hoy, con internet: Alguien dice cualquier estupidez, y como hay millones (o miles, o cientos) que la repiten, afirman y defienden, es complicado obtener un criterio sano.