En días recientes, me preguntaba por qué es tan fácil entusiasmar a la gente para que aprenda a programar o involucrarse en desarrollo de tecnología, pero tan difícil de entusiasmar en ingeniería de software (las prácticas que no son “escribir el código”). Me cuestioné si mi mensaje ha sido inadecuado o poco claro, porque no causa el efecto de emocionar a las personas.

Hace poco, intercambiando ideas en Twitter con algunas personas, comprendí varias cosas. Éstas son personas que se han dedicado al desarrollo de software por dos, tres o hasta cuatro décadas. Tienen mucha experiencia y un recorrido largo de prácticas y métodos; algunos, incluso, son creadores de algunas prácticas y métodos. Ellos comparten cómo hacen software y su visión de cómo debe hacerse. En esta visión, descartan muchas prácticas y disciplinas bajo argumentos válidos, sin embargo eso hace que solo muestren una fracción de la imagen completa, lo cual ocasiona que se envíe un mensaje erróneo.

Y este mensaje distorsionado es el que ha perjudicado a tres generaciones.

 

La idea que ha perjudicado a tres generaciones

La idea de la que hablo es muy simple: escribir y liberar el código lo más rápido posible.

¿Qué hay de malo en eso? me preguntarás. Es algo que recomiendan los expertos y es una idea que está en el corazón mismo del manifiesto ágil: “Software funcionando sobre documentación extensiva”. Yo estoy de acuerdo en que no tiene nada de malo, a fin de cuentas el software es el código que le dice a las computadoras lo que deben hacer. El problema es que la mayoría de la gente no escucha “es importante” sino que entiende “es lo único importante”.

El resultado es que las personas, nuevas en el ramo o que ya tienen tiempo ahí, se enfocan exclusivamente en aprender lenguajes y frameworks de desarrollo, haciendo a un lado todo lo demás.

Lo vemos frecuentemente:

  • Campañas para enseñarte a programar
  • Hackatones de programación
  • Miles de videos y tutoriales de “trucos para tu lenguaje de programación favorito”
  • Debates y discusiones sobre cuál es el mejor lenguaje de programación.

Los mismos gurús que leo hablan continuamente de ir inmediatamente a escribir el código, o cómo prueban sus ideas en el código. Ellos nos invitan a hacer a un lado “todas las prácticas que no funcionan” y desarrollar software como ellos lo hacen. Algunos comparten el cómo lo lograron, pero la mayoría de la gente se queda con la idea errónea: enfócate solo en el código y olvida todo lo demás.

Escribir código requiere un conjunto de habilidades, que nada tienen que ver con el código

Las personas que se enfocan solo en aprender lenguajes y herramientas de programación, olvidan cuál es el objetivo de hacer software: cambiar el mundo y mejorar la vida de las personas.

Programar no es una actividad que consiste solamente en hacerlo por el mero hecho de la satisfacción técnica (y del ego del programador). ¿Para qué me sirve un montón de código, supuestamente avanzado, que nadie va a usar o que ofrece la solución equivocada?

Cosas que ocurren con frecuencia debido a esto son: muchas iteraciones descartando el producto porque no es una solución adecuada y continuos defectos y problemas graves (como fallas de seguridad o performance).

Lo que los gurús proponen solo es posible teniendo el bagaje que ellos ya han desarrollado: un conjunto de habilidades, que nada tienen que ver con el código, que les permiten ver el panorama completo y tomar la decisión acertada en un tiempo corto. Es decir: están facultados para saber cuál es el código necesario antes de hacerlo, sin necesidad de diagramar o documentar extensivamente.

Sin este conjunto de habilidades, la gente toma decisiones con impactos muy negativos en el producto final:

  • Escribir código sin haber hablado una sola vez con los usuarios ni comprendido sus necesidades.
  • Elegir un framework de desarrollo solo porque está de moda, pero sin entender las circunstancias en las que trabaja mejor.
  • Creer que “desarrollo ágil” consiste solo en codificar y probar manualmente, sin hacer otro trabajo.
  • Modificar el código sin saber el impacto que tendrá ese cambio porque no conocen los principios de arquitectura y de requerimientos no funcionales.
  • Creerse muy bueno (o senior) solo porque escribe el código muy rápido o arregla problemas que nadie puede, pero que fueron ocasionados por él mismo en primer lugar.

En pocas palabras, quieren programar sin desarrollar la disciplina y las habilidades necesarias, con un resultado del que hablé antes: software malo, que perdonamos porque lo necesitamos.

La clave es la disciplina

Yo sé que resulta mucho más atractivo aprender a mover un robot con código o escribir un programa para identificar gatos en imágenes, que especificar requerimientos o hacer diagramas UML, pero lo primero ofrece mayor valor si aprendes lo segundo.

Y sé que mi mensaje tampoco ha sido atractivo porque, en el fondo, involucra lo siguiente:

Para programar bien necesitas ser disciplinado.

Disciplina. Eso es lo que diferencia a los programadores de los ingenieros de software.

La cuesta para transformar la industria del software está muy empinada. Será difícil lograr que este mensaje de disciplina sea escuchado, pero tengo la determinación de hacer a la ingeniería de software sexy otra vez. ¿Me acompañas?

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.