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?
Respuestas:
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.
fuente
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.
fuente
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.
fuente
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.
fuente
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:
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, 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.
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.
fuente
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.
fuente
¡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.
fuente
Si bien puedo entender la frustración asociada con tener un código "extranjero", hay dos oportunidades para que madures con este "obstáculo"
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.
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.
fuente
Creo que cuanto más grande se hace un equipo, más importantes se vuelven las pruebas unitarias.
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.
fuente
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.
fuente
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?
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.
fuente