Desarrollo [de software] gobernado por humanos

El siguiente texto es una traducción [un tanto libre] del capítulo Human Driven Development,  del libro Conscious Software Development de Jeff McKenna.

Lo relacionado con el software es hard

Si usted es un desarrollador joven, es probable que acostumbre trabajar solo en un computador. Tal vez disfrute resolviendo problemas por su cuenta. Muchos de nosotros en el negocio del software iniciamos nuestras carreras trabajando aislados y nos gusta.

Pero si vamos a resolver problemas en un contexto comercial, entonces tendremos que aprender a disfrutar trabajar con otros.

Los sistemas complejos como el software solo pueden ser diseñados y desarrollados por varias personas trabajando juntas para resolver problemas, obligándolas a comunicarse entre ellas – no solo con el computador. Este es un mensaje importante del desarrollo de software ágil que dice: “Podemos hacer más si trabajamos como un equipo.”

¿Pero qué significa esto para usted como individuo? ¿Significa que tiene que cambiar su forma de ser? ¿Que ahora usted debe actuar diferente? ¡Es probable que así sea!

¿Significa que usted tiene que aprender de una forma diferente? Nuevamente la respuesta es: ¡Es probable que así sea!

¿Cómo puede lograr esto? Siendo consciente sobre la forma en que usted trabaja, pensando acerca de sus procesos y los procesos de su equipo de trabajo – y no solo sobre los procesos del computador.

Muy temprano en mi carrera profesional, el computador era la pieza central. Nada mejor que ir solamente por el problema y resolverlo.

Como desarrolladores, estamos inclinados de forma natural a hacer cualquier cosa por nuestra cuenta. Sentados frente a la máquina, encendemos nuestro sistema, tecleamos el trabajo y lo enviamos. Las primeras manifestaciones de problemas aparecen cuando alguien lee la documentación o el código y encuentra errores simples, cosas como palabras que hacen falta o excepciones ausentes.

Si los errores tipográficos y los fallos en la codificación fueran el único efecto dañino de trabajar en solitario, no sería un gran problema. Pero trabajando junto a otras personas es algo que está más allá de simples errores de omisión. El punto más crítico es que cuando trabajamos solos perdemos la oportunidad de ayudarnos unos a otros y de mejorar en lo que hacemos.

Buscando un contrato de consultoría, envié una de mis primeras propuestas a un gerente de proyectos de software quien le dio una ojeada y me hizo tres preguntas. Respondí las dos primeras sin problemas, pero fallé en la tercera – había pasado por alto un defecto de diseño muy simple y, en un abrir y cerrar de ojos, se terminó. No conseguí el contrato.

Ese momento fue un despertar para mí. Aprendí que el hecho de trabajar en algo y creer que se hizo bien no significa que esté bien hecho. Aprendí que necesitaba ayuda, y no solo cuando aparece un problema, sino durante todo el camino. Cuando usted va solo, puede cometer los errores más tontos.

Fue el primer indicio que tuve al respecto. “Un momento, esto de ser Llanero Solitario no va a funcionar.”

elefante2Aprendiendo a aprender

Así que ahora aparecen las preguntas, ¿Cómo aprendo cómo aprender en este nuevo mundo? Para resolverlo, tengo que entender cómo aprendo yo. Esto aplica para usted – usted tiene que entender cómo aprende.

¿Lee libros?

¿Habla con otras personas?

¿Primero debe intentarlo en la práctica y luego lee sobre el tema?

¿Qué funciona para usted? ¿Qué se le dificulta?

Lo difícil está bien, si esto es efectivo. Lo fácil también está bien.

Yo se que aprendo mejor leyendo. Si necesito aprender un nuevo lenguaje, comienzo leyendo el manual completo y luego resuelvo algunos problemas usando el lenguaje. He aprendido que si solo me sumerjo en resolver problemas con una nueva tecnología sin un panorama; sin una imagen global, como la que se obtiene leyendo primero un manual, me costará mucho.

Esto lo aprendí probando los dos métodos. Identifiqué mi mejor modo de aprender a través de ensayo y error. El suyo es diferente al mio. ¿Cuál es?

