Mejores prácticas para trabajar con múltiples programadores.

9

Creo que la mayoría de los programadores prefieren trabajar solos en proyectos, incluso cuando no es factible. Prefiero trabajar solo, incluso fuera de los proyectos de programación. Cuando trabajo con otros desarrolladores, normalmente encuentro que

  • No me gusta su formato o convenciones (como nombres de variables o métodos)
  • No entiendo bien cómo funciona el código que escribieron, lo que tendría si lo escribiera yo mismo
  • Creo que hay una manera mejor o más eficiente de implementar algo que escribieron

¿Cuáles son las mejores maneras de superar estos problemas y otros problemas similares de equipo para un proyecto con 4-5 programadores?


fuente
Muy buena pregunta He estado pensando lo mismo; especialmente cuando tienes a alguien por encima de ti que, por falta de muchos otros términos, es incompetente.
"mejor o más eficiente", tal vez, pero ¿por qué no se enteró antes de que empezaran a hacer una implementación peor y menos eficiente?
-1: Esta pregunta es muy amplia.
Jim G.
También tenga en cuenta que es SU responsabilidad hacer un esfuerzo por comprender el código de otras personas.

Respuestas:

20

Solo hay una forma de superar esos problemas. Es a saber "Comunicación". Los problemas que describe se deben a que sus programadores no se hablan entre sí. Si hubiera discutido cuál sería la mejor o más eficiente forma de resolver una tarea, se implementaría de la manera que desee. Además, podría ponerse de acuerdo sobre el formato y las convenciones.

Para comprender la parte de su código, debe tener revisiones de código semanales donde debata el código de todos. Luego puede hacer preguntas mientras presentan su trabajo y esto también ayuda enormemente a aumentar la calidad del código de todos.

mhenrixon
fuente
2
+1 para comunicación. Tantas preguntas aquí podrían responderse con un simple "Bueno, háblales al respecto"
Ian
Me parece que OP no solo tiene un problema de comunicación, sino que parece incapaz de aceptar que hay otras formas de hacer las cosas que prefiere, y se niega a trabajar en cualquier otro sistema que no sea el que prefiere.
Jwent
La programación +1 (o cualquier trabajo mental) es aproximadamente 5% de producción real, 35% de resolución de problemas lógicos y 60% de resolución de problemas sociales.
JF Dion
9

Amo trabajar con un equipo. La dificultad es que para trabajar eficazmente con un equipo, todos los miembros del equipo tienen que trabajar juntos, no todos trabajan por separado en el mismo proyecto.

Debe discutir cosas como por qué prefiere una convención de codificación sobre otra, y luego todos están de acuerdo en un conjunto de convenciones, ya sean sus favoritos personales o no. Sean lo que sean, te acostumbrarás a ellos y apreciarás la consistencia.

Deberían revisar y criticar el código del otro. En realidad, probablemente deberías programar en pares la mayor parte del tiempo, pero dudo que me creas en eso, así que solo revisa el código de los demás. Ningún código debe considerarse "hecho" hasta que otro programador lo haya revisado y se haya asegurado de que sea comprensible para la próxima persona que necesite mantenerlo.

Busque excusas, hablen entre ellos y hagan preguntas mientras codifican. Si te encuentras tratando de elegir entre 2 o más formas de atacar un problema, incluso si crees que sabes la mejor respuesta probable, obtén un control de cordura de uno de los otros desarrolladores. Ambos aprenderán algo de la conversación y obtendrán un concepto más compartido de cómo se está creando el código.

Tenga una breve reunión todos los días, para que todos puedan decir lo que han estado haciendo y cómo va eso. De esa manera, todos tendrán una mejor idea del estado de todos los fragmentos de trabajo que se están llevando a cabo y cómo se está abordando.

Steve Jorgensen
fuente
7

No es el propietario del código: como grupo puede elegir convenciones de codificación o no. No siempre te saldrás con la tuya, solo aprende a adaptarte.

Nunca te sentirás tan cómodo con el código de otras personas. En XP, esta es la razón por la programación de par push. Pero normalmente la mejor manera (como con todo lo demás) es profundizar y aprenderlo.

Si tiene un código más eficiente o mejor (legible es MUCHO más importante que eficiente, vea el punto anterior), entonces debe discutirlo con ellos.

Esta es una carrera y no eres dueño de lo que haces. Tendrás que trabajar con muchas personas, acostumbrarte o ser tan bueno que puedas hacerlo todo tú mismo y financiar tus propios proyectos.

Es una carrera, no es divertido: si su trabajo consistía en arreglar techos a mediados del verano y le dicen que lo haga de una manera que no le gusta porque es más fácil hacerlo de esa manera como equipo, simplemente lo hace eso. Período.

