Pair programming, una práctica extrema

Una de las técnicas de las metodologías de desarrollo ágiles es la programación en parejas ( Pair Programming ) que es extremadamente simple de describir.

"Dos personas se sientan a trabajar en el mismo equipo. Uno escribe y el otro ayuda y se alternan"

Es muy similar a las carreras de autos donde uno maneja y otro va de navegante con el mapa diciendo y sugiriendo que hacer.

Esta técnica sí que es extrema y ha sido bastante controversial.

Puede que no la hayan prácticado aún, pero seguramente ya les ha tocado sentarse todo el día con alguien a explicarle como funciona el código, el efecto es muy similar. Cuando estás con alguien todo el día haciendo ese pase de conocimientos ( knowledge transfer ) no hay tiempo para nada más. No puedes abrir tu correo para leer tus mensajes personales, o twitter y darle click en los links aunque sean interesantes. Básicamente no puedes hacer nada que no sea trabajar, por que si lo haces la otra persona se aburre o simplemente se desespera ( imaginate que la otra persona eres tú, tu el que está manejando está entrando a facebook y viendo sus mensajes de farmville o algo así, o sea no... en menos de un minuto le dices basta )

La idea es que al tener que comunicarse las ideas de aclaran y también se adquire el conocimiento de la otra persona por el hecho de estar todo el tiempo con ella.

Yo creo que la razón por la cual está técnica es tan efectiva, es porque al no tener tiempo para distraerse, se avanza mucho más que trabajando esas mismas dos personas en códigos diferentes. Simplemente estás trabajando 8 hrs. efectivas ( bueno ponle 6 ) que al día son bastantes y muy agotadoras.

Alguna vez vi en una empresa que estaba implementando PSP una herramienta que medía el tiempo que las personas se pasaban trabajando efectivamente. Había un relojito que parabas y reiniciabas cuando te separabas de tu equipo. Por ejemplo para ir a tomar agua lo parabas, regresabas y lo encendias etc. Estas personas trabajaban aún con esta presión de estar siendo medidos, los que más 4 hrs. efectivas. y muchos solo 3.

Es por eso que el pair programming es tán efectivo. En cualquier momento esta al menos una persona trabajando ( suponiendo que el otro fue al baño o algo ) y cuando están los dos, no hay tiempo de distractores. Pero también me imagino que ha de ser bastante desgastante.

Encontré un video de una empresa que se llama Pivotal Labs. que lleva esta práctica al extremo, bueno mejor dicho al pie de la letra. Todos los programadores trabajan en parejas siempre. Tienen "estaciones de correo" que son máquinas que están del otro lado del pasillo y lugares separados para hablar por teléfono, por si alguno de los integrantes necesita hacer alguna de esas dos cosas. Cuando están trabajando todo el tiempo lo hacen sobre el código.

Me imagino que ha de ser bastante extenuante ¿que opinan? ¿alguien ha trabajado así?

Les dejo el link:

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

en la uni

Creo que pair programming a ese extremo pues nomás en la uni, pero no le decíamos pair programming, era simplemente un proyecto de programación en equipo y el equipo era de 2. Uno programaba, el otro se ponía a pensar en resolver algún otro problema del proyecto, o veía el código del primero y le hacía como ese gato "te faltó un punto y coma", etc.

En la chamba lo he llegado a hacer un par de veces pero es más como una sesión de debugging cuando alguien se atora en algo y nomás no le sale, vamos tomando turnos para sentarnos con esa persona a encontrar el problema y arreglarlo.

Algo que no contempla todo lo que mencionaste (no tengo tiempo de ver el video ahorita), es que los dos que comparten la compu sean cuates o tengan intereses afines y se distraigan platicando de algo. Si me van a poner a programar todo el tiempo con otra persona, lo primero que haría sería preguntarle qué música le gusta. Si tenemos gustos en común, podemos escuchar música. Si nuestros gustos son muy dispares mejor no oimos nada (y no podemos usar audífonos porque tenemos que estar en comunicación). Y si nos gusta música similar, será inevitable la distracción... "te gusta esta banda pero nunca has oído X? a ver entra a youtube y checa este video, mira a este wey cómo toca" y habrá distracciones. Se me hace muy idealista, utópico e incluso ingenuo pensar que por poner a dos personas a trabajar juntas no habrá distracciones.

Creo que eso solamente funcionaría si pones a dos personas que no se soportan mutuamente; así ambas tienen la misión de hacer el trabajo bien y rápido para poder largarse y no estar un segundo más al lado de su compañero que detestan. Y eso sí me ha pasado: estando en un ambiente de trabajo que simplemente no me gusta, mi productividad se iba al máximo, porque hacía todo lo que tenía que hacer para poder despegarme de estos tipos; claro que también era para poder salir temprano porque me estaba yendo a entrevistas de trabajo y en cuanto pude me largué. Supongo que hay alguna lección ahí de que la productividad será la misma pero puede ser muy alta durante un periodo corto de tiempo o más baja pero durante un periodo más largo.

