El futuro del software; Uncle Bob

1 me gusta

Espectacular charla de Uncle Bob. Una clase magistral, detallada, bien relatada, que refleja reflexiones reveladoras.

Él realiza un llamado a convertirnos en profesionales responsables, éticos y disciplinados en el desarrollo de software.

Completamente recomendado. No tiene desperdicio. Una lección de compromiso con nuestra profesión. Notable.

Ok, voy a decir algo que es una tincada, pero no sé si se han dado cuenta que los agilistas originales siempre recalcan que después del manifiesto ágil nunca más se juntaron…

Uncle Bob salió con esto del Software Craftmanship porque quizo agregar “don’t write crap” a los principios ágiles y no le dieron la pasada… Se podría haber suavizado la nomenclatura para hacerlo más fácil de digerir a los clientes del agilismo… Pero tuvo que optar por crear su propio movimiento, que debo decir que me gusta más que el agilismo porque pone más reglas, aunque la regla es un poco vaga. ¿Qué significa “don’t write crap”?

Desde ese punto de vista algunas de las reglas de XP son mucho mejores porque te dicen exactamente qué hacer “make it run, make it right, make it fast” es probablemente uno de los mejores ejemplos, lo que dicen los XPers es que make it run y make it right es usualmente suficiente, luego aplicas pruebas de performance y usualmente no es necesario hacer nada más. (En la práctica pones un cache y un buffer y listo). Durante los últimos 15 años he podido comprobar que no sólo es verdad, sino que se podría decir que es “LA” verdad. Grande como el porte de un trasatlántico… Claro que Kent Beck hoy en día se desdice de todo, pero sospecho que es lo mismo que le pasó al tipo de Spring, Rod Johnson, que una vez que están trabajando para otra empresa, tienen que ponerse “políticos”, lo que significa que mienten descaradamente, es súper fácil descubrir todas sus mentiras, cuando mueven los labios es porque están mintiendo. Es tan obvio que debería ser un caso de estudio para alguna escuela de psicología. cambia su tono de voz, los movimientos de su cuerpo se vuelven tiesos y adquieren otro ritmo, pone cara de preocupación, aprieta los labios involuntariamente, etc.

En el caso de Uncle Bob, cuando muestra la foto pixelada y difuminada de los primeros signatarios de la declaración del agilismo, o el manifiesto ágil como se le suele llamar, hay un personaje que dice “no me acuerdo quien es” y es un personaje de barba. Creo que el enojo va por ahí, no se pueden ver y se tiran palos a través de las charlas. Ambos son muy buenos speakers, con estilos diferentes, por su puesto, es raro que aunque las ideas son buenas, sus voces son desagradables… son como muy, pero muy, pesadas, algo arrogantes y se siente como un áura de desprecio hacia los receptores del mensaje. Está bien, si alguien se siente más inteligente, siempre será arrogante, eso es inevitable, pero en el caos de estos speakers es como subir el volumen al máximo, es casi como si te golpearan en el oído, cuando los lees parecen personas razonables, cuando los escuchas, dan ganas de cambiar de canal a la primera vocal.

Supongo que eso es un mecanismo de defensa para no terminar pensando como el resto, porque en general las personas piensan igual, es cosa de que interactúen, y terminan pensando lo mismo. Por lo menos es lo que me pasó con Kent Beck, el tipo es arrogante, sin quererlo. En los últimos videos es totalmente receptivo a las ideas de otros, como chiquilla de 15… eso está mal para un tipo que indica que es uno de los mejores “methodologist” de las últimas 2 décadas. Creo que realmente lo es, pero sus últimos videos son poco confiables.

Uno de los más estrictos y con ideas fijas es Uncle Bob. Dice que los programadores que no hacen tests deberían ir a la cárcel. Creo que eso lo dice todo. Es super exagerado y la audiencia se ríe, pero lo que él dice es que eso es lo que pasa con los contadores cuando no hacen bien su trabajo y no siguen las reglas de su profesión: se van ellos y los gerentes a la cárcel.

Ahora bien, lo interesante del asunto es que Uncle Bob es el único de los participantes que se formó en C++ y ahora reniega de C++. El resto son todos Smalltalkers. Uncle Bob es un programador C++ que dirigía The C++ Report, alguien de relativo peso en la comunidad de C++, para luego convertirse a Smalltalk. O sea un traidor de tomo y lomo. Por cierto a mí me pasó lo mismo en 1994. No sé si yo traicioné a C++ o C++ me traicionó a mí, pero si quieren que desarrole en C++ por menos de 6 palos mensuales no me acerco a esa porquería.

Y coincido plenamente con la idea de que sin tests, los proyectos fracasan, alguien debería irse preso, no sé quién, no sé si el jefe de proyecto, el arquitecto, el programador o el gerente de desarrollo. Por si las dudas los metería a todos presos hasta que demuestren su inocencia. Incomunicados, y para que no hagan más daño a la sociedad, detenidos desaparecidos, como los terroristas. ¿Muy exagerado? Es que no haz visto el código que yo he visto. Si Dios existiera, ya se los habría piteado para salvar a la humanidad de esa abominación.

Ahora bien, Uncle Bob viene de la tradición de C++, yo creo que por eso es tan radical en su pensamiento. Yo también vengo de ahí. Los Smalltalkers no se toman las cosas tan a pecho, porque Smalltalk es un ambiente en el que si echas todo a perder, simplemente no grabas la imagen, y partes de nuevo: Tiempo de restart: 5 segundos. Nadie se enoja si sientes que perdiste sólo 5 segundos, el resto lo aprovechaste probando, aprendiendo, fail fast. La idea de botar al código a la basura y partiste de nuevo, te lleva a pensar que “nada es tan grave”, y puedes probar y probar nuevas ideas, de eso se trata Smalltalk. El pecado en C++ es que después de intentar algo durante 6 meses el proyecto deja de funcionar y no sabes porqué y estás 6 meses debuggeando sin llegar a ninguna parte y ya perdiste un año, ¿qué haces? ¿partes de nuevo? ¿cómo explicas eso al gerente?

