Mi colega no entiende las cosas con las que trabaja. ¿Qué hacer? [cerrado]

13

He pasado 3 días depurando un error muy oscuro en una biblioteca creada por mi colega, este error ocurre con muy poca frecuencia. Después de todo, descubrí que este error ocurre debido a un acceso cruzado a un objeto sin ningún bloqueo. En realidad, este no es un primer error de este tipo, antes había errores similares. Él simplemente ejecuta sus pruebas de unidad, y si algo falla pone un bloqueo en algún lugar. Y si nada falla, ughm, entonces su código es perfecto. Parece que no tiene idea acerca de la seguridad de los hilos. Estoy 100% seguro de que hay muchos errores similares que aún no han aparecido. Parece que PM no entiende las cosas de enhebrado también.
El problema es que él trabaja mucho más tiempo en la empresa que yo. De todos modos, no puedo decir simplemente que "este tipo es incompetente en esta área", porque esto siempre te muestra como un "mal jugador de equipo", etc. Cualquier idea, ¿qué puedo hacer?

    
pregunta tika 22.04.2012 - 07:17

4 respuestas

13

Convenza a PM de que para evitar este tipo de errores, se debe mejorar el conocimiento del equipo sobre el tema de subprocesos, y dígales que está dispuesto a organizar algo como un taller o una presentación al respecto. No lo conviertas en algo personal entre tú y tu colega.

    
respondido por el Doc Brown 22.04.2012 - 09:19
8

Escriba una prueba de unidad que muestre el error y pídale que lo arregle.

    
respondido por el user1249 22.04.2012 - 09:03
4
  • El trabajo de un desarrollador senior es revisar su código y sugerir mejoras.
  • No estás allí para verificarlo después de su trabajo. Personalmente, odiaría que alguien volviera a revisar todos mis cambios para ver si algo se rompió.
  • Si él no acepta su consejo, entonces el trabajo de PM es solucionar el problema de comunicación.
  • El problema de subprocesamiento en una prueba unitaria me hace preguntarme si esta prueba es en realidad una prueba unitaria, en lugar de una prueba de integración o componente.
respondido por el CodeART 22.04.2012 - 10:29
-5

Creo que su empresa no debería usar subprocesos múltiples.

Después de hacer un proyecto de multiproceso masivo, encontré que dos técnicas eran fundamentales para hacer que las cosas funcionaran. Primero , el código tenía que estar escrito correctamente. Cada campo debía verificarse manualmente para asegurarse de que se había declarado correctamente y de que estaba correctamente sincronizado dondequiera que se hiciera referencia. (Advertencia: estoy simplificando un poco las cosas aquí para que mi respuesta sea breve, o, en cualquier caso, más breve.) En segundo lugar , el código se tuvo que probar ejecutándolo de forma sencilla en y máquinas multinúcleo: muchos minutos utilizando el 100% de cada núcleo. (Y si solo usa el 2% de cada núcleo, como lo hizo a menudo para mí, también es un error).

Es posible que pueda administrar esto, pero su organización no puede. Incluso si entendieron el problema, y no lo saben, no tienen la experiencia.

La mayoría de los idiomas proporcionan formas de evitar esto. Si tiene un lector de zócalo, que generalmente tiene su propio hilo, pídale que lleve la información al hilo principal de la manera más rápida y sencilla posible. Mejor aún, busque las clases / funciones del sistema que manejarán la parte del hilo de la lectura por usted. Use una cola que ejecute "eventos" uno tras otro, como hacen la mayoría de las API de GUI. (Para el caso, use la cola de eventos de la API de la GUI). Si necesita un procesamiento paralelo, probablemente pueda encontrar algún tipo de "subproceso de trabajo" que le permita mantener los datos / campos en un solo subproceso, manejando todas las transferencias por usted.

Enfatice todos los peligros del multihilo. (Historias de miedo: mi error favorito involucró un par de líneas como: int i = 5; i = i * i; , lo que resultó en que i tuviera un valor de 35. Uno que vi mucho fue: if (thing != null) thing.reset(); lanzando una excepción de puntero nulo). la única esperanza es hacer que comprendan que están entrando en un mundo nuevo, nuevo y extraño, y que tal vez deberían dar un gran paso atrás.

No estoy muy seguro de cómo se debe manejar el subprocesamiento múltiple . Si el trabajo puede ser entregado a una sola persona, y todo lo que hacen se tira si fracasa, está bien. Pero un equipo solo será tan fuerte como su miembro más débil, e incluso un buen programador tendrá problemas con el multiproceso en toda regla. Espero que la gente del idioma encuentre la manera de hacerlo seguro. He visto algún software útil por ahí Pero creo que es mejor evitar los subprocesos múltiples a menos que el tiempo de ejecución sea crítico y un buen programador o un equipo probado esté disponible.

    
respondido por el RalphChapin 23.04.2012 - 17:21

Lea otras preguntas en las etiquetas