Las ventajas de la programación por parejas





Hola a todos, soy Dima Vdovin de nuevo. En mi artículo anterior sobre la integración de Juns en un equipo, mencioné brevemente la programación en pares como una práctica eficaz de enseñanza y aprendizaje. Ahora me gustaría hablar con más detalle sobre la práctica de la programación por parejas en equipos. Probé varias variaciones de ellos en diferentes proyectos, y hoy me gustaría compartir lo que veo en esto como las ventajas de este enfoque.



Programación en pareja



Me parece que para explicar simplemente cómo funciona la programación por pares, puedes usar el ejemplo de las carreras de rally. Hay un conductor (conductor) y un navegador (navegador). El conductor se centra directamente en la conducción. El navegador controla hacia dónde vamos ahora y le dice al piloto sobre los próximos giros y saltos.



Lo mismo ocurre con la programación por pares.



El controlador se centra en escribir código, aquí y ahora. En este momento, el navegador tiene la imagen completa frente a él, verifica que el conductor no cometa errores y le dice dónde y cómo avanzar.



La única diferencia importante con las carreras de rally es que en la programación por parejas, el piloto y el copiloto deben cambiar de lugar periódicamente. La distribución de funciones coincide casi por completo.



Es la inclusión total de ambos participantes en la programación por parejas en el proceso lo que distingue este método de otros métodos de aprendizaje y control. Por un lado, no permitimos que el controlador escriba el código de forma completamente independiente y no entregamos el "producto" terminado para que lo revise el navegador condicional. Al mismo tiempo, el controlador se centra no solo en líneas específicas de código, sino que debe ver el área que crea en una perspectiva amplia. Lo mismo se aplica a nuestro navegador.



Además de este esquema de programación de pares clásico, se han creado varios enfoques más efectivos a lo largo de los años de existencia de la industria. Por ejemplo, el enfoque del navegador de ping pong o del asiento trasero es popular. Algunas personas generalmente practican la mezcla de diferentes técnicas. Esto es normal. La efectividad de este o aquel método depende de los objetivos y la composición de los participantes: quién participa en la pareja, qué quieren lograr, qué experiencia tienen ambos codificadores. Por cierto, la programación en pareja es bastante aplicable no solo en una pareja de mentor-junior, de la que hablé en el artículo anterior, sino también en una pareja de dos codificadores experimentados de aproximadamente el mismo nivel.



A continuación, analicemos las opciones de configuración del controlador + navegador de forma un poco más amplia, según los objetivos de la programación de pares.



Entrenamiento para principiantes







La programación en pareja es excelente para enseñar a los principiantes y se usa con mayor frecuencia solo para eso. Sin embargo, al aplicar este método de entrenamiento de su junio, debe comprender que está sacrificando la velocidad de desarrollo de la función inmediata si el desarrollo se lleva a cabo en una pieza de código real. Al mismo tiempo, el equipo gana seriamente a largo plazo: la programación en pareja con un colega experimentado aumenta seriamente la velocidad de incorporación y aprendizaje de Jun.



Pero en el contexto del caso de la “formación para principiantes”, junio no siempre aparece. Por ejemplo, la programación de pares se puede utilizar para incorporar un intermediario condicional recién contratado que necesita incorporarse rápidamente a un proyecto. En este caso, la velocidad no baja tanto y el mentor puede ser un colega comparable a un recién llegado al proyecto en términos de nivel de habilidad. Aquí ya estamos hablando de la transferencia de experiencia y conocimiento no en programación, sino de conocimiento sobre un proyecto específico.



Por otro lado, codificar en un par de dos medios es un poco más arriesgado que un par de junio + medio o junio + Signor. El líder en un par de dos intermedios debe abordar el proceso con gran responsabilidad, pero si se cumplen todas las condiciones, los beneficios para todo el equipo son bastante tangibles.



Intercambio de conocimientos y liquidación de la "Torre"







Un problema común para muchos equipos es la disponibilidad de especialistas insustituibles. Esto se aplica con mayor frecuencia a empresas emergentes o pequeños grupos aislados de desarrolladores que, en silencio, vieron algunas características o un proyecto separado. Un especialista insustituible es aquel que comprende a fondo e individualmente una sección específica del código / proyecto, o solo él tiene una comprensión completa de cómo funciona todo. El conjunto de conocimientos sobre el proyecto de dicho especialista también se denomina "Torre del conocimiento".



Un especialista insustituible o "Torre" es un cuello de botella peligroso que debe evitarse por cualquier medio. Porque una baja por enfermedad banal durante la integración de nuevas funciones en la parte de combate del proyecto (o durante el movimiento, o en otra etapa seria) - y el trabajo del equipo se paraliza. Sin mencionar el despido de tales desarrolladores.



Para eliminar tal cuello de botella, los especialistas indispensables deben compartir sus conocimientos con otros desarrolladores.