Los académicos y los teóricos pueden decirle un montón de cosas sobre la forma en que las personas aprenden, y si usted está interesado en el estudio del aprendizaje, entonces no lo dude y estúdielo. Pero al final lo que importa es comprender cómo aprende usted y la única forma de hacerlo es ensayar métodos y después mirar de manera honesta los resultados.

Además de leer, me gusta aprender interactuando con otras personas, por esta razón programar en parejas es una práctica maravillosa para mi, no solo porque se elabora mejor código, sino porque se aprende muchísimo.

elefante3 elefante3

Analice como aprendió las cosas que conoce mejor

¿Cómo aprendió, por ejemplo, a juzgar si un diseño es bueno o malo? Si usted es precipitado, su repuesta podría ser, “¡Pues, hermanito, solo lo codifico y si funciona, entonces para mí es un buen diseño!

Bien, eso no será suficiente hoy en día. Usted necesita tener un proceso establecido que le permita explorar ideas alternativas antes de comenzar a codificar.

Yo necesito imágenes cuando hablo sobre diseño; las palabras no son suficientes. Sin imágenes, se que no puedo saber realmente cuál es el diseño. Me tomó mucho tiempo darme cuenta que esto me ocurría. Construí una de las primeras herramientas de modelamiento gráfico sin haber hecho algún modelamiento -pues yo no conocía algo mejor. Irónico ¿cierto?

Luego conseguí un trabajo en otro lugar utilizando esta misma herramienta de modelamiento para hablar sobre diseño. La compañía que me contrató deseaba explorar a profundidad el problema de diseño que estábamos enfrentando, y utilizamos la herramienta para hacerlo.

El bombillo se encendió para mi. Me di cuenta de la cantidad de formas en que se puede hablar de un problema usando algún tipo de lenguaje gráfico. Logré adquirir la habilidad de mirar las cosas de forma diferente y comunicarme con diferentes personas para hablar sobre el tema.

Así que tómese un tiempo, reflexione sobre sí mismo, busque las cosas que le ayudan a aprender mejor y, entonces, haga más de eso. Usted puede encontrar el tiempo, porque escribir código en la actualidad no consume tanto tiempo como antes. Si usted puede tener su base de conocimiento creciendo por delante de otros en su campo, usted se mantendrá haciendo las cosas mejor y mejor.

elefante4 elefante4 elefante4

El panorama general es  el detalle, el detalle es el panorama general

“¿En qué estoy interesado?”

Esa es la pregunta realmente importante.

El desarrollo de software con consciencia  implica mantenerse actualizado consigo mismo, con la tecnología y con su equipo de trabajo.  Esto implica mostrarse y estar disponible a todas las personas y actividades que están alrededor suyo. Por esta razón cuando hablo sobre “aprendizaje” en el contexto del desarrollo de software, no solo estoy hablando de las destrezas técnicas, hablo del aprendizaje que está ocurriendo a su alrededor en este momento, y del aprendizaje que viene y que debe apropiarse.

Uno de mis primeros trabajos en programación fue en Australia en la década de 1960, trabajando para una organización grande dedicada a la investigación. Su cultura exigía que toda persona en la compañía debía dedicar al menos cuatro horas a la semana para aprender cosas nuevas.

Ellos no querían que nosotros nos enfocáramos en aprendizaje incremental: aprender cómo hacer alguna cosa nueva con la tecnología que ya conocíamos y usábamos; ellos deseaban que miráramos más lejos. Así que dedicábamos ese tiempo a aprender y luego reportábamos sobre lo que habíamos aprendido.

Aprender no es sólo sobre mejorar las destrezas y el uso de las herramientas que usted está usando actualmente. No es solo sobre cosas como estas: ¿Cómo puedo ser un mejor programador en Java? Es importante que usted no dedique todo su tiempo a los detalles de su profesión, pues no tendrá tiempo para ver las cosas importantes que vienen hacia usted -y las cosas importantes vienen a usted todo el tiempo.

