Trabajo con un equipo que creció de 2 desarrolladores a 10 en menos de un año. Era el número 3 y el primero en plantear un problema de estándares de codificación. Los dos desarrolladores originales habían estado trabajando codo a codo durante algunos años y habían adoptado un estándar común que me parecía extraño. Tuvimos exactamente los mismos problemas que está describiendo.
Lo que hicimos fue:
Estándares de codificación de investigación
Pasamos unos días revisando proyectos de código abierto establecidos. Sabíamos que el equipo se expandiría rápidamente y estábamos buscando soluciones reales basadas en proyectos reales, no en algunas pautas genéricas. Tampoco nos interesaban los estándares de codificación óptimos, sino un conjunto de reglas y pautas que tendrían sentido y no exigirían la refactorización de toda nuestra base de código. Estábamos buscando un hack de estándares de codificación, por así decirlo.
Los tres decidimos que los mejores estándares de codificación para un proyecto PHP establecido eran los seguidos por Zend Framework. Afortunadamente, la gente de Zend Framework proporciona un documento de estándares de codificación muy completo .
Creando nuestros propios estándares de codificación
Por supuesto, la aplicación de los estándares de codificación de otro proyecto en nuestro proyecto no tiene sentido. Usamos el documento de Zend Framework como plantilla:
- Primero eliminamos todo lo que no se aplicaba a nuestro proyecto.
- Luego cambiamos todo lo que percibimos como una cuestión de estilo a nuestro estilo
- Y finalmente escribimos todo
Así que teníamos un documento bastante grande en nuestras manos, almacenado en nuestra elegante wiki , era una buena lectura, acordada por todos nosotros. Y completamente inútil por sí solo.
Mantenerse fiel a nuestra promesa
Nuestra base de código en ese momento era aproximadamente 1 * 10 ^ 6 sloc. Sabíamos que desde que adoptamos los estándares formales de codificación teníamos que comenzar a refactorizar nuestro código, pero en ese momento tuvimos problemas con otros problemas. Así que decidimos refactorizar nuestras bibliotecas centrales, un mero 5 * 10 ^ 3 sloc.
Asignamos a uno de nosotros para que sea el maestro de estándares de codificación (utilizamos malas palabras locales en lugar del maestro ) con la responsabilidad de verificar y hacer cumplir los estándares. Reciclamos el papel cada pocos sprints. Fui el primero, y fue mucho trabajo, ya que tuve que monitorear casi todos los commits.
Tuvimos varias discusiones nuevas y pequeñas adiciones al documento original durante mi mandato, y finalmente tuvimos un documento algo estable. Lo cambiamos de vez en cuando, pero la mayoría de estos cambios están en las nuevas características del lenguaje, ya que PHP 5.3 fue una versión importante en todo menos en el nombre.
Tratando con el chico nuevo
Cuando llegó el nuevo chico nuevo, era hora de poner a prueba nuestros estándares de codificación. Después de una pequeña introducción a nuestra base de código, le pedimos que evalúe nuestro documento de estándares de codificación. Casi lloró. Parecía que hacía todo de manera diferente.
Como era el maestro de estándares de codificación en ese momento, dependía de mí evaluar su aporte y revisar el documento en consecuencia. Sus propuestas fueron:
- Asuntos de estilo personal (desestimados sumariamente)
- Estándares que tenían sentido para su experiencia en Java pero no tanto con PHP (descartado)
- Convenciones que llevó de su breve exposición con PHP (algunas fueron descartadas, pero muchas resultaron ser convenciones populares que nunca pensamos o descubrimos en nuestra investigación inicial)
Durante las siguientes dos semanas se le asignó una tarea simple: actualizar varias partes de nuestra base de código con los estándares. Tuve que elegir cuidadosamente esas partes en función de algunas reglas:
- El código debería ser relativamente fácil para alguien que no esté familiarizado con nuestra base de código (y PHP en general)
- El código debe estar en lo que fue contratado para hacer
Supervisé su proceso e hizo un buen trabajo. Identificamos varias partes del código que era imposible ajustar a nuestro documento y lo revisamos en consecuencia (código y / o estándares, lo que tenga más sentido)
Y luego llegó otro chico nuevo. Repetimos el proceso (maestro diferente esta vez), y funcionó nuevamente. Y otra vez.
En conclusión
- Cree un documento de estándares de codificación, pero asegúrese de que sus estándares no sean exclusivamente suyos sino que reflejen estándares comunes en la comunidad más amplia de su plataforma.
- Asigne un papel similar a nuestro maestro de estándares de codificación. Alguien para monitorear al menos el nuevo código, y especialmente el nuevo código de los nuevos miembros. Recicla el papel, ya que es extremadamente aburrido.
- Siempre evalúe las aportaciones de un nuevo miembro. Siempre revise sus estándares si tiene sentido. Su documento de estándares de codificación debería estar evolucionando, pero lentamente. No desea refactorizar su base de código en cada iteración.
- Permita un tiempo para que cada nuevo miembro aprenda y se adapte a sus estándares y convenciones. Aprender haciendo funciona mejor en estas situaciones.
- Wiki hace maravillas para tales documentos.
- ¡Las revisiones de código hacen maravillas para cualquier situación!
En algún momento del proceso, se sugirió que usáramos un enlace previo a la confirmación para automatizar la verificación de los estándares. Decidimos no hacerlo por varias razones, hay algunas discusiones interesantes sobre StackOverflow sobre el tema:
Algunos son específicos de PHP, pero las respuestas se aplican a todas las plataformas.