La diferencia entre programar y ser desarrollador de software

La diferencia entre programar y desarrollar es sutil pero importante. Para resaltarla, veamos cómo esta misma diferencia se manifiesta en una industria que podría parecer no tiene nada en común.

Cuando los doctores trataban enfermedades, no pacientes

El Doctor Jay Katz escribió en su libro de 1984 The Silent World Between Doctor and Patient:

Los médicos se sentían obligados a atender las necesidades físicas y emocionales de sus pacientes y a hacerlo por su propia autoridad, sin consultar con sus pacientes sobre las decisiones que debían tomar. La idea de que los pacientes también puedan tener derecho a compartir la carga de las decisiones con sus médicos nunca formó parte del espíritu de la medicina.

Imagínate despertar de una operación que no pediste, sin una parte de tu cuerpo, porque el médico asumió que 1) querías curarte de una enfermedad que no sabías que tenías, y 2) que lo que decidieron hacer era la única manera de hacerlo.

Hoy en día, eso (casi) nunca sucede. Y la razón es que hace unos 50 años se crearon leyes de protección al paciente, tomando en cuenta el argumento de Katz: que los pacientes tienen puntos de vista completamente diferentes a los de la ciencia acerca de lo que constituye un tratamiento que valga la pena, y, por tanto, deben de ser consideradas en su plan de tratamiento. Escribió:

Es peligroso afirmar que en la práctica de su arte y su ciencia, los médicos pueden confiar en sus intenciones benévolas, en su capacidad para juzgar qué es lo correcto o en su capacidad para realizar sus tareas con humanidad, paciencia, prudencia y sabiduría. No es tan fácil. La medicina es una profesión compleja y las interacciones entre médicos y pacientes también lo son.

La práctica moderna de la medicina no trata enfermedades, sino pacientes. Esto significa que la persona que va a ser tratada está involucrada en la creación del plan de tratamiento desde un inicio. Conoce los pros y contras, y está informada de las implicaciones del procedimiento al que se va a someter.

La relación doctor-paciente es muy similar a la del desarrollador-negocio.

Por un lado, hay expertos en una ciencia, técnicamente adeptos, entrenados (y condicionados) para reconocer patrones y resolverlos con herramientas y procedimientos especializados. Del otro, síntomas evidentes y necesidades aparentes que pueden (o no) requerir de intervención técnica.

La ciencia de la medicina está aún presente en las interacciones de los doctores con sus pacientes. Pero está recubierta por capas y capas de habilidades clave, como:

  1. Comunicación: Los médicos necesitan comunicar de manera clara y comprensible diagnósticos y tratamientos a los pacientes.
  2. Empatía y modales: Es esencial que los médicos muestren empatía y un buen trato para confortar y entender mejor a sus pacientes.
  3. Conocimiento ético y legal: Los médicos deben estar informados sobre las leyes y principios éticos que rigen la atención médica y la confidencialidad del paciente.

¿Volverías a consulta con un doctor que la única solución que te ofrece es una operación, y se niega a considerar otras opciones? ¿Tratarías con un doctor que no te da la información con tacto y paciencia, y se ocupa de que entiendas el significado de lo que te está diciendo?

De programar a resolver problemas

Algunas personas me voltean los ojos cuando hablo de que las dinámicas entre lo que hacemos en la industria del software y la medicina son muy similares. Sí, las consecuencias de las decisiones que tomamos nosotros, y las de los médicos, son muy diferentes. Sin embargo, propongo aprender de los modelos mentales que les ayudaron a otras personas, en otras profesiones, a resolver cierto tipo de problemas que también nosotros podemos encontrar, aunque en diferente nivel de complejidad.

Programar es la tarea mecánica de escribir código y decirle a una máquina qué hacer. Desarrollar software se trata de resolver problemas — a veces a través de la escritura de código. Y para resolver problemas, tenemos que tratar con personas.

Hoy, más que nunca, es vital para las personas que trabajamos en la industria de la tecnología reconocer que tenemos que recubrir nuestras habilidades técnicas con capas de habilidades blandas.

Este es solo el inicio de la divergencia entre programar y desarrollar

El 2 de junio de 2021 escribí:

Con el aspecto técnico resuelto (parcialmente) por inteligencias artificiales, las discusiones técnicas dejarán de ser la parte más importante del desarrollo. Los programadores ahora se dedicarán a tener discusiones sobre la ética y seguridad del código generado por la computadora. Las tareas técnicas serán resueltas, en su mayoría, gracias a la ley de Moore. Desarrollar software ya no se tratará de programar.

Aún habrá trabajos para escribir código, pero requerirán una alta especialización. Las personas que sigan escribiendo código lo harán para crear la infraestructura que soportará al resto del ecosistema: compiladores, IA, generadores de código, redes, etc.

Dos años y medio después, seguimos encaminados a ese futuro. Y cada vez más rápido.