Como ya está claro, la programación en pareja es nuevamente excelente para compartir conocimientos. Solo en este caso, no recibimos formación avanzada y onboarding para un principiante, sino la transferencia de conocimientos sobre aspectos del proyecto dentro del propio equipo. Si hace una función en un par, entonces al menos dos personas ya lo sabrán, además, en el proceso de escritura, los antecedentes de uno de los miembros del par se ajustarán.



La liquidación de la "Torre del Conocimiento" tiene otra ventaja que no es obvia para muchos. Además de descentralizar el conocimiento sobre las características y áreas específicas del proyecto, también reducimos la carga sobre el desarrollador, alrededor del cual se construyó originalmente esta “Torre”. De hecho, la mayoría de las veces, si el equipo tiene un especialista insustituible, a menudo tiene que trabajar en un modo de desgaste, con horas extraordinarias, los siete días de la semana durante los lanzamientos y, en general, estar disponible las 24 horas del día, los 7 días de la semana. Toda esta presión constante, tarde o temprano, conduce al agotamiento profesional o, en el mejor de los casos, al deseo de encontrar un trabajo más tranquilo.



Usar la programación por pares de forma proactiva también es una excelente manera de evitar la creación de Torres del Conocimiento de la nada. La circulación constante de conocimiento sobre características y diferentes partes del proyecto dentro del equipo es un proceso normal, que, lamentablemente, comienza a organizarse solo en el momento del despido de un empleado clave. Es cierto que la programación en pareja no es la única forma de lidiar con "Towers" y aumentar el nivel de comprensión del proyecto dentro del equipo, pero esta es una historia completamente diferente.



Resolver problemas complejos







La programación por parejas se puede utilizar como una herramienta de lluvia de ideas local, es decir, aplicando literalmente el adagio "una cabeza es buena, dos es mejor". La programación por pares es ideal para los casos en los que necesita implementar una función o lógica compleja de acuerdo con los requisitos comerciales del proyecto. Aquí ya no estamos hablando de la transferencia de conocimiento del líder al seguidor, sino de crear un sistema de dos desarrolladores, iguales en experiencia y comprensión del proyecto, que unen sus esfuerzos.



Algunos desarrolladores pueden argumentar que se sienten más cómodos trabajando solo en áreas complejas, pero la práctica muestra que es más probable que dos codificadores fuertes en un par produzcan código de alta calidad que trabajando por separado.



Los puntos fuertes de la programación por pares en estas situaciones están fuera del proceso de codificación. Más bien, la ganancia se logra mediante la capacidad de discutir activamente en pie de igualdad las posibles formas de resolver el problema; el proceso de escribir código en tal caso es secundario y no es un problema. Pero cómo y qué debe escribirse exactamente es el problema. La posibilidad de comunicación directa, discusión y disputa fundamentada entre dos especialistas tiene un efecto positivo en la calidad de las decisiones tomadas. También se reduce el tiempo necesario para encontrar una solución exitosa a nuestro problema.



Tareas mixtas







El último caso es un equipo de todos los casos descritos anteriormente. Aquí tenemos dos desarrolladores experimentados con diferentes áreas de especialización que están uniendo fuerzas para trabajar en una tarea. Quizás uno de ellos escribe bien el código y el otro está completamente familiarizado con los requisitos del proyecto. Además, no es necesario que se trate de dos programadores. Estos pueden ser pares de codificador e ingeniero de control de calidad o codificador y analista.



Aquí obtenemos una situación puramente beneficiosa para todos: en el caso de problemas mixtos, cada miembro de la pareja complementa al otro. De esta forma exprimimos al máximo el potencial de ambos especialistas, eliminamos sus debilidades y utilizamos solo sus fortalezas.



A su vez, la solución de problemas mixtos cubre todos los casos descritos anteriormente: onboarding, si hablamos de conocimiento insuficiente de los requisitos del proyecto, y liquidación de la "Torre", y resolución de un caso complejo.



Total



Es importante comprender que la programación por pares no es una fórmula mágica y la respuesta a cualquier problema y desafío de desarrollo. En casi todos los casos, este método conduce a una disminución en la velocidad de desarrollo, por lo que vale la pena utilizar este enfoque con precaución.



Además, no debemos olvidarnos del factor humano: si estamos hablando de enseñar a Jun, entonces el mentor en pareja debe poder interactuar con el principiante al nivel adecuado para que el proceso de aprendizaje no se convierta en golpes y burlas. Si estamos tratando de liquidar la "Torre", entonces la composición del par debe coincidir en consecuencia para que la transferencia de conocimiento tenga lugar en la dirección correcta. Lo mismo se aplica a problemas complejos y mixtos: no puede poner dos desarrolladores aleatorios en una computadora y esperar, ellos le darán una solución lista para usar en N horas.



Pero incluso con las dificultades expresadas, la programación en parejas es una gran práctica que no solo resuelve el problema de incorporar y enseñar a los recién llegados, sino que también le permite cerrar las brechas de conocimiento de otros miembros del equipo sobre el proyecto o resolver de manera efectiva un problema complejo.



All Articles