El problema es que cuando uno manda un mail diciendo "busco grupo", si uno pone "comprometido y proactivo" todos los parias como yo que se han quedado boyando mágicamente serán "comprometidos y proactivos".
El primer paso es ser selectivo en el lugar de convocatoria. Es mejor en el trabajo que en una lista de la facultad. Si todo sale mal, no es lo mismo cruzarse ocasionalmente en un pasillo a todos los días en el comedor. Esto fuerza un poco a todas las partes a que la cosa salga un poco mejor.
La facultad/materia/cátedra/período era FIUBA/Organización de Datos/Saubidet/2011/1, conocida por su dificultad.
Aquí pego el contrato tal como fue enviado. En caso de querer utilizar, es open source, pero mejor leer la discusión posterior para hacer los ajustes y controles necesarios.
Estimados/as:
Busco entre 0 y 2 personas para formar un grupo con las siguientes características:
A) Indispensables:
A.1) Comenzamos a trabajar en el tp ANTES de tener el enunciado, preparando el entorno de desarrollo, el repositorio, las convenciones a utilizar, identificando conocimientos y limitaciones de cada integrante.
A.2) Que dedique al menos dos horas diarias al tp, aparte del resto de la materia.
A.3) Que esta sea su única o principal materia y esté dispuesta a sacrificar muy pero muy temprano las otras en su beneficio.
A.4) NO corremos a último momento, NO nos quedamos sin dormir para entregar. El tp debe estar listo una semana antes del plazo establecido.
A.5) Versionamiento con svn.
A.6) Integración continua.
A.7) C++ linux.
B) Negociables:
B.1) Uso intensivo de valgrind.
B.2) Entorno de programación con un Makefile, no ide (a menos que respete ese Makefile).
B.3) Que haya cursado taller con Veiga hasta el final (aunque no haya aprobado).
B.4) Que trabaje, asi estamos en igualdad de sufrimiento.
B.5) Entre 0 y 3 personas.
C) ¿Qué ofrezco?
C.1) Respetar todos los puntos.
C.2) Ser responsable de integración aparte de mi parte.
C.3) El Makefile y su mantenimiento.
C.4) Garantizo entorno de desarrollo unificado brindando guía a cada integrante
D) Además estoy dispuesto a utilizar, en el marco de A.1:
D.1) Servidor de integración continua con Continuum o similar
D.2) Documentación javadoc con doxygen.
D.2) Unit testing con cppunit.
Justificaciones:
A.1 a A.4: Es una materia muy difícil, la cátedra no explica muchos temas indispensables, no dedica horas de clase a explicaciones del tp y hay temas que se dan a último momento.
A.5, A.6, C.2 y D.1: Para no tener sorpresas de último momento.
A.7: Desde C++ se puede hacer exactamente lo mismo que desde C y ya tengo varias clases preparadas.
B.1, D.2 y D.3: Hace a la calidad.
B.2 y C.3: Hago el trabajo desde múltiples máquinas, algunas de ellas incapaces de correr IDEs complejas como eclipse.
B.3 y B.4: Para que estemos más parejos
Busco entre 0 y 2 personas para formar un grupo con las siguientes características:
A) Indispensables:
A.1) Comenzamos a trabajar en el tp ANTES de tener el enunciado, preparando el entorno de desarrollo, el repositorio, las convenciones a utilizar, identificando conocimientos y limitaciones de cada integrante.
A.2) Que dedique al menos dos horas diarias al tp, aparte del resto de la materia.
A.3) Que esta sea su única o principal materia y esté dispuesta a sacrificar muy pero muy temprano las otras en su beneficio.
A.4) NO corremos a último momento, NO nos quedamos sin dormir para entregar. El tp debe estar listo una semana antes del plazo establecido.
A.5) Versionamiento con svn.
A.6) Integración continua.
A.7) C++ linux.
B) Negociables:
B.1) Uso intensivo de valgrind.
B.2) Entorno de programación con un Makefile, no ide (a menos que respete ese Makefile).
B.3) Que haya cursado taller con Veiga hasta el final (aunque no haya aprobado).
B.4) Que trabaje, asi estamos en igualdad de sufrimiento.
B.5) Entre 0 y 3 personas.
C) ¿Qué ofrezco?
C.1) Respetar todos los puntos.
C.2) Ser responsable de integración aparte de mi parte.
C.3) El Makefile y su mantenimiento.
C.4) Garantizo entorno de desarrollo unificado brindando guía a cada integrante
D) Además estoy dispuesto a utilizar, en el marco de A.1:
D.1) Servidor de integración continua con Continuum o similar
D.2) Documentación javadoc con doxygen.
D.2) Unit testing con cppunit.
Justificaciones:
A.1 a A.4: Es una materia muy difícil, la cátedra no explica muchos temas indispensables, no dedica horas de clase a explicaciones del tp y hay temas que se dan a último momento.
A.5, A.6, C.2 y D.1: Para no tener sorpresas de último momento.
A.7: Desde C++ se puede hacer exactamente lo mismo que desde C y ya tengo varias clases preparadas.
B.1, D.2 y D.3: Hace a la calidad.
B.2 y C.3: Hago el trabajo desde múltiples máquinas, algunas de ellas incapaces de correr IDEs complejas como eclipse.
B.3 y B.4: Para que estemos más parejos
¿Cómo hago ahora para que esto no sea tan offtopic? Fácil, cuento como me fué.
El enunciado lo recibimos casi inmediatamente, asi que no hubo necesidad de "ganar tiempo". (Tomar nota de esto). Como se predica con el ejemplo, comenzé a programar no bien resolvimos un mínimo diseño, usando TDD con cppunit.
Mis compañeros, con sus nombres de fantasía, no sé, Pablo y Luís, seis semanas más tarde se incorporaron. Asi que un dia me encontre con todo mi código con su impecable cppunit y una carpeta al lado, que era una copia reducida de lo mío, con recias modificaciones y sin rastros de la carpeta de tests.
Esto se transformó en una breve y brutal escaramuza:
Pablo: ¿Cómo me decís que no aceptás mi código si funciona y ni lo miraste?
Charly: Si lo miré, pero no entendí los cambios, no soy tan brillante, apenas entiendo lo que yo hice.
Pablo: Es una falta de respeto de tu parte.
Charly: No están respetando el contrato. Si metés todos esos cambios y tirás los test yo no tengo por que mirar nada.
Pablo: Sí, estoy respetando el contrato, vos dijiste que proveías los tests.
¡ALTO AHI!
Acá es donde nos falló el contrato. El muchacho interpretó que yo, Charly, iba a hacer el unit testing. Releyéndolo ahora veo que podría ser así interpretado, si no fuera por que TODOS sabemos que el unit testing es del programador. ¿O no? Puede ser que otra persona ponga algunos tests, pero a medida que se avanza en el problema, aparecen nuevos que sólo el programador puede destilar.
No hace falta agregar que el muchacho no usó o modificó los tests ya que él consideraba que el test va al final.
Supongo que en realidad este problema se hubiera mitigado si hubiésemos cumplido con A.1, donde habría saltado el problema.
A.1) Comenzamos a trabajar en el tp ANTES de tener el enunciado (OK), preparando el entorno de desarrollo (OK), el repositorio (OK), las convenciones a utilizar (OK), identificando conocimientos (FAIL) y limitaciones de cada integrante (FAIL).
Para esto habia que tomar nota. Quizas, si hubiera habido más tiempo antes de recibir el enunciado, podríamos haber detectado y solucionado mejor esto.
El resultado de la experiencia fue que aprobamos sin llorar ni robar, incluso gracias a Luis nos ganamos un punto extra para el examen de promoción (o similar) gracias a que en factor de compresión arrasó.
Mi conclusión: quise llevar al estudio lo que considero buenas prácticas profesionales, fracasando miserablemente. El principal riesgo para la aprobación del trabajo práctico fue eso, no el trabajo en sí.
Resultados:
- No puedo contar el haber aprobado como resultado de esta acción. Lo voy a formular asi: "Haber aprobado PESE a esta acción".
- El tp de la siguiente materia, Sistemas Operativos, lo hicimos juntos. Mi parte la hice con TDD, sin entrar en conflicto.
- Luis, unos meses despues me dijo: "Charly, tengo que aprender TDD"