Carlos Ble

Carlos Ble

I am a professional software developer, I solve problems.

I also teach and mentor developers to build better software.

Developing software since 2001.

Can I help you?

  • Do you need high quality tailor-made software?
  • Need training on TDD, clean code or refactoring?
  • Is it risky? do you need advise?
  • May I pair with you to write better code?

Events

Upcoming public training courses:

  1. [Online - en Español] 25 y 26 de Junio
    Test Doubles con JavaScript - Online
  2. [in English] July 7, 8 & 9
    TDD (open to the public) - Tenerife, Canary Islands
  3. [en Español] 14 y 15 Julio
    TDD (en abierto) - Gran Canaria, Canary Islands
  4. [in English] October 13, 14 & 15
    TDD (open to the public) - London, UK
  5. [en Español] 29, 30 y 31 de Octubre.
    TDD (en abierto) - Madrid, Spain

Conferences:

  1. I'll be at SocratesUK 2014
  2. I'll be at the London Test Gathering Workshops.

La metáfora del cirujano

Robert C. Martin lleva años diciendo que un desarrollador de software debería parecerse más a un médico que a un albañil. No se refiere a connotaciones relacionadas con el sueldo, el nivel de vida o la valoración social. Se refiere a la importancia del factor humano en estas profesiones.

El grado de profesionalidad es más determinante en una operación quirúrgica que en una etapa de una cadena de montaje de una fábrica. Pueden darse excepciones lógicamente pero digamos que te preocupas más de investigar quién te va a operar del corazón que de la persona que viene a pintarte la casa. En ningún momento estoy diciendo que una profesión sea más digna o importante que otra.

Estos días viendo el programa El Cirujano me gustó ver una pequeña parte del trabajo del Doctor Julio Mayol (@juliomayol) y me pareció una metáfora excelente aplicada al desarrollo de software profesional. Veamos algunos matices:









  • El cirujano no opera solo. Además de cooperar con anestesistas y enfermeros, hay algún otro cirujano que le ayuda --> Programa en pareja.
    Si la tarea requiere una concentración y una ejecución importantes, ¿por qué confiamos en que vamos a programarlo igual de bien solos?
  • Antes de abrir al paciente, se han hecho todos los estudios posibles para conocer el problema y sus soluciones --> Analiza y haz los spikes que sean necesarios. Conoce patrones de diseño, etc. Pero ten en cuenta que si el análisis se dilata demasiado, el paciente se muere.
  • En la sala de operaciones cuenta con todo el instrumental necesario y conoce perfectamente qué herramienta debe usar en cada caso --> Domina tus herramientas. Comprende tus herramientas.
  • Desconfía de su capacidad intelectual y es lo más metódico posible para evitar errores básicos. En la operación se ve cómo el Doctor Mayol recuenta las gasas que saca del cuerpo del paciente, para no olvidar ninguna dentro antes de cerrar --> Practica Test Driven Development.
  • Conoce las posibles consecuencias de cada actuación y está preparado para que las cosas vayan mal --> Equivocate pronto, readapta y sigue.
    Es la esencia de la agilidad, fallar rápido para corregir y mejorar.
  • El cirujano no admite que el paciente le diga cuánto puede tardar en terminar la cirugía ni cómo tiene que hacerlo --> Trabaja sin prisa pero sin pausa. Puedes manterner el foco con la técnica del pomodoro.
  • El cirujano sabe que por encima de todo está la salud de su paciente --> Lo más importante es el negocio de nuestro cliente.

Podríamos seguir con una extensa lista de parecidos "razonables" (yo los veo razonables). Cuando veo todas estas medidas, lo que pienso es en profesionalidad. Si queremos que se nos respete como a un profesional de la medicina, tenemos que ser tan profesionales como ellos. Mientras sigamos trabajando sin ser suficientemente rigurosos, seguiremos estando en el lado de la magia y las ñapas.
Steve McConnell dice en Code Complete que uno de los indicadores de profesionalidad es cuando dejas de creer en la magia y te preocupas por entender el comportamiento de tus herramientas. Recuerda que las máquinas de hoy en día siguen siendo deterministas.

La metáfora del cirujano deja de ser válida en muchos aspectos. Cuando cometemos un error básico y entregamos un producto defectuosos, generalmente nadie muere por ello. Esto es positivo y muchiiisimo menos estresante para nosotros. Aunque tambien hay excepciones.
Por el contrario, en nuestro sector los cambios son mucho más rápidos y teniendo en cuenta que aparecen herramientas nuevas todos los días y que a veces te ves forzado a cambiar con rapidez, no siempre puedes dominar la herramienta. Yo mismo me equivoqué hace unos meses con la elección de la plataforma cloud para nuestro proyecto. Sintoma de que hay que seguir madurando profesionalmente. Sin embargo lo importante es la progresión, la superación, la retrospectiva.