Bill K
fuente
Estoy de acuerdo con todo, excepto "Legible es MUCHO más importante que eficiente", esto NO es cierto para el código SQL de la base de datos, eficiente en una base de datos es fundamental. Si está acostumbrado a escribir código eficiente, se vuelve más legible muy rápidamente.
HLGEM
@HLGEM El código de DB ineficiente es terrible, pero ¿tiene que ser ilegible para que sea eficiente, o puede hacerlo legible y eficiente? No dije que ignorara la eficiencia en todos los casos, y tampoco dije que fuera un programador estúpido (como usar una matriz para un tipo de inserción).
Bill K
No diría que es ilegible, pero la mayoría de las formas más eficientes de escribir consultas a menudo parecen más complejas para las personas que no son especialistas en bases de datos, por lo que tienden a escribir código que se ve más "elegante" y tener problemas con el rendimiento.
HLGEM
@HLGEM No me gusta el término "Elegante" porque generalmente significa conciso que no está relacionado en absoluto con legible. Supongo que es mejor decir que sería "La solución más legible que se ajusta a los requisitos del problema", donde el rendimiento puede incluirse en los requisitos. Mi punto fue que si el rendimiento no está en los requisitos (si cumple con los requisitos), la legibilidad debe tener prioridad sobre cualquier otra cosa, pero, por supuesto, debe cumplir con los requisitos.
Bill K
Divertido, no me gusta el término elegante también. Creo que con demasiada frecuencia estamos sacrificando la eficiencia y la eficacia del usuario para satisfacer la visión de alguien de lo bonito que debería ser el código. La elegancia no debe triunfar sobre la eficiencia y la efectividad. El desarrollador mira ese código tal vez varias horas al año, el usuario ejecuta ese código todos los días muchas veces al día. No deberíamos escribir solo por los valores estéticos del desarrollador. Me gusta mucho tu definición. Con tu explicación adicional, estoy totalmente de acuerdo contigo.
HLGEM
5

Pregúnteles "por qué" , pero cortésmente. Los programadores generalmente están más que felices de exponer su razonamiento, y a menos que la respuesta sea "Es la forma en que siempre lo he hecho", es probable que aprenda algo útil. Por ejemplo, la diferencia entre la notación húngara "buena" y "mala", las virtudes de las diferentes convenciones de nomenclatura y por qué el algoritmo elegido es lo suficientemente bueno para la tarea en cuestión.

l0b0
fuente
3

Solo tengo algunos pensamientos. La mayoría de las otras respuestas parecen haber cubierto bastante bien el aspecto de la comunicación de este problema, pero me gustaría abordar cada punto de viñeta que hiciste con un pensamiento o 2 propios:

No me gusta su formato o convenciones (como nombres de variables o métodos)

Esta es una presunción que realmente no puede permitirse. Probablemente hay 20 personas a las que no les gusta su formato o sus convenciones. Si no fue parte del proceso para decidir estas cosas, debe superarlo y aprender a adaptarse. Si usted es parte del proceso (o puede serlo en el futuro), comunique sus inquietudes a los otros desarrolladores. Sin embargo, no te quejes. Tenga soluciones / alternativas ya trazadas y listas para funcionar.

No entiendo bien cómo funciona el código que escribieron, lo que tendría si lo escribiera yo mismo

No, no lo harías. Si está haciendo este reclamo, entonces no ha trabajado mucho en un entorno cambiante de alto ritmo. Tengo un código que escribí hace 6 meses que no puedo entender con solo mirarlo. Si no fuera por el hecho de que fue escrito con un par de mis peculiaridades personales, ni siquiera sabría que era mío. Puede requerir más esfuerzo rediseñar el trabajo de otra persona, pero no se equivoque, lo rediseñará para comprenderlo más adelante sin importar quién lo haya escrito.

Creo que hay una manera mejor o más eficiente de implementar algo que escribieron

Increíble. Todo equipo ama las mejoras y la eficiencia. Comunícalo a tus compañeros desarrolladores. Si hay un desarrollador sénior o arquitecto designado por encima de usted, avísele. Comparta sus ideas con el equipo de manera abierta y libre. Sin embargo, prepárate para aceptar las ideas de los demás. Encuentro que mucha gente dice lo mismo que tú estás diciendo aquí, pero su verdadero significado es "Mi camino es mejor y todos pueden chuparlo. Hazlo a mi manera o todos son cabezas de pudín". No seas ese chico. Esté tan dispuesto a cambiar como espera que otras personas lo estén.

Joel Etherton
fuente
1

He pensado en estas preguntas por un tiempo ahora. Soy líder de equipo y estoy trabajando con otros 2 programadores. Uno de los programadores tiene un estilo muy similar al mío, no el mismo, pero lo suficientemente cercano. No creo que justifique ningún cambio de su parte. ¿Cuál es el punto de comenzar algo por el bien de diferentes convenciones de tabulación o nombres de variables?