Las pequeñas cosas es mejor aprenderlas haciendo. Haciendo el trabajo de codificación real y hablando a otros desarrolladores sobre eso, es como aprendí lo pequeño, cosas de nivel muy bajo en lo que necesitaba ser muy bueno -pero también necesitaba ser muy bueno en la visión de alto nivel, y un montón de lo que leo es sobre el panorama general.

Usted necesita aprender a moverse rápidamente entre los detalles y el panorama general -debe estar moviéndose siempre, oscilando entre estos dos mundos.

Trato de mantener mi aprendizaje sobre el panorama general de cosas menos programáticas. Lo hago siguiendo lo que es interesante para mi.  Demasiada información nos envuelve y es fácil perderse y es fácil sentir que se está perdiendo demasiado tiempo vagando entre cosas aparentemente fortuitas que están flotando en el éter, sencillamente porque hay demasiado.

¡Pero es importante perderse!

Es importante que usted haga algo disperso. Esta es la razón por la cual tomar consciencia es una disciplina difícil de dominar -usted podría necesitar perderse ahora para ver con claridad después. Exige que usted confíe mucho en usted mismo y en el universo que le rodea. Pero si los monjes mendicantes pueden hacerlo, ¡usted también puede!

elefante5 elefante5 elefante5 elefante5

¿Por qué es importante tener la mirada en el panorama general?

Una de las características del arte del desarrollo de software es que en la medida que usted sea un mejor desarrollador, más alto es el nivel de abstracción en el cual trabaja.

Esto no significa que usted no pueda enfocarse y ser muy bueno en algún área específica, pero en mi opinión esto no es suficiente para ser un experto en cómo hacer algo. Sin duda yo fui un experto de clase mundial en Smalltalk cuando trabajaba en ese lenguaje. Pero al mismo tiempo estaba interesado en otras cosas.

Cuando Smalltalk pasó de moda el panorama general que yo había construido, mi visión en grande, contribuyó a los principios y prácticas que ahora conocemos como desarrollo de software ágil. Cada etapa de mi carrera ha madurado en las etapas que le antecedieron.

Cuando los conceptos de desarrollo ágil se juntaron por primera vez, todo aquello de vistas de alto nivel y patrones tuvo sentido para mí porque, conociendo la implementación de patrones en Smalltalk, ya había estado estudiando y pensando las cosas en un nivel más alto de abstracción.

Si desea realmente estar consciente sobre lo que usted está haciendo y hacia dónde las cosas se están dirigiendo, sobre el panorama general, entonces dedicará una importante cantidad de tiempo a aprender.

El valor de visualizar el panorama general es que aun cuando usted tenga la mirada sobre el código de algún proyecto, será capaz de percibir la llegada del momento mágico. De repente se dará cuenta y dirá, “un momento, he estado haciendo cosas en las que soy realmente bueno, pero si hago las cosas de esta otra manera ¡puedo triplicar lo que hago! ¡Incluso puedo quintuplicarlo!

Ir a los detalles y conseguir lo mejor de estos detalles en el código, le permitirán mejorar varias decenas de puntos. Pero ¿es esto suficiente? ¿Qué pasa si lo que estamos buscando es mejorar varias centenas de puntos? Al final realmente deseamos mejorar al máximo lo que estamos haciendo, no solo un poco. Las decenas suman, pero las centenas son el verdadero resultado de logros reales.

elefante1 elefante1 elefante1 elefante1 elefante1

¿Cómo pensamos sobre algo de forma diferente?

¿Podemos tomar alguna cosa que alguien más descubrió en otra disciplina y aplicarlo a lo que estamos haciendo, de tal forma que conjuntos enteros de problemas se puedan resolver?  Esta clase de cambio y mejora  exponencial es a lo que nos referimos cuando hablamos sobre aprendizaje.

Para lograrlo, usted debe tener suficiente visión fuera de su pequeña área focal, debe ser capaz de ver estos grandes patrones cuando ellos están ahí, y aplicarlos.

Recuerdo cuando aprendí geometría en bachillerato. Aprendí los teoremas como los demás estudiantes. Podía, de algún modo, resolver problemas aplicando de memoria el “mejor” teorema. Era aburrido. Y tedioso.