Aunque existen situaciones (sobre todo de mercado) que obstaculizan a veces nuestra profesionalidad, la meta debe ser alcanzarla, reconocer su ausencia y perseguir su consecución. Una cosa llevará a la otra. El mercado no nos favorecerá si no lo exigimos nosotros mismos.

Debemos reivindicar nuestra competencia con hechos y no sólo con titulaciones.

Enjoyed reading this post?
Subscribe to the RSS feed and have all new posts delivered straight to you.
  • http://cnatra.blogspot.com CNatra

    Si nos vamos a los precios con que compiten las empresas en el mercado, el paciente debería saber si quien le opera es un cirujano de 3.1/4 o uno experto… con las conocidas consecuencias, además de por los precios que suelen ofertarse, por el currículum de los que le “operarán”… y asegurarse que son ellos quienes “le operan” y no le hayan presentado currículums a modo de fachada — contacto directo entre paciente y cirujano.

  • Eduardo Ferrández

    Aunque está implícito en todo el post creo que viene bien hacerlo explícito: el cirujano busca la solución y la aplica él mismo, no delega en otros.

    Buen post.

  • http://1poquitodtodo@blogspot.com Juan Quijano

    Buenas,

    Dios que confundido creo estás en este post:

    “El cirujano no opera solo. Además de cooperar con anestesistas y enfermeros, hay algún cirujano que le ayuda –> Programa en pareja.”
    * Podriamos decir que opera en EQUIPO. Pero nunca en pareja. Dos cirujanos no se relevan en cortar a menos que haya que sea una intervención muy larga.

    “En la sala de operaciones cuenta con todo el instrumental necesario y conoce perfectamente qué herramienta debe usar en cada caso –> Domina tus herramientas. Comprende tus herramientas.”
    Confundes el utilizar las herramientas con algo tan enormemente complejo como un IDE tipo Visual Studio o Eclipse y sus plugin. Por muy compleja que sea la herramienta médica, no llega al nivel de complejidad de cualquier herramienta de desarrollo.

    “Desconfía de su capacidad intelectual y es lo más metódico posible para evitar errores básicos. En la operación se ve cómo el Doctor Mayol recuenta las gasas que saca del cuerpo del paciente, para no olvidar ninguna dentro antes de cerrar –> Practica Test Driven Development.”
    Absurdo. Si utilizara algo parecido al TDD, realizaria el corte de acuerdo al número de gasas, añadiria más gasas y volveria a cortar. Asi que hasta que la operación terminara.

    “Conoce las posibles consecuencias de cada actuación y está preparado para que las cosas vayan mal –> Equivocate pronto, readapta y sigue.”
    Justamente al reves. La cirugia sería, en todo caso, una métodología waterfall. No te puedes equivocar y reparar un corte mal echo o una extracción de un organo por error.

    “El cirujano no admite que el paciente le diga cuánto puede tardar en terminar la cirugía ni cómo tiene que hacerlo –> Trabaja sin prisa pero sin pausa. Puedes manterner el foco con la técnica del pomodoro.”
    Comparas un paciente con un cliente: falso. El paciente se le cura una enfermedad, al cliente se le ofrece valor.

    “El cirujano sabe que por encima de todo está la salud de su paciente –> Lo más importante es el negocio de nuestro cliente.”
    Cierto, pero en este caso el paciente y el médico están de acuerdo. Entre el desarrollador y el cliente esa igualdad no es casi nunca cierta.

    Creo que no has entendido la similitud que hacia Martin. El se refiere a la necesidad de preparación que requiere un desarrollador y que no es, a diferencia de un albañil, una actividad meramente física. Que tiene un gran porcentaje de talento. Y, yo me iria mucho más lejos, un aún mayor porcentaje de arte.

    Pero la cirujia, haciendo la similitud con métodologías de desarrollo, es justo lo contrario a Agile. Y contrario a las conclusiones que defines. Es waterfall puro.

    * Nunca rotan los roles (un anestesista cortando?)
    * No se entra sin muchos análisis exhaustivos.
    * Hay una métodología muy extricta y documentación muy exhaustiva.
    * No hay opción al error.
    * No existe el concepto de test. El unico test es si la operación ha ido bien o mal.
    * El equipo existe para que el cirujano haga su trabajo. Piramide pura.
    * No hay opción a la creatividad como en el más pequeño desarrollo de software.

    Finalmente: el paciente se juega la VIDA. En desarrollo de software, salvo casos muy, muy específicos, no.

  • http://1poquitodtodo@blogspot.com Juan Quijano

    Buenas,

    Totálmente de acuerdo contigo con lo de las títulaciones:

    Pienso que deberiamos seguir el ejemplo de la medicina, claro yo estuve en la universidad hace ya casi dos decadas, y a los X años de carrera deberíamos tener al menos tres años de trabajo. El internado, la residencia y la especialidad (casi 5 años en medicina ademas de la carrera y de trabajo real) que tienen los médicos… pero quien lo paga?

  • Oscar

    Hombre Juan, creo que en algunos casos estás llevando la metáfora a un grano muy fino y ahí siempre encontrarás diferencias, sin embargo:

    “En la sala de operaciones cuenta con todo el instrumental necesario y conoce perfectamente qué herramienta debe usar en cada caso –> Domina tus herramientas. Comprende tus herramientas.”
    Confundes el utilizar las herramientas con algo tan enormemente complejo como un IDE tipo Visual Studio o Eclipse y sus plugin. Por muy compleja que sea la herramienta médica, no llega al nivel de complejidad de cualquier herramienta de desarrollo.

    Nadie ha entrado a valorar cuál es más compleja, sino que ambos deben dominarlas, sean cuales sean tus herramientas, yo trabajo intensivamente con un Notepad, para mi trabajo es importante, y ya me dirás la complejidad que tiene…

    “El cirujano no admite que el paciente le diga cuánto puede tardar en terminar la cirugía ni cómo tiene que hacerlo –> Trabaja sin prisa pero sin pausa. Puedes manterner el foco con la técnica del pomodoro.”
    Comparas un paciente con un cliente: falso. El paciente se le cura una enfermedad, al cliente se le ofrece valor.

    Ya me dirás que curarle una enfermedad no es ofrecerle valor… otra cosa es que creas que el cliente (paciente) no genera dinero alrededor de ese valor, que para mí sí que lo genera, una enfermedad (casi) siempre hará que generes menos dinero… que no le curen una lesión a Ronaldo, a ver si eso no hace que pierda valor…

    “El cirujano sabe que por encima de todo está la salud de su paciente –> Lo más importante es el negocio de nuestro cliente.”
    Cierto, pero en este caso el paciente y el médico están de acuerdo. Entre el desarrollador y el cliente esa igualdad no es casi nunca cierta

    No siempre lo están, o nunca has oído el: “Caballero yo le recomiendo que se someta a la operación”, a lo que responde “Yo no me opero”, pero sí, normalmente hay menos problemas entre paciente-médico que desarrollador-cliente pero eso se debe a varios motivos, uno es por ejemplo que en medicina hay menos decisiones que elegir, si me parto un brazo elijo si me lo arreglan o no, pero no si quiero un método específico, color de escayola, que si me la pones en el brazo izquierdo o el derecho y mil cosas más…

    Nunca rotan los roles (un anestesista cortando?)
    Un desarrollador tampoco, desarolla software, o acaso hace administración de sistemas?? me responderás con cierta razón que sí, pero si eres estrictamente desarrollador no lo haces, sin embargo nadie niega que un desarrollador haga sistemas y rote o que un anestesista sea también cirujano… por poder puede

    Saludos.

  • http://carlosble.com Carlos Ble

    Las subcontratas son ciertamente un caso en el que la metafora no aplica de ninguna manera. Por eso ya no cojo nada que venga por subcontrata.

    Como metafora, se puede llevar tan lejos o tan cerca como cada uno quiera. Por eso Juan lo ve tan contrario. Para mi, TDD en este caso es el metodo que te evita errores humanos por su rigurosidad y no la tecnica con la que vas haciendo pequeños cortes y tal como dices.

    Ten en cuenta que la medicina lleva siglos mientras que el software lleva unos 50 años. Es como si estuvieramos ahora en la época en que quemaron a Miguel Servet en la hoguera. En todos estos años la medicina ha avanzado a base de prueba y error, de manera muy ágil. Ahora cada día las pruebas son menos dramáticas según qué casos y al haber más documentación pueden ir mas sobre seguro.
    De hecho, igual de aqui a 200 años, podemos hacer waterfall con el software de manera exitosa :-)

  • Maria

    Hola la verdad muy bueno el blog sobre cirugía, hoy en día es muy interesante ver y saber como ha ido eolucionando la cirugía estética barcelona ya que se considera que esta al alcance de todos