El otro desarrollador es un programador de CA (somos programadores de vb.net que trabajamos en un proyecto .net). Escribe el código vb como si fuera código c (supongo que si los roles se invirtieran, escribiríamos el código c como si fuera vb). Tuve algunos problemas con esto. Pero después de pensarlo por un tiempo. Los problemas que tuve fueron realmente una sensación incómoda que me dio un código de aspecto extraño. Realmente no había nada malo con su código. Su código es limpio y funciona muy bien. Además, el código se abstraerá detrás de la interfaz de clase que expone al resto del programa. Entonces, al final, el estilo de codificación realmente no nos importa. Mientras el programa sea correcto y los comentarios sean razonables. Todos somos lo suficientemente inteligentes (al menos eso espero), para que la depuración no sea tan difícil.

Ahora sería una historia diferente si él estuviera codificando en c # y nosotros estuviéramos codificando en vb.net. Aún podríamos lograrlo, pero sería más difícil.

Personalmente, creo que es mucho más importante que los miembros individuales del equipo usen una convención de codificación con la que estén felices y cómodos. Esto significará que están codificando productivamente en lugar de referirse a alguna guía de estilo que les indica cuántas pestañas necesitan para sangrar una función.

Eso no significa que sean libres de hacer lo que quieran con los casos o requisitos de uso de la aplicación: los clientes los establecen.

bluebill
fuente
1

¡Oh por favor! Los estándares de codificación son como argumentos de aborto: todos tienen uno (excepto yo, no tengo una opinión real sobre el aborto que no sea si no quieres uno, no lo tienes), todos piensan que el suyo es el correcto, y todos piensan los demás apestan.

Utilizo diferentes métodos porque he descubierto que son más fáciles de leer. Por ejemplo, un bloque de prueba en PHP escribiré así:

if (condición) {
  declaraciones;
} [opcional else o elseif]

Pero si escribo un bloque en Pascal, haré esto:

si (condición)
  comienza

  final;

