¿Qué haría si descubriera que su colega estaba copiando su código fuente?

Siempre me sorprendo cuando veo este tipo de preguntas. He visto a personas en Quora preguntar si es ético buscar respuestas de codificación en Google -o– si es trampa para reutilizar el código existente que alguien escribió -o– si tendrías problemas por usar bibliotecas en lugar de codificar desde cero Solo puedo imaginar que el OP todavía está en la escuela y ha sido influenciado por el método de memorización de memoria que se usa en muchas escuelas en lugar de enseñar a las personas cómo resolver problemas.

En todos mis años de programación en todo tipo de equipos nunca he estado en una situación en la que un colega tuviera la tarea de escribir el código para el mismo problema en el que estaba trabajando. Si copiaba mi código, no le serviría de nada, ya que se supone que él (o ella) está trabajando en otra cosa. ¿Por qué una empresa querría asignarnos el mismo problema? Así que ni siquiera puedo imaginar una situación en la que esto sea un problema.

Por otro lado, si estuviera implementando un algoritmo o escribiendo un código que pudiera ser reutilizable, diga una declaración de API o una utilidad común entonces, antes de que ingresara en él, estaría preguntando a mis colegas si podrían hacer uso de mi trabajo. De hecho, esto sucede todo el tiempo. Todos lo hacen. Es parte de estar en un equipo de desarrollo.

No estamos en una competencia y esto no es una escuela primaria.

Si no fueran un ingeniero nuevo que todavía no estuviera familiarizado con el desarrollo de software, me molestaría que no lo refactorizaran, por lo que toda la compañía tendría una única versión para usar y el mantenimiento con la cobertura de prueba y todas las correcciones de errores.

Cortar y pegar conduce a

  1. Los mismos errores en varios lugares con solo uno recibiendo una solución.
  2. Las implementaciones ligeramente divergentes que son más trabajo para los buenos ingenieros para refactorizar cuando agregan una función a múltiples lugares, y la incitación para que los malos ingenieros hagan más cortes y pegamentos, lo que agrava el problema.

Si fueran un ingeniero nuevo, usaría la situación como una oportunidad de enseñanza.

¿Qué tal una historia real? (Algunos detalles pueden ser un poco incorrectos, fue hace mucho tiempo en una compañía muy lejana)

Solía ​​ser un tipo bastante alto en sistemas operativos.

Había una vez. Escribí un controlador de dispositivo de almacenamiento masivo.

Ahora se requiere que estos controladores de dispositivos tengan un montón de cosas. Me gusta

abrir, cerrar, leer, escribir, cosas especiales [ioctl para ustedes, chicos de Unix], una pequeña máquina de estados, algunas interrupciones en el procesamiento, algunas cuentas, algunos informes de errores.

Ahora alrededor del 75% de esto es bastante genérico. Un pseudo código realmente malo sigue:

  Abierto:
 verifique el estado (que es el mismo código para todos los desarrolladores)
 Di que el dev se está abriendo 
 
 Ir al estado de apertura pero no del todo;
 regreso:
 Open_step_2: / * llamado desde la máquina de estado * /
 Compruebe el estado de   Si está mal, un informe de error genérico puede ser bueno.
 regreso
 ... (bla, bla, bla)

Ahora llegamos a nuestros 2 ingenieros junior más, cada uno de los cuales tiene que escribir un controlador de desarrollo similar pero para un dispositivo diferente.

Ahora, en la plenitud del tiempo, cada uno de ellos viene a mí en busca de ayuda cuando se atascan. Llamémoslos Goofus y Gallant.

Gallant: Hey Moser. No puedo entender algo, ¿podrías echarle un vistazo?

Yo: Claro.

Yo miro. Me doy cuenta de que el controlador de su dispositivo es casi exactamente como el anterior. Simplemente copió mi código y eliminó el 25% de las cosas específicas del dispositivo y lo reemplazó con las cosas para su dispositivo. Fue super amable y añadió un comentario también. / * Adaptado de MOSERDEVDRIVER.C * / Eso fue considerado por él pero no realmente necesario.

Guay. Charlamos y maldecimos y gemimos y hacemos ingeniería de cosas y viola. Problema encontrado. Gallant despegado.

El tiempo pasa.

Goofus: Hola Moser. No puedo entender algo, ¿podrías echarle un vistazo?

Yo: claro

Yo miro. Goofus lanzó todo su propio código. Es extraño. Me toma un tiempo comenzar a asimilar lo que está pasando. Veo un montón de problemas no relacionados con lo que él preguntó. Gran lío caliente

Yo: ¿Por qué diablos no acabas de copiar mi antiguo MOSERDEVDRIVER.C y cambiar las cosas específicas del dispositivo?

Goofus: Uh. No se.

Yo: ve a hacer eso. Debería ser fácil, ya que ya tienes todo ese código específico de desarrollo aquí y puedes copiar y pegar como el 99%. Encienda EMACS y salte a él.

Goofus: En ello.

Día siguiente.

Yo: Hey Goofus. ¿Cómo va ese conductor?

Goofus: Parece estar funcionando ahora gracias a una tonelada.

La mayoría de las veces quiero que mi colega copie mi código. Hace un producto consistente y mantenible. El código reutilizable es una buena idea.