coding-style - studio - superponer graficas en r
¿Cómo le dices a alguien que está escribiendo código malo? (30)
He estado trabajando con un pequeño grupo de personas en un proyecto de codificación para la diversión. Es un grupo organizado y bastante cohesivo. Todas las personas con las que trabajo tienen diferentes conjuntos de habilidades relacionadas con la programación, pero algunas de ellas utilizan métodos antiguos o totalmente erróneos, como variables globales excesivas, convenciones de denominación deficientes y otras cosas. Mientras las cosas funcionan, la implementación es pobre. ¿Cuál es una buena manera de pedirles educadamente o presentarlos para que utilicen una mejor metodología, sin que esto parezca cuestionar (o insultar) su experiencia y / o educación?
A nadie le gusta escuchar a alguien que diga que su trabajo apesta, pero cualquier persona sensata agradecería la mentoría y las formas de evitar el trabajo innecesario.
Una escuela de enseñanza incluso dice que no debes señalar los errores, sino enfocar lo que se hace correctamente. Por ejemplo, en lugar de señalar un código incomprensible como malo, debe indicar dónde es más fácil leer su código. En el primer caso, estás preparando a otros para que piensen y actúen como programadores de mierda. En el último caso, estás preparado para pensar como un profesional capacitado.
Empieza a hacer revisiones de código o programación de pares.
Si el equipo no los acepta, intente revisiones de diseño semanales. Cada semana, reúnete por una hora y habla sobre un trozo de código. Si la gente parece estar a la defensiva, escoge el código antiguo al que ya nadie se ha unido emocionalmente, al menos al principio.
Como dijo @JesperE: enfócate en el código, no en el codificador.
Cuando ve algo que cree que debería ser diferente, pero otros no lo ven de la misma manera, entonces comience por hacer preguntas que conduzcan a las deficiencias, en lugar de señalarlas. Por ejemplo:
Globales : ¿Crees que alguna vez querremos tener más de uno de estos? ¿Crees que querremos controlar el acceso a esto?
Estado mutable : ¿Crees que queremos manipular esto desde otro hilo?
También me resulta útil centrarme en mis limitaciones, que pueden ayudar a las personas a relajarse. Por ejemplo:
Funciones largas : mi cerebro no es lo suficientemente grande como para contener todo esto a la vez. ¿Cómo podemos hacer piezas más pequeñas que pueda manejar?
malos nombres : Me confundo con bastante facilidad cuando leo un código claro; cuando los nombres son engañosos, no hay esperanza para mí.
En última instancia, el objetivo no es que usted le enseñe a su equipo cómo codificar mejor. Es establecer una cultura de aprendizaje en tu equipo. Donde cada persona busca ayuda de los demás para convertirse en un mejor programador.
En lugar de hacer que escriban un código, pídales que mantengan su código.
Hasta que tengan que mantener su pila de espaguetis humeantes, nunca entenderán qué tan mal están en la codificación.
Francamente creo que el código de alguien es mejor cuando es más fácil cambiar, depurar, navegar, entender, configurar, probar y publicar (whew).
Dicho esto, creo que es imposible decirle a alguien que su código es malo sin tener una primera oportunidad de explicarle qué hace o cómo se supone que alguien debe mejorarlo después (como, crear una nueva funcionalidad o depurarlo).
Solo entonces su mente se rompe y cualquiera podrá ver eso:
- Los cambios en los valores de las variables globales casi siempre son ilegibles.
- Las enormes funciones son difíciles de leer y entender.
- Los patrones hacen que su código sea más fácil de mejorar (siempre que cumpla con sus reglas)
- (etc ...)
Tal vez una sesión de programación de pares debería hacer el truco. En cuanto a la aplicación de estándares de codificación, es útil, pero están demasiado lejos de definir realmente qué es un buen código.
Haga que las personas en cuestión preparen una presentación para el resto del grupo sobre el código para un módulo representativo que hayan escrito, y deje que las preguntas y respuestas se ocupen de ello (confíe en mí, lo hará y, si es un buen grupo, ni siquiera debería ponerse feo).
Hay un muy buen consejo en el libro de Gerry Weinberg "La psicología de la programación de computadoras". Su noción completa de "programación sin ego" se refiere a cómo ayudar a las personas a aceptar las críticas de su código como algo distinto de las críticas de sí mismas.
Inicie un wiki en su red usando algún software wiki.
Comience una categoría en su sitio llamada "mejores prácticas" o "estándares de codificación" o algo así.
Señalar a todos a ella. Permitir comentarios.
Cuando haga lanzamientos del software, haga que la persona cuyo trabajo es poner el código en la compilación rechace a los desarrolladores, apuntándolos a las páginas de Wiki.
Hice esto en mi organización y me llevó varios meses entender el uso de Wiki, pero ahora es este recurso indispensable.
La idea estándar del código es buena.
Pero considere no decir nada, especialmente porque es para divertirse, con, presumiblemente, con las personas con las que es amigo. Es solo el código ...
Las personas que escriben código incorrecto son solo un síntoma de ignorancia (que es diferente de ser tonto). Aquí hay algunos consejos para tratar con esas personas.
- La propia experiencia de los pueblos deja una impresión más fuerte que algo que dirás.
- Algunas personas no sienten pasión por el código que producen y no escucharán nada de lo que diga.
- La programación emparejada puede ayudar a compartir ideas pero cambiar quién está conduciendo o simplemente revisarán el correo electrónico en su teléfono
- No los ahogue demasiado, he encontrado que incluso la Integración Continua necesitaba ser explicada algunas veces a algunos desarrolladores más viejos
- Haz que se emocionen de nuevo y querrán aprender. Podría ser algo tan simple como programar robots por un día.
- CONFIANZA A TU EQUIPO, las normas de codificación y las herramientas que los controlan en el momento de la construcción a menudo nunca se leen o son molestas.
- Elimine la propiedad del código, en algunos proyectos verá silos de código o montículos de hormigas donde la gente dice que es mi código y no puede cambiarlo, esto es muy malo y puede usar la programación emparejada para eliminarlo.
Malas prácticas de nomenclatura: Siempre inexcusable.
Y sí, no siempre asuma que su camino es mejor ... Puede ser difícil, pero la objetividad debe mantenerse.
He tenido una experiencia con un programador que tenía nombres tan horribles de funciones, el código era peor que ilegible. Las funciones mentían sobre lo que hacían, el código no tenía sentido. Y eran protectores / resistentes a que alguien más cambiara su código. cuando se enfrentaron con mucha amabilidad, admitieron que tenía un mal nombre, pero querían conservar su propiedad del código y volverían y lo arreglarían "en una fecha posterior". Esto está en el pasado ahora, pero ¿cómo lidiar con una situación en la que el error se RECONOCE, pero luego se protege? Esto se prolongó durante mucho tiempo y no tenía idea de cómo romper esa barrera.
Variables globales: yo no soy tan aficionado a las variables globales, pero conozco a unos pocos programadores excelentes que les gustan MUCHO. Tanto es así que he llegado a creer que en realidad no son tan malas en muchas situaciones, ya que permiten claridad, facilidad de depuración. (Por favor, no me llames / me desaproveches :)) Todo se reduce a, he visto muchos códigos muy buenos, efectivos y libres de errores que utilizaban variables globales (¡no las puse yo!) y muchos buggy, Código de lectura / mantenimiento / corrección imposible que utilizaba meticulosamente los patrones adecuados. Tal vez exista un lugar (aunque tal vez reducción) para las variables globales? Estoy considerando repensar mi posición basada en la evidencia.
Me encanta el código, y nunca tuve ningún curso en mi vida sobre nada relacionado con la informática. Comencé muy mal y comencé a aprender de los ejemplos, pero lo que siempre recuerdo y guardé en mi mente desde que leí el libro "Gang Of Four" fue :
"Todos pueden escribir un código que sea entendido por una máquina, pero no todos pueden escribir un código entendido por un ser humano"
con esto en mente, hay mucho que hacer en el código;)
Me pongo una toga y abro una lata de método socrático.
El Método socrático que lleva el nombre del filósofo griego clásico Sócrates, es una forma de investigación filosófica en la que el interlocutor explora las implicaciones de las posiciones de otros para estimular el pensamiento racional e iluminar ideas. Este método dialéctico a menudo implica una discusión de oposición en la que la defensa de un punto de vista se enfrenta a otro; un participante puede llevar a otro a contradecirse a sí mismo de alguna manera, fortaleciendo el propio punto del investigador.
Muchas de las respuestas aquí se relacionan con el formato de código que en estos días no es particularmente relevante, ya que la mayoría de los IDE reformatearán su código en el estilo que elija. Lo que realmente importa es cómo funciona el código, y el póster es correcto para observar las variables globales, copiar y pegar el código, y mi mascota, las convenciones de nomenclatura. Existe algo así como un código malo y tiene poco que ver con el formato.
Lo bueno es que la mayor parte es mala por una muy buena razón, y estas razones son generalmente cuantificables y explicables. Entonces, de una manera no conflictiva, explique las razones. En muchos casos, incluso puede darle al escritor escenarios donde los problemas se vuelvan obvios.
No puedo enfatizar la paciencia lo suficiente. He visto este tipo de cosas exactamente contraproducente, principalmente porque alguien quería que los cambios sucedieran AHORA. Bastantes entornos necesitan los beneficios de la evolución, no de la revolución. Y al forzar el cambio hoy, puede crear un ambiente muy infeliz para todos.
Comprar es clave. Y su enfoque debe tener en cuenta el entorno en el que se encuentra.
Parece que estás en un entorno que tiene mucha "individualidad". Entonces ... No sugeriría un conjunto de estándares de codificación. Llegará a la conclusión de que desea tomar este proyecto "divertido" y convertirlo en un proyecto de trabajo altamente estructurado (oh bien, ¿qué sigue ... documentos funcionales?). En cambio, como dijo alguien más, tendrás que lidiar con eso hasta cierto punto.
Mantente paciente y trabaja para educar a otros en tu dirección. Comience con los bordes (puntos en los que su código interactúa con otros) y cuando interactúe con su código, intente aprovechar la oportunidad para hablar sobre la interfaz que han creado y preguntarles si estaría de acuerdo si se modificara (por usted o ellos). Y explique por qué desea el cambio ("ayudará a lidiar con cambiar los atributos del subsistema mejor" o lo que sea). No lo hagas y trates de cambiar todo lo que ves que está mal. Una vez que interactúas con otros en el borde, deberían comenzar a ver cómo les beneficiaría en el núcleo de su código (y si obtienes el impulso suficiente, profundiza y comienza a discutir las técnicas modernas y los beneficios de los estándares de codificación). Si aún no lo ven ... quizás debas lidiar con eso dentro de ti (especialmente en un proyecto "divertido").
Paciencia. Evolución, no revolución.
Buena suerte.
No soy el desarrollador principal de mi proyecto y, por lo tanto, no puedo imponer estándares de codificación, pero he encontrado que el código incorrecto generalmente causa un problema más temprano que tarde, y cuando lo hace, estoy ahí con una idea o solución más limpia.
Al no intervenir en ese momento y adoptar un enfoque más natural, he ganado más confianza con el liderazgo y él a menudo me confía ideas y me incluye en el diseño arquitectónico y la estrategia de implementación utilizada para el proyecto.
Por ejemplo. Muéstrales el camino correcto.
Tomar con calma. No los golpees por cada pequeño error desde el principio, solo comienza con las cosas que realmente importan.
Presentar la idea de un código estándar. Lo más importante acerca de un código estándar es que propone la idea de coherencia en el código base ( idealmente , todo el código debería parecer que fue escrito por una persona en una sola sesión) lo que llevará a un código más comprensible y mantenible.
Presente preguntas para que se den cuenta de que lo que están haciendo está mal. Por ejemplo, haga este tipo de preguntas:
¿Por qué decidiste hacer de eso una variable global?
¿Por qué le pusiste ese nombre?
Eso es interesante. Usualmente hago el mío de esta manera porque [inserta la razón por la que eres mejor]
¿Funciona de esa manera? Por lo general [inserto cómo los harías parecer tontos]
Creo que la forma ideal de abordar esto es preguntándoles sutilmente por qué codifican de cierta manera. Es posible que encuentren que creen que hay beneficios a otros métodos. A menos que supiera que la razón de su estilo de codificación se debía a la información errónea, nunca juzgaría mi camino como mejor sin una buena razón. La mejor manera de hacer esto es simplemente preguntarles por qué eligieron de esa manera; asegúrese de parecer interesado en su razonamiento, porque eso es lo que necesita atacar, no su capacidad.
Un estándar de codificación definitivamente ayudará, pero si fuera la respuesta a cada proyecto de software, todos estaríamos bebiendo cócteles en nuestras islas privadas en el paraíso. En realidad, todos somos propensos a los problemas y los proyectos de software aún tienen una tasa de éxito baja. Creo que el problema se derivaría principalmente de la habilidad individual en lugar de un problema con la convención, por lo que sugeriría resolver los problemas como grupo cuando un problema asoma su cabeza fea.
Lo más importante, NO asuma inmediatamente que su camino es mejor . En realidad, probablemente lo sea, pero estamos tratando con la opinión de otra persona y para ellos solo hay una solución. Nunca digas que tu forma de hacerlo es la mejor manera de hacerlo, a menos que quieras que te vean como un perdedor presumido.
Primero, tendría cuidado de no juzgar demasiado rápido. Es fácil descartar un código como malo, cuando puede haber buenas razones para hacerlo (por ejemplo: trabajar con código heredado con convenciones extrañas). Pero supongamos por el momento que son realmente malos.
Podría sugerir el establecimiento de un estándar de codificación, en función de la información del equipo. Pero realmente necesitas tener en cuenta sus opiniones, no solo imponer tu visión de lo que debería ser un buen código.
Otra opción es traer libros técnicos a la oficina (Código Completo, C ++ Efectivo, el Programador Pragmático ...) y ofrecer prestarlo a otros ("Oye, ya terminé con esto, ¿alguien quisiera prestarlo?" )
Probablemente desee centrarse en el impacto del código incorrecto, en lugar de lo que podría descartarse como su opinión subjetiva de si es un estilo bueno o malo.
Probablemente un poco tarde después del efecto, pero ahí es donde una norma de codificación acordada es algo bueno.
Pueden pensar que tu estilo también apesta. Reúna al equipo para discutir un conjunto consistente de pautas de estilo de codificación. De acuerdo con algo. Si eso se ajusta a su estilo no es el problema, decidirse por un estilo siempre que sea consistente es lo que importa.
Si es posible, asegúrese de que entiendan que está criticando su código , no ellos personalmente.
Si tiene incluso un estándar de codificación flojo, ser capaz de señalarlo o indicar que no puede seguir el código porque no es el formato correcto puede valer la pena.
Si no tiene un formato de codificación, ahora sería un buen momento para instalar uno. Algo como las respuestas a esta pregunta puede ser útil: https://.com/questions/4121/team-coding-styles
Siempre voy con la línea ''Esto es lo que haría''. No trato de sermonearlos y decirles que su código es una tontería, pero solo les ofrezco un punto de vista alternativo que, con suerte, puede mostrarles algo que obviamente es un poco más limpio.
Sugerir una mejor alternativa de una manera no confrontativa.
"Oye, creo que esta manera también funcionará. ¿Qué piensan ustedes?" [Gesto al código obviamente mejor en tu pantalla]
Tenga revisiones del código, y comience por revisar SU código.
Esto hará que la gente se sienta cómoda con todo el proceso de revisión del código porque usted está comenzando el proceso al revisar su propio código en lugar del suyo. Comenzar con su código también les dará buenos ejemplos de cómo hacer las cosas.
Tengo un senario similar con los chicos con los que trabajo. No tienen la exposición a la codificación tanto como yo, pero siguen siendo útiles para la codificación.
En lugar de dejarme hacer lo que ellos quieren, volver atrás y editar todo el asunto. Por lo general, solo me siento y les muestro dos formas de hacer las cosas. A su manera y a mi manera, de aquí discutimos los pros y los contras de cada método y, por lo tanto, llegamos a una mejor comprensión y una mejor conclusión sobre cómo debemos proceder con la programación.
Aquí está la parte realmente suprema. A veces surgen preguntas a las que no tengo respuestas, y después de la investigación, todos tenemos un mejor concepto de metodología y estructura.
- Discutir.
- Mostrarles por qué
- Ni siquiera pienses que siempre tienes razón. A veces, incluso ellos te enseñarán algo nuevo.
Eso es lo que haría si fuera tú: D
Tienes que explicar por qué tu camino es mejor .
Explica por qué una función es mejor que cortar y pegar.
Explica por qué una matriz es mejor que $ foo1, $ foo2, $ foo3.
Explique por qué las variables globales son peligrosas y que las variables locales facilitarán la vida.
El simple hecho de sacar un estándar de codificación y decir "hacer esto" no vale nada porque no le explica al programador por qué es bueno.
Pregunte en privado sobre algunos de los segmentos de código "malos" con la vista puesta en la posibilidad de que sea realmente un código razonable (sin importar cuán predispuesto esté), o de que quizás haya circunstancias atenuantes. Si todavía está convencido de que el código es simplemente malo, y que la fuente es esta persona, simplemente váyase. Puede suceder una de varias cosas: 1) la persona se da cuenta y toma alguna acción correctiva, 2) la persona no hace nada (es ajena o no se preocupa tanto como usted).
Si ocurre # 2, o # 1 no resulta en una mejora suficiente desde su punto de vista, Y está dañando el proyecto y / o afectando lo suficiente a usted, entonces puede ser el momento de comenzar una campaña para establecer / hacer cumplir estándares dentro el equipo. Eso requiere un compromiso por parte de la administración, pero es más efectivo cuando se inicia desde las bases.
Buena suerte con eso. Siento tu dolor hermano.