Depende del idioma, para mí es más fácil leer de esta manera para ambos. Pero si alguien quiere poner {en la línea después del if en PHP, realmente no tengo ningún problema.

Paul Robinson
fuente
1
Desea que todos los miembros de su equipo utilicen el mismo estándar para evitar contaminar los diferenciales de control de versiones con saltos entre líneas.
0

Si bien puedo entender la frustración asociada con tener un código "extranjero", hay dos oportunidades para que madures con este "obstáculo"

  1. Cada desarrollador tiene que aprender a pasar por la "guerra de las llaves", y con eso me refiero a encontrar una manera de obtener un estándar de codificación común. Aprender a articular claramente por qué prefiere ciertas técnicas, pero lo más importante es aprender a escuchar por qué otra persona tiene una opinión diferente. Luego, aprenda a colocar algunos de los suyos por el bien del equipo / proyecto.

  2. Sin embargo, lo que será de mayor valor para usted a largo plazo será aprender a leer el código de otras personas. Para este solo tienes que empujarlo y no evitarlo. Incluso podría descubrir que aprende mucho.

Stephen Bailey
fuente
0

Creo que cuanto más grande se hace un equipo, más importantes se vuelven las pruebas unitarias.

  • Asegúrese de que el código que escriba usted mismo esté cubierto por las pruebas unitarias.
  • Intenta convencer a los otros miembros del equipo para que escriban exámenes.

Vivir con el código (el suyo y el de otros) es más fácil cuando tiene pruebas que cubren el código. Esto es cierto incluso para el código que no te gusta.

codeape
fuente
0

La mejor respuesta es encontrar un equipo cuyo proceso de pensamiento coincida con el suyo, para que no tenga que comprometerse.

Una respuesta realista es tratarlo lo mejor que pueda. Si solo se trata de un estilo de código diferente (por ejemplo, los mismos corchetes frente a la siguiente línea) no es un gran problema, aunque entiendo cómo es frustrante si las personas no siguen las pautas para el lenguaje que están usando. Si se trata de algo así como estándares de codificación completamente sin sentido que tienen sentido cero (por ejemplo, notación húngara donde no es necesario, SoMeWeIrDnAmInGsTyLe, todas las variables no deben tener más de 8 caracteres, etc.), entonces intente cambiarlo, porque es obvio que la persona que escribe el código no tiene ni idea o simplemente está cargando cosas con lo que había antes en lugar de ser lo suficientemente inteligente como para querer mejorarlo.

Wayne Molina
fuente
-1

En primer lugar, adaptar mi estilo de codificación re: espacio en blanco. Hace mucho tiempo, un payaso escribió un artículo de broma sobre las mejores prácticas dando ejemplos de código con como 12 pestañas completas de espacios en blanco en todas partes que pudo; haciendo que el código sea imposible de leer sin una pantalla de 12 pies de ancho o con un tamaño de fuente .0001. Muchos programadores asumieron que era creíble y comenzaron a hacerlo, aunque obviamente no era una buena práctica. Me vuelve loco. Vamos chicos, digo, ustedes son más listos que eso. El 50% o más de espacio en blanco en la página de 240 columnas no tiene ningún sentido. Coloque la primera llave en la misma línea que la función o firma de clase (con un espacio o dos, no una pestaña o dos en el medio). Use 3 espacios para sangrar para los niveles de código (5 si tiene un miembro del equipo parcialmente ciego). Luego use una línea en blanco aquí y allá en el código para colocar las cosas en bloques lógicos más pequeños.

Aquí hay otro ejemplo de algo con cabeza de hueso. Primero te diré que esto no proviene de un medio ingenuo sin experiencia. Está en un código muy bueno de un tipo que pudo lograr que una técnica muy avanzada funcionara mientras que la mayoría del resto del mundo todavía se rasca la cabeza al respecto. Esto es lo que me frustra. ¿Por qué los buenos programadores son tan descarados acerca de formatear su código?

    for (Iterator<Byte> iterator = collection.iterator(); iterator
            .hasNext();) {
        byteArray[i++] = iterator.next();
    }

Ahora solo mira el formato de la condición for. Si realmente lo piensas, ¿no es ese un lugar completamente ilógico para poner un salto de línea? Por un lado, tenía mucho espacio para ver todo para ... {en una línea. (Afortunadamente, este tipo no usa múltiples pestañas para sangrar). Pero si no podía vivir sin dividirlo, ¿por qué hay en medio de una especificación de función? Hay un delimitador perfectamente bueno justo antes de eso, el punto y coma, que habría tenido más sentido como punto de quiebre. Mi voto es poner toda la condición y la apertura {(que va con el for) en la misma línea. También termina bien: es fácil hacer coincidir la llave de cierre con el "for" que se abrió. (A algunas personas, y herramientas (¿eso es redundante?), También les gusta poner eso en lugares extraños).

Segundo: tome nota del enfoque de la experiencia de cada programador y, si hay una diferencia significativa, asegúrese de que se refleje en qué parte del código trabaja cada programador. Un experto en control industrial en robótica, un ingeniero que trabaja principalmente en los complejos bits matemáticos y el tipo con el título de CS que se impresiona con la construcción de códigos totalmente oscuros (cuanto menos comprensible, más sofisticado parece, ¿verdad?) va a escribir el código de manera diferente. Donde existan estas diferencias significativas, divida el trabajo para que cada fortaleza individual coincida con el trabajo.

Cuando no haya tales diferencias, acuerde el estilo de codificación y, en cualquier caso, revisión de código, revisión de código, revisión de código. Francamente, he pasado por un montón de código de spaghetti descuidado en mi vida (12 veces más adelante en la depuración y los cambios realizados por el grupo de mantenimiento, o el resultado de la integración con ojos de gallo) y estaba en camino de ser un experto en el código después de 2 minutos de hablar con el último tipo que trabajó en él. (Nota al margen: de hecho, hay un punto en el que es mejor reescribir el código que continuar adaptándose).

Personalmente, también prefiero trabajar en casa solo. Nunca he conocido a un programador que prefiera o trabaje mejor en un cúbico rodeado de muchos otros programadores, debates e interrupciones. Pero hay que acostumbrarse a trabajar en equipo, y eso significa tomarse el tiempo para reunirse y discutir (no pelear) lo que está haciendo. Eso es en realidad parte del trabajo, realmente lo es. Mucho mejor aceptarlo y hacerlo de manera sistemática, eficiente y efectiva. Y mientras lo hacemos, también es parte del trabajo pasar tiempo transfiriendo conocimientos e información a las personas que escriben la documentación (algunas de las cuales puede que tenga que escribir usted mismo). Y cuando tenga la experiencia suficiente para aumentar su nivel de responsabilidad, incluso puede encontrarse chateando con más frecuencia con gerentes y personas en marketing, etc.

Codificar solo es un pasatiempo. La ingeniería profesional de software es una ocupación multifacética.

Roger F. Gay
fuente
Y otra cosa; cuando solo tiene una serie de llaves de cierre, no tiene sentido poner líneas en blanco entre ellas.
Roger F. Gay
1
"una serie de llaves de cierre" -> candidato para factorizar el método con nombre.
¿Por qué? Es muy fácil terminar con 3; como cuando el último bit de un método es condicional y luego cierra el método y la clase.
Roger F. Gay
@Roger, ¿nombrarías "tres en una fila" una serie?
Sí, y ya lo tengo.
Roger F. Gay