Una de las prácticas de XP es: pull the plug. O sea: deja que el proyecto muera (desconéctalo) y parte de nuevo.

Por eso son tan importantes los tests en C++. Según yo en Java tambie´n.

En Smalltalk se inventó (o reinventó) esto de los tests. Se inventó con una biblioteca llamada SUnit que luego derivó en Java coomo JUnit. Se reinventó porque según Uncle Bob en el proyecto Gemini de la NASA se hacían tests en la mañana y se pasaban en la tarde. O sea iteraciones de un dia. Lo peor que podía pasar era perder un día porque se escribieron mal los tests o no se pasaron. Casi sin pérdida.

Mientras que en C++ la sensación es muy diferente. Cada vez que haces funcionar algo es como haber subido una montaña, si empiezas a tener regresiones, se te empieza a caer el pelo… Y puedo demostrarlo.

En otro video de Smalltalk que vi hace poco hablaba un tipo que no estaba titulado y que hablaba de las ventajas de Smalltalk, mostraba una foto de Alan Kay, el inventor de Smalltalk, y decía que estaba trabajando, creo que en HP, y que tomó un programa escrito en 120.000 líneas de C++ y lo tradujo en 400 líneas de C++. O sea lo redujo 300 veces. O dicho de otra manera: Eliminó 119.600 líneas de código inútil.

Ahora imagina lo que significa tener que escribir esas 120 mil líneas, probarlas, debuggearlas, mantenerlas, imagina el nivel de desperdicio. Si me pasan un programa de 400 líneas y me piden arreglarlo, probablemente no me preocupe de los tests. Mentira, estaría escribiendo tests como loco, y tendría al menos 1.200 líneas de tests escritos en un par de semanas. Pero no estaría tan preocupado como con 120.000 líneas de C++ Sería una pesadilla.

Creo que eso explica porqué Uncle Bob tiene ese punto de vista tan radical, mientras el resto tiene una actitud relajada como de “nada importa”, todo se puede arreglar partiendo de nuevo, veamos lo que nos conviene en el momento y probemos, aprendamos más. El movimiento de los patrones de diseño fue creado por casi los mismos personajes, de la comunidad de Smalltalk, y la actitud es coincidente: Acá están los 23 patrones GoF, inventemos más patrones. Al fin y al cabo han aparecido unos 10 patrones más y eso es todo. Y más encima los nuevos patrones son discutibles.

Uncle Bob siempre se concentra en la responsabilidad, en que los profesionales de 40 son más responsables y saben cómo hacer que las cosas funcionen. Saben como cumplir los deadlines, etc.

Bueno, yo tenía 24 años cuando inventé los tests unitarios, tal vez menos, no creo que tenga que ver con la edad, sino qué tan en serio te tomas tu profesión… y obviamente bajo qué lenguaje de programación aprendiste tu profesión.

Una crítica muy común a los programadores es que son muy rígidos para pensar. Eso es porque si construyes un ascensor, no puede funcionar la mitad del tiempo y la otra mitad matar gente. Si eres un ingeniero, tienes que saber cómo hacer que las cosas funcionen predeciblemente, mientras que si eres un escritor de novelas, sólo hay que entretener al público, las metodologías son muy diferentes, y a las jefaturas les carga que los desarrolladores sean tan cerrados de mente, porque si eres un gerente, piensas una cosa, dices otra (porque no te sabes expresar), el programador escucha otra (porque tiene el mismo problema que tú para entender su propio idioma), y más encima entiende algo diferente para cada una de las palabras… termina haciendo cualquier cosa, después de pasar por un periodo de descubrimiento respecto de “qué me quizo decir este PEEEEEEP???”. Termina saliendo otra cosa completamente diferente, pero todos se celebran por el éxito o por el fracaso. Se ocupa un lenguaje “floppy” a propósito, ya que si algo sale mal siempre se puede culpar a la interpretación del problema.

Coincidentemente, los programadores de Smalltalk tienen también esa actitud: todo es posible, pero es un proceso más serio. Alan Kay incluso tiene esa frase “la mejor manera de predecir el futuro es inventarlo”. O sea, la actitud más relajada hacia hacer pruebas y descubrir cosas nuevas, exactamente la actitud contraria de lo que ocurre en Chile, la mentalidad de la gerencia es que no hagas experimentos, porque de alguna manera “tú debes saber cómo se hace”… ¿de qué estamos hablando? De exprimir los limones y luego botar la cáscara vacía. Sacar el jugo, porque alguien tiene que estar dando jugo. JAJAJA

Generalmente las personas más ignorantes tienen las mejores ideas, y cuando digo las mejores ideas, me refiero a las ideas más simples, tan simples que tú dices “esto no puede funcionar así de simple”… y a veces te encuentras con que esas ideas simples sí funcionan, y por lo tanto son varios órdenes de magnitud mejores que las ideas tradicionales.

Esto por ejemplo se puede ver en el código de algunas bibliotecas de Smalltalk, te imaginas código complejo y te encuentras con que donde piensas que está la complejidad son 3 líneas de código:

encontrar ese código: 15 minutos

leerlo: 15 segundos

entenderlo: priceless.

Para todo lo demás existe COBOL, C++ y todos los otros lenguajes que dañan el cerebro.

1 me gusta