He escrito mucho sobre este tema en SoftwareEngineering.SE en el pasado, y yo mismo estaba en situaciones similares. Por lo tanto, intentaré dar algunas sugerencias y resaltar algunos problemas que noté al leer su pregunta.
Pero primero, hablemos de un aspecto importante: su papel en la empresa.
Tu rol
Puede tener un mandato explícito de su jefe para mejorar las cosas, y también un lugar en la jerarquía donde otros desarrolladores tienen que escuchar sus órdenes . O puede estar entre pares, tener el mismo rol y la misma autoridad, su opción es solo ... bueno ... una opinión .
En ambos casos, lo que importa es menos su lugar en la jerarquía y más:
Lo que otros desarrolladores piensan de ti. Si te tratan como un tipo molesto que les pregunta cosas estúpidas, no llegarás lejos. He visto muchos casos en los que los líderes técnicos y los gerentes de proyecto no tuvieron absolutamente ninguna influencia en el equipo, porque el equipo sabía (o pensaba) que esos "líderes" no tenían antecedentes técnicos necesarios para tomar las decisiones que estaban tomando. Por otro lado, he visto a varios desarrolladores que fueron escuchados por sus pares, porque sabían que esos desarrolladores son hábiles y experimentados.
Qué tan sólido es su equipo y qué los motiva. Imagine una empresa donde cada desarrollador recibe un pago por KLOC / mes. ¿Le importaría algo a sus colegas sobre el estilo? Probablemente no, porque son raras las personas que quieren que se les pague menos. En general, si este no es un equipo, sino solo un grupo de personas que trabajan en el mismo proyecto, no podrá mejorar nada.
Dependiendo de eso, puede decidir si vale la pena hacer algún cambio. Si no tiene voz y no hay cohesión del equipo, simplemente busque otro trabajo. Si eres conocido como un desarrollador talentoso y respetado y existe un fuerte sentimiento de equipo, podrás mejorar las cosas de manera relativamente fácil, incluso si enfrentas la hostilidad de tu jefe u otros equipos.
En todos los casos, es esencial no presionar a su equipo. Trabaja con ellos, no contra ellos. No les dé órdenes, sino guíelos hacia la meta.
Ahora, las pistas.
Estilo
Una vez pedí amablemente que siguiera el estilo de codificación y el formato de la mayoría del código existente (lamentablemente no tenemos un documento de estilo de codificación formal). Pero no funcionó ...
Por supuesto que no, ya que esta no es la forma en que debería hacerse.
El estilo es aburrido .
El siguiente estilo es aburrido .
Escribir un documento de estilo de codificación es aburrido ( y muy difícil ; ni siquiera intente hacerlo a menos que haya trabajado con el idioma durante más de diez años).
Leer el documento de estilo es aburrido .
Revisar el código por errores de estilo es aburrido .
Trollear que mi estilo es mejor que el tuyo es emocionante , especialmente cuando no hay absolutamente ningún beneficio objetivo de un estilo sobre otro. En serio, cada persona cuerda sabe que la manera correcta de escribir if (x)es la forma en que lo escribí, no if(x)o if ( x )!
Por lo tanto:
No hagas revisiones de estilo. Este es el trabajo de las damas de estilo. Esas lindas aplicaciones tienen algunos beneficios sobre su cerebro: verifican todo el proyecto en cuestión de milisegundos, no horas o días, y no cometen errores y no pierden errores de estilo.
No escriba su propio estándar de estilo. Lo harás mal de todos modos, y tus compañeros de trabajo te convencerán de que tomaste malas decisiones.
No obligue a los desarrolladores a corregir 2 000 errores de estilo.
Hacer cumplir estilo automáticamente en commit. El código que tiene errores de estilo no tiene cabida en el control de versiones.
Hazlo desde el inicio del proyecto. Configurar el control de estilo en un proyecto existente es difícil o imposible.
Para más información sobre eso, lea la primera sección de esta otra respuesta en SE.SE .
También:
- No seas muy estricto. Por ejemplo, escribir
jslintcódigo compatible es bastante molesto, por lo que debe hacerse exclusivamente cuando sea absolutamente necesario (o si todos los miembros de su equipo están contentos de usarlo). Lo mismo ocurre con las herramientas de comprobación estática; por ejemplo, el análisis de código de .NET al nivel máximo podría ser muy opresivo y deprimente, a la vez que ofrece pocos beneficios; el mismo conjunto de herramientas a nivel moderado, por otro lado, demuestra ser muy útil.
Revisiones de código
Ahora que no necesita preocuparse por el estilo durante las revisiones de código, puede concentrarse en cosas más interesantes: mejorar (en lugar de arreglar) el código fuente.
Diferentes personas reaccionan de manera diferente a las revisiones de código. Algunos lo consideran una oportunidad. Otros lo odian. Algunos escuchan todo lo que les dices, toman notas y no discuten, incluso si pudieran estar en lo cierto. Otros intentan discutir sobre cada punto. Depende de usted encontrar una manera de tratar con cada desarrollador de acuerdo con su personalidad. Por lo general, es útil:
Realice revisiones de código en privado, especialmente cuando el desarrollador es junior y escribe un código realmente malo.
Muestre que no hay nada personal: está revisando el código, no las habilidades de la persona.
Mostrar el objetivo real de una revisión de código. El objetivo no es mostrar qué tan malo es un desarrollador. El objetivo es proporcionar oportunidades de mejora.
Nunca discutir. No estás aquí para convencer, sino para brindar tu experiencia.
Nunca asuma que el revisor es el único que puede aprender algo de una revisión. También está aquí para aprender, tanto leyendo el código como pidiendo explicaciones sobre las partes que no comprende.
Una vez que se realiza la revisión del código, asegúrese de que la persona realmente mejore su código. Tuve algunos casos en los que los desarrolladores pensaron que la revisión del código termina cuando finaliza la reunión real. Se van y vuelven a sus nuevas funciones, tratando de aplicar lo que compartió con ellos solo para el nuevo código. Tener una herramienta de seguimiento decente para la revisión de código ayuda.
Tenga en cuenta que independientemente de su rol particular en la empresa y su experiencia en comparación con otros, su código también debe estar sujeto a revisión. Tampoco deberías ser el único que revisa el código de otros.
En un proyecto reciente en el que trabajé como líder técnico, me costó explicarles a mis compañeros de trabajo que es su función hacer las revisiones del código del otro, incluido el mío. El miedo a un interno que está a punto de revisar el código de su líder técnico desaparece tan pronto como encuentra los primeros problemas en el código, ¿y quién de nosotros escribe un código perfecto?
Formación
Las revisiones de código son una gran oportunidad para enseñar y aprender algunos de los aspectos de la programación y el diseño de software, pero otros requieren capacitación.
Si puedes entrenar a tus compañeros de trabajo, hazlo. Si su administración es hostil ante la idea de capacitación, hágalo informalmente. He realizado tales sesiones de capacitación en forma de reuniones informales, o, a veces, incluso como simples debates, a veces interrumpidos por la gerencia y perseguidos más tarde.
Además de la capacitación directa, asegúrese de conocer suficientemente bien los libros como McConnel's Code Complete y hable sobre esos libros con sus compañeros de trabajo. Sugiérales que lean el código fuente de proyectos de código abierto, bríndeles ejemplos específicos de código de alta calidad. Y, obviamente, escriba usted mismo un código de alta calidad.
Centrarse en el contexto, no en las personas.
¿Cómo puedo abordar esta situación sin solo enfocarme en la 'mala cultura de la compañía', 'graduados sin experiencia', etc.
Esos graduados tienen un objetivo: adquirir experiencia, aprender cosas, volverse más hábiles. Si, año tras año, escriben código malo y no saben nada sobre programación, probablemente sea porque su equipo o su empresa no les está dando esta oportunidad.
Si te estás enfocando en el hecho de que tu equipo tiene graduados sin experiencia, esto no ayudará. En cambio, concéntrate en lo que puedes hacer por ellos y con ellos. Las revisiones de códigos y la capacitación son dos de las técnicas para mejorar la situación.
La mala cultura de la compañía es una bestia diferente. A veces, se puede cambiar. A veces no puede. En todos los casos, recuerde que usted es parte de esta empresa, por lo que forma parte de la cultura de la empresa. Si no puede cambiarlo y lo encuentra inherentemente malo, tarde o temprano, tendrá que irse.
Obtenga sus métricas correctas
¿Cómo exactamente mides el código en este momento? ¿Mide el número de confirmaciones por día por desarrollador? ¿O el KLOC por mes por programador? O tal vez el código de cobertura? ¿O la cantidad de errores encontrados y corregidos? ¿O el número de posibles errores detectados por las pruebas de regresión? ¿O el número de reversiones realizadas por el servidor de implementación continua?
Las cosas que mides importan, porque los miembros del equipo están adaptando su trabajo a los factores que se miden. Por ejemplo, en una empresa donde tuve que trabajar hace unos años, lo único que se midió fue el tiempo que uno pasa en la oficina. No hace falta decir que esto no fue alentador para ofrecer un mejor código, o para trabajar de manera más inteligente, o ... bueno, para trabajar en absoluto.
Determinar el refuerzo positivo y negativo y ajustar los factores medidos a lo largo del tiempo es esencialmente la influencia que tiene sobre los miembros del equipo. Cuando se hace correctamente, permite obtener resultados que no se lograrán con una simple jerarquía.
Las cosas que te molestan, las hacen medibles. Mídalos y haga públicos los resultados. Luego trabaje junto con otros miembros del equipo para mejorar los resultados.
Por ejemplo, consideremos que los miembros del equipo cometen demasiados errores ortográficos en los nombres de las clases, los miembros de la clase y las variables. Esto es molesto. ¿Cómo puedes medir eso? Con un analizador, puede extraer todas las palabras del código y, usando un corrector ortográfico, determinar la proporción de palabras que contienen errores y errores tipográficos, digamos 16,7%.
Su próximo paso es ponerse de acuerdo con su equipo en la proporción objetivo. Podría ser del 15% para el próximo sprint, del 10% para el próximo, del 5% en seis semanas y del 0% en dos meses. Esas métricas se vuelven a calcular automáticamente en cada confirmación y se muestran en una pantalla grande en la oficina.
Si no logra el índice objetivo, su equipo puede decidir pasar más tiempo arreglando errores ortográficos. O su equipo puede considerar mejor calcular la relación por desarrollador y mostrar esta información en la pantalla grande también. O su equipo puede encontrar que el objetivo era demasiado optimista y que debería revisarlo.
Si logra la proporción objetivo, el siguiente paso es asegurarse de que la cantidad de errores y errores tipográficos no aumenten con el tiempo. Para eso, puede crear una tarea adicional en su compilación que verifique si hay errores ortográficos y fallará la compilación si se encuentra al menos un error. Ahora que eliminó este problema, su pantalla grande puede reutilizarse para mostrar las nuevas estadísticas relevantes.
Conclusión
Creo que todos los aspectos mencionados en su pregunta pueden resolverse mediante las técnicas que incluí en mi respuesta:
Cuando otros desarrolladores se unieron al proyecto, noté que usan un estilo de codificación diferente (a veces un estilo completamente diferente)
Debes aplicar el estilo automáticamente al confirmar.
y, a menudo, no utiliza características de lenguaje modernas como los accesores de propiedad (esto es relativamente nuevo en Objective-C).
Tanto la revisión de códigos como la capacitación están aquí para transferir su conocimiento del idioma.
A veces inventaban sus propias bicicletas en lugar de usar características similares del marco
Tanto la revisión de códigos como la capacitación están aquí para transferir su conocimiento del marco.
o transferir conceptos de otros lenguajes de programación o patrones que aprendieron a nuestra base de código.
Esto es una cosa excelente. Parece una oportunidad para que aprendas de ellos.
A menudo no pueden nombrar métodos o variables correctamente debido a un mal inglés
Las revisiones de código también deberían centrarse en la denominación adecuada. Algunos IDE también tienen correctores ortográficos.
A veces pienso que si no fuera por el IDE, creo que escribirían todo el código sin sangría ni formato.
Por supuesto que lo harían. El estilo es aburrido y debe automatizarse.
Básicamente, odio el código que escriben.
Recuerde de la parte de revisiones de código: “El objetivo no es mostrar lo malo que es un desarrollador. El objetivo es proporcionar oportunidades de mejora ".
Está mal formateado / organizado, y a veces es radicalmente diferente del resto del proyecto.
Comprobación de estilo automatizada .
Me siento muy molesto cuando agregan sus espaguetis a mi obra de arte
¡¿Esperar lo?! ¡¿Obra de arte?! ¿Adivina qué? Algunas personas (incluido usted en seis meses) pueden encontrar su código lejos de ser una obra de arte. Mientras tanto, entienda que considerar su trabajo como una obra de arte y su trabajo como basura no ayudará a nadie. Incluyéndote.
Se siente cada vez más como que no pueden molestarse en aprender o no les importa: simplemente hacen lo que se les exige y se van a casa.
Por supuesto que harán lo que les sea requerido. Recuerde: contexto, no personas, y obtenga sus métricas correctas . Si el contexto requiere de ellos que sean mejores en lo que hacen, lo harán. Si el contexto requiere producir tantos KLOC por mes como sea posible y nada más, también lo harán.