También aprendí los principios y las abstracciones. Con esto a mi disposición podía resolver los problemas que me habían asignado aplicando los principios y las abstracciones. Era más difícil pero a la vez era más desafiante: ¿Cómo podía devolverme a las abstracciones fundamentales? Este aprendizaje me ha servido también para el desarrollo de software.

Posteriormente en la universidad volví a revisar problemas de física y seleccioné algunos interesantes para resolverlos con geometría básica, solo para ver como estos campos del conocimiento se relacionaban, atando los cabos sueltos, ejercitándome al alcanzar altos niveles de abstracción en dominios del conocimiento de los cuales no sabía demasiado.

Tuve la oportunidad de asistir a clases dictadas por Richard Feyman en Caltech donde pude mejorar algunas de estas habilidades. Como una muestra de lo que estoy diciendo puede revisar el libro “La conferencia perdida de Feynman” (Feynman’s Lost Lecture). En dicha conferencia él utiliza los conceptos más básicos de geometría y de física para mostrar por qué los planetas se mueven alrededor del sol describiendo trayectorias elípticas. obviamente yo nunca he alcanzado la habilidad de él, pero ayuda a mostrar lo que quiero decir.

En el desarrollo de software el uso de patrones es un ejemplo claro de la utilidad de la abstracción. Entendiendo las fuerzas y las restricciones involucradas permite tener soluciones bien conocidas.

Como desarrollador de software, los conceptos profundos y abstractos se me presentan todo el tiempo, y considero que el aprendizaje a este nivel es increíblemente importante para ser un desarrollador de software con consciencia.

¿Qué hace que sigas trabajando?

El siguiente texto es un extracto del libro “Lo que hacen los mejores estudiantes de la universidad” de Ken Bain. La versión original (en Inglés: “What the Best College Students Do“) es de 2012 y de donde extraje el texto es la versión en Español de 2014, de la página 241 a la página 246. Los enlaces a Internet mostrados aquí, que buscan ayudar a entender el contexto, no existen en el libro original.

Mi intención al publicar este extracto es invitar a leer el libro completo, pues considero que sería de gran provecho para aquellas personas que estudian buscando desarrollar el poder dinámico de la mente y aportar a la sociedad antes que perseguir matrículas de honor o simplemente sobrevivir en alguna institución educativa.

¿Qué hace que sigas trabajando?

Años atrás, Walter Mischel, psicólogo entonces en la Stanford University, llevó a cabo un experimento ahora famoso en el que ofrecía a unos niños de cuatro años una nube de golosina en el momento, o bien dos de esos esponjosos dulces si esperaban a que él regresase de hacer un recado. En el caso de que decidieran comerse una de esas bolas blancas inmediatamente, todo lo que tenían que hacer era tocar un timbre, pero sólo conseguirían una y no las dos que habrían recibido si se hubiesen esperado. Él abandonaba entonces la habitación, dejándolos con una bandeja repleta de irresistibles chucherías, incluidas las nubes, galletas y rosquillas. Algunos niños no podían resistir la tentación y, una vez que todos los adultos habían dejado la estancia, se atiborraban de golosinas o tocaban inmediatamente el timbre. No obstante, otros sí resistían y esperaban pacientemente la recompensa mayor.

Años después del experimento, Walter y sus colaboradores hicieron un seguimiento de aquellos niños y de sus progresos en la vida. De los datos que recogieron surgieron algunas conclusiones extraordinarias. Los niños capaces de resistir más tiempo crecieron hasta convertirse en estudiantes y adultos productivos y de éxito, mientras que aquellos que optaron por la gratificación inmediata en lugar de la diferida tuvieron a menudo problemas de comportamiento en la escuela, no les fue tan bien académicamente, les resultó más difícil mantener sus amistades y el promedio de sus calificaciones SAT2 fue doscientos diez puntos más bajo de lo que cabía esperar.

