No somos vulcanos

Muchas veces, en mis charlas de los últimos años, menciono esta frase “No somos vulcanos”. La comenté en el seminario que dimos con el bueno de Martín Salías en el MUG de Argentina:

Cómo programar y no morir en el intento

¿A qué me refiero con eso de “No somos vulcanos”?

A que somos humanos, y tenemos características que condicionan la forma en que hacemos software. Ejemplos.

Si fuéramos vulcanos, el cliente sabría lo que quiere casi desde el primer momento, o lo analizaríamos sin ambigüedades en unos momentos, al comienzo del desarrollo de un sistema.

Si fuéramos vulcanos, podríamos escribir el programa que necesitamos, desde el principio al final, sin necesidad de pruebas intermedias, o avances paso a paso.

Si fuéramos vulcanos, podríamos escribir y entender rutinas de decenas de líneas y docenas de parámetros. Podríamos manejar más de 5 o 9 cosas al mismo tiempo.

Si fuéramos vulcanos, al ver una nueva forma de hacer las cosas, solamente nos bastaría explicarla para que el equipo la adopte: sería la opción racional, y luego de una demostración lógica de su utilidad, la nueva práctica sería adoptada inmediatamente sin resistencia.

Si fuéramos vulcanos, no habría necesidad de ritos, como reuniones diarias, sino que haríamos lo que tenemos que hacer, sin mayor dificultad.

Si fuéramos vulcanos, encararíamos las tareas que lógicamente tenemos que encarar, cada día, en una secuencia que quedaría clara desde el principio, en vez de dar vueltas y vueltas, o desviarnos, o distraernos, intentando aplazar lo que no queremos hacer, o evitando las tareas que no nos interesan.

Si fuéramos vulcanos, todos tendríamos una clara idea de cuánto vamos a tardar en construir este software que tenemos entre manos.

Si fuéramos vulcanos, escribiríamos las pruebas de software, porque sabríamos de su valor a largo plazo, en vez de tener que escribirlas y correrlas rápidamente, para tener un “feedback” que sicológicamente nos ayuda a tener confianza en lo que estamos haciendo.

Si fuéramos vulcanos, no nos apoyaríamos tanto en las pruebas cuando cambiamos algo: al alterar algo del software, seríamos inmediatamente conscientes de los efectos laterales del cambio y detectaríamos al momento qué otras partes del sistema cambiar, para que todo siga funcionando como se espera.

Si fuéramos vulcanos, nos bastaría leer una vez una explicación de un patrón, para entender al punto su aplicación, intención y contexto.

Si fuéramos vulcanos, no tendríamos que partir el sistema en partes que fueran más manejables para nuestra mente humana.

Si fuéramos vulcanos, las APIs sólo tendrían versión 1.0, la única forma de armar esa API, de aquí a siempre.

Si fuéramos vulcanos, no habría distintos protocolos, aplicaciones clientes y servidores, distintos lenguajes SQL, dialectos de bases de datos, diferencias pequeñas en algo que debería ser implementando de una sola forma. Habría un solo formato de gráficos, otro único de video, y así.

Hasta me atrevería a decir que si fuéramos vulcanos, no haría falta SVN con historia, siempre iríamos avanzando, sin necesidad de volver atrás en algún momento.

Pero como somos humanos, necesitamos la ayuda de estrategias, prácticas, herramientas, y paciencia y voluntad y perseverancia, para llegar a construir software de una forma aceptable. Necesitamos de los ritos, como la reunión diara de standup en Scrum. Como somos vulcanos, no podemos imponer un cambio en una empresa o equipo, tenemos que ir produciendo el cambio de a poco, como escribía en Ser catalizador de cambios. Necesitamos de “soft skills” para manejar las relaciones con los demás, entendiendo no solamente las razones, sino también las emociones, miedos, ambiciones, alegrías y preferencias de los demás, en el día a día. Mucho de las disciplinas de XP, o Scrum, se deben a la naturaleza humana. Como el pair programming, que en Vulcano sería totalmente una pérdida de tiempo la mayor parte de las veces, acá refuerza la tarea, al ser dos humanos que se compensan en sus debilidades. En Vulcano, dos cabezas piensan igual que una, porque la lógica es la misma.

¿Se les ocurren otras diferencias con los vulcanos?

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

This entry was posted in 10549, 3463. Bookmark the permalink.

3 Responses to No somos vulcanos

  1. Pooldaemon says:

    Bueno el comentario, mal la ilustración… Spock es MEDIO VULCANO, por lo tanto no es el mejor exponente de su especie, a veces se distrae cuando programa… :-)

    De todos modos, ya quedó suficientemente claro que los vulcanos solos no lo lograron (de hecho terminaron con el planeta destruído) pero los humanos si! Asi que no está tan malo ser humano despues de todo.

  2. Nestor says:

    El mecanismo de la evolucion funciona mas que nada debido a la variabilidad. En el software, esto no es diferente. La evolucion se da porque mucha gente hace cosas distintas, y solo algunos la embocan. Esto hace evolucionar toda la industria. Una estructura de pensamiento perfectamente logica no es favorable a la evolucion, ya que tiende siempre a objetivos conocidos o por lo menos enunciables, sin los cuales la logica carece de sentido.
    La evolucion es ilógica. Rompe con la logica, la desafia, y generalmente falla. Pero algunas pocas veces triunfa, y ese es el motor que nos ha traido hasta aqui, a nosotros programadores y a nosotros humanos.

  3. JMayer says:

    Otras ramas de la ingenieria también son practicadas por humanos. Sin embargo no se cometen los errores frecuentes que ocurren en la ingenieria de software, que a pesar de los esfuerzos, no logra tener la formalidad y precisión que son habituales en las “otras ingenierías”. Mi conclusión es que no es un tema meramente del profesional sino de las herramientas y metodologías. El software está signado por ser “el arte de la programación” (D.E. Knuth dixit).

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>