Imagen de beto.bateria

Hace mucho tiempo trabaje en

Hace mucho tiempo trabaje en un proyecto asi, creo que es muy productivo cuando te entiendes con la persona al momento de trabajar(puede ser que no te caiga tan bien),pero eso de trabajar con compañeros que se creen Albert Einstein y solo sus ideas son las adecuadas esta de la fregada, solo vas a pasar el tiempo discutiendo cual es la mejor opcion.

Creo que el principio de esta forma de trabajar es el intercambio de ideas y conocimientos, la verdad creo que es mejor trabajar asi al momento de hacer el diseño y arquitectura de la aplicacion, o cuando hay un algoritmo muy dificil.

Imagen de benek

Aeron doble?

¿Dónde venden esa Aeron doble? jajajaja.

Pues no sé, estoy un poco escéptico ante la ganancia en productividad de dos personas en un mismo pc, si es que la hay (porque veo que depende mucho del escenario) quizá no sea tan extrema como para pensar en virar todo el desarrollo de una compañía a este esquema.

Programacion en pares:

A mi no me gusta trabajar

A mi no me gusta trabajar así. O sea, de entrada siento que si soy el que teclea las cosas el otro te puede decir sin pensar: "ay no manches, ¿porqué hiciste:
 
si esto otro:
 
se ve mejor".

Y así, en fin. Creo que la manera conservadora funciona bien, en donde todos tienen acceso a código, se hacen cambios y mezclas y al final se llega al objetivo.
Bueno, es que además soy de los que piensa que uno en el trabajo debe estar cómodo, si no pasa lo que nos cuenta @ezamudio y por tu práctica con la que ganas un porcentaje (seguro no muy extraordinario) puedes perder a un buen empleado.

Otra cosa a considerar es que pues no siempre puedes tener a las personas de muéganos, pero si puedes ponerlos a trabajar en cosas juntos y en otras pues separarlos, esto también hace a la gente más independiente, con Pair programming uno depende del otro y en el caso de trabajo no es del todo recomendable, ¿qué pasa cuando me cambian de "pareja"?, changos es más difícil hacerle entender todo de vuelta y explicarle porqué ciertas cosas son así.

Para terminar, esto no va para mí. Aunque sería suave recordar los tiempos de la universidad, que a fin de cuentas era lo que hacíamos, sólo que cómo a mí la escuela nunca se me hizo algo de presión, me parecía divertido. Yo analizaba y hacía pseudocódigo y otr@ programaba.

Imagen de Sr. Negativo

Programación en parejas

Es válida si tu compañero tiene la disposición y no poner excusas a la hora de trabajar.

Es bueno si se sabe escoger un buen compañero. Yo he trabajado asi, y es buena técnica. Mientras uno revisa el código otro investiga como resolver algunos problemas que van apareciendo.

Cuando te estresas en una parte del código siempre es bueno tener ayuda.

Imagen de bferro

Conviene leer lo que se comenta sobre Pair Programming

En hay mucha información sobre este método para construir software. Hay inclusive reportes que muestran las ventajas de la programación por pares. Hay opiniones de muchas gente conocida del mundo de la programación extrema y las técnicas ágiles.
La información es muy amplia y responde a muchas de las dudas que aquí se están discutiendo. Vale mucho la pena leer eso.

Pair Debugging(?)

Yo tampoco he trabajo de esa manera, pero creo que deberían inventar el "Pair Debugging" , precisamente ayer por la tarde al terminar de codificar unas pruebas había cosas que no salían y no encontraba como corregirlas, me senté con un compañero a "debuggear" el código en su máquina y en relativamente poco tiempo encontramos los problemas y los resolvimos antes de la hora de salida. A veces solo con dejar de estar frente al teclado y ver lo que hiciste te da otra perspectiva.

Imagen de 043h68

Nueva técnica

Si quieren incrementar la productividad al máximo hagan lo que hizo el jefe de @ezamudio y pongan a todos los que se caen mal en el mismo proyecto.

Jajaja!

Imagen de Sr. Negativo

Todos se caen mal?... jaja

Es en serio?? ... (risas)

Yo creo que lejos de aumentar la "productividad" van a provocar todo lo contrario.

Un buen jefe debe promover la armonía en cualquier centro de trabajo. Es bastante extraño

Es que a ezamudio todos le

Es que a ezamudio todos le caen mal :P jajaj

No, ya en serio, si debe de haber camaradería entre los que programan en pareja, porque si bien es cierto que puedes trabajar un rato así ( 2 o 3 días ) sería muy difícil e incomodo hacer todo un proyecto con alguien que te cae mal ( o por que ejemplo que le huela mal la boca ) o así por el estilo.

Yo he conocido a un par de personas que trabajan así TODO el tiempo y dicen que esta super bien, pero puede que hayan desarrollado el sindrome de estocolmo o que dicen que está bien porque ... pues es lo que a ellos les gusta.