¿Había algo especial en los que eran capaces de esperar la doble gratificación, o habían aprendido alguna técnica secreta para evitar caer en tentación? En los últimos veinticinco años, los psicólogos han descubierto que los niños capaces de resistir encuentran mejores formas de abstraerse y dejar de pensar en las nubes de golosina. Desean la chuchería tanto como los demás, pero aprenden a concentrarse en algo diferente en lugar de centrar su atención en los dulces. Además, los científicos sociales han descubierto que si enseñaban a los niños algunos trucos mentales para obviar la presencia del señuelo, como pensar en que éste no es más que una simple fotografía y no el propio producto, podían aumentar sensiblemente la cantidad de tiempo que los chicos eran capaces de resistir.  «Una vez que te das cuenta -observó hace poco Walter Mischel- de que la fuerza de voluntad no es más que un asunto de aprender a controlar tu atención y tus pensamientos, entonces es cuando comienzas a potenciarla de verdad».3

Para nuestros mejores estudiantes, aprender a dejar a un lado distracciones tentadoras se convirtió en parte de su plan para ponerse a trabajar. Su enfoque era a menudo similar al de los chicos de Walter más capaces de esperar la gratificación. La mayoría de ellos decidió que tenía un propósito para su educación y que éste era su responsabilidad. Con ese propósito y ese control personal firmemente establecidos en su pensamiento, aprendieron a encontrar distracción en sus propios estudios y a mantenerse alejados de la fiesta a la que pudieran ser invitados, de la página web que podrían visitar, de la llamada telefónica que podrían hacer, del juego de ordenador al que podrían jugar o de cualquier otra diversión seductora. Consiguieron mantenerse tan absortos en su trabajo que no tenían tiempo para pensar qué otra cosa podrían hacer. Pero esa determinación también llegaba a menudo de una mezcla de compromiso moral, empatía y humanidad, así como del papel que su trabajo podría desempeñar en esa dedicación a algún otro propósito de mayor envergadura. Frecuentemente, esto implicaba tener que averiguar la importancia del objetivo global, y sólo después enfocar de cerca los detalles de la próxima tarea para comenzarla con buen pie.

Algunas personas me dijeron que tenían que pensar en cada uno de los pasos para, digamos, escribir un artículo, desde elegir una pregunta hasta el paseo a la biblioteca. Muchos de ellos se imponían plazos de tiempo, mostrándose responsables ante ellos mismos, y conseguían que esos límites autoimpuestos mantuvieran apartada su atención de las chucherías de sus vidas. También tenían que creer que podían hacer algo. Ya fuera Stephen Colbert terminando unos estudios de teatro de tres años en dos, o Neil deGrasse Tyson comprendiendo los cielos, habitualmente perseveraban en la tarea pensando en las recompensas principales de su búsqueda. Disfrutaban de las alegrías de su propia pasión por algo, a lo que añadían un alto compromiso moral que los guiaba incluso en circunstancias de distracción máxima.

No obstante, no puedo afirmar que hubiera alguna técnica que funcionara a todos. En cambio, sobre su enfoque hay un asunto de más calado que merece nuestra mayor atención. Su secreto está en dedicarse personalmente al desarrollo del poder dinámico de sus propias mentes, utilizarlas para conseguir un mundo mejor y explorar después aquello que funciona, para en definitiva no tener que depender de las propuestas de nadie más. En vez de esto último, se mantenían en todo momento abiertos a cualquier buen enfoque que pudieran encontrar en otras personas. Algunos, como Tia Fuller, Neil deGrasse Tyson o Dudley Herschbach. se programaban un calendario y lo seguían a rajatabla.4 Otros no. Y si bien todos ellos hacían lo que a cada uno mejor le funcionaba, en ocasiones tomaban ideas prestadas que aprendían de otros, aunque siempre coincidían en que el autocontrol y la gratificación diferida podían ajustarse a cualquier medida.

En uno de los ejercicios de Paul Baker con que se topó Sherry Kafka, entre otros, los estudiantes pensaban alguna tarea creativa que hubieran llevado a cabo en el pasado, ya fuera hacer un pastel, escribir un relato, idear un atuendo, resolver un problema matemático o lo que fuese. Después examinaban qué requirió de ellos esa tarea, qué actitudes mostraron o si mantuvieron el control de sus acciones o respondieron a las órdenes de alguien; reflexionaban sobre los rituales, sobre cómo hacer una programación o comerse un helado, sobre el modo de llevarlo a cabo; también qué se dijeron a sí mismos, qué visualizaron, dónde trabajaron, por cuánto tiempo, a qué horas del día; qué valoraron más; o si vincularon la tarea a algún propósito de mayor alcance, si tuvieron en mente en todo momento el sentimiento que tendrían una vez hubieran terminado, si se centraron en cada uno de los pasos del proceso o si ambas cosas; pensaron en el modo en que se sintieron al terminar la tarea, si disfrutaron de la tarea o sólo valoraron los resultados… Debían conversar consigo mismos y comprender sus propias mentes y la forma en que éstas trabajaban, y fue ese examen personal el que los llevó a las prácticas concretas que dirigieron sus trabajos, y no una prescripción estricta de determinadas actividades y procedimientos concretos.

En los últimos años, muchos investigadores han mirado la otra cara de la moneda al explorar las causas por las que las personas aplazan las tareas cuando creen y están convencidos de que les iría mejor si las terminasen. La gente, en general, y los estudiantes universitarios, en particular, tienen la mala costumbre de procrastinar [diferir, aplazar, postergar], de dejar las cosas por hacer hasta última hora. Conforme la investigación ha ido explorando varios aspectos de por qué las personas demoran algunas tareas y lo que se puede hacer al respecto, ha ido apareciendo un asunto dominante. Como dijo Timothy Pychyl, director del Procrastination Research Group (Grupo de Investigación sobre la Procrastinación) de la Carleton University, «la procrastinación [postergación] se trata de la ausencia en tu vida de proyectos que reflejen realmente tus objetivos».5 Nuestros personajes encontraron formas de evitar la procrastinación porque tenían fuertes motivaciones intrínsecas y proyectos que reflejaban completamente sus objetivos.

La sabiduría popular mantiene que para liberarse de las garras de la procrastinación debemos condenarla en nosotros mismos, reprochándonos la costumbre tal y como lo haría un rígido supervisor. No obstante, estudios llevados a cabo por Timothy y otros se han hecho eco y han complementado un asunto que ya hemos explorado: perdonarse a uno mismo. Descubrió que aquellos estudiantes de grado de psicología que se perdonaban a sí mismos por diferir el estudio en su primer examen era menos probable que lo postergaran en su segundo examen, frente a aquellos que se mortificaban por sus malas decisiones. No obstante, esa clase de perdón no es sinónimo de aprobación. Como ha sugerido Kristin Neff con su concepto de autocompasión, el perdón implica enfrentarse al mal comportamiento, comprender que las personas tienden a procrastinar, y buscar con diligencia formas para evitarlo sin condenarse a uno mismo como si se fuera una mala persona. Encontramos que nuestros mejores estudiantes seguían un patrón similar de pensamiento. No juzgaban actuaciones anteriores, sino que se centraban en lo que les hacía falta para mejorar.6

Notas de pie de página

2. La prueba de razonamiento SAT es una prueba normalizada cuya superación se exige para acceder a muchas de las universidades de Estados Unidos. Los que se someten a ella reciben, además de su calificación, el percentil que le corresponde. La media de las puntuaciones SAT de los últimos veinticinco años se sitúa ligeramente por encima de los quinientos puntos. (N. del t.)

3. J. Lehrer: «Don’t! The Secret of Self-Control» New Yorker. 18 de mayo de 2009.

4. Una manera útil de programar es crear un calendario semanal con veinticuatro horas diarias, con siete columnas y veinticuatro filas, de forma que haya un recuadro para cada una de las horas de la semana. Se puede así anotar en cada recuadro las actividades planeadas para cada una de las horas. También se puede comprobar si realmente se ha previsto suficiente tiempo para todas las actividades vitales como comer, dormir o desplazarse.

5. T. Gura: «Procrastinating Again? How to Kick the Habit», Scientific American, diciembre de 2008.

6. M. J. A. Wohl, T. A. Pychyl y S. H. Bennett:  «I Forgive Myself, Now I Can Study: How Self-Forgiveness for Procrastinating Can Reduce Future Procrastination», Personality and Individual Differences 48, n. 7, 2010, pp. 803-808.