¿Por qué los investigadores de CS son reacios a compartir código y qué técnicas puedo usar para fomentar el intercambio?

Mientras investigaba un área temática, me encontré con una serie de artículos que pretenden mejorar el estado del arte y que han sido publicados en medios respetados (por ejemplo, CVPR, ICIP). Estos documentos a menudo están escritos de una manera que oscurece algunos de los detalles y sus métodos pueden carecer de detalles. Al ponerse en contacto con estos autores para obtener más información y preguntarles si tendrían la amabilidad de poner a disposición su código fuente, dejan de responder o rechazan la oferta.

¿Por qué los investigadores de informática son reacios a compartir su código?

Habría esperado que la difusión de su código fuente tuviera efectos positivos para el autor, por ejemplo, mayor reconocimiento y visibilidad dentro de la comunidad y más citas. ¿Qué me estoy perdiendo?

Para el futuro, ¿cuáles son algunas formas mejores de acercarse a otros investigadores que resulten en un mayor éxito para obtener una copia de su código fuente?

Un tema importante, pero ¿lo divides en dos preguntas? (En los sitios de SE debe haber una pregunta por una... bueno, pregunta). Es decir, ¿podría hacer otra publicación a partir de la segunda pregunta?
Consideré separar las preguntas, pero pensé que la segunda no se sostendrá por sí sola.
Es posible que desee echar un vistazo a la iniciativa Mente Colectiva: hipeac.net/system/files/grigori.pdf y el modelo de publicación correspondiente ctuning.org/cm-journal
Podría publicar una respuesta, pero sería algo como: ¿cómo podríamos cambiar las cosas para que más personas publiquen su código fuente? ¿Sería eso aceptable, o pertenece a una pregunta diferente?
@FaheemMitha, me parece una pregunta diferente, pero buena. ¿Por qué no publica una pregunta diferente sobre cómo cambiar las cosas para que más investigadores de CS compartan su código fuente?
La solución para este problema es simple, hacer que la investigación de CS (y la investigación en general) esté mejor financiada. El problema es que no hay soporte para el costo de llevar el código de investigación a un nivel de calidad donde los costos de mantenimiento sean soportables.
@DikranMarsupial No estoy convencido de que arrojar más dinero a los investigadores mejore la situación, ya que tienen un tiempo limitado. No creo que la distribución de código de alta calidad sea el problema, es solo una excusa que usa la gente. Liberar código incorrecto es mejor que no liberar ninguno.
los fondos adicionales resolverán el problema, ya que significa que pueden contratar a alguien para mantener el código o pueden ser comprados de otras tareas para liberar el tiempo para hacerlo ellos mismos. Me gusta publicar código, y lo he hecho en el pasado, la razón por la que no publico más es porque no tengo tiempo para el mantenimiento, que sé por experiencia que es necesario. No estoy de acuerdo en que el código malo es mejor que ninguno, perdí varias semanas a principios de este año tratando de hacer que el código de investigación de otra persona funcionara, sin éxito. Por supuesto, los autores fueron de ayuda limitada ya que tienen los mismos problemas que yo.
Debo agregar, mi esposa es bastante activa en proporcionar código y se distrae con el volumen de solicitudes de ayuda de los usuarios, correcciones de errores, extensiones, etc. En mi caso, hay una audiencia limitada para mi software, si está en un campo donde hay una gran audiencia, el costo de mantenimiento está lejos de ser trivial.

Respuestas (5)

Por qué los investigadores pueden ser reacios a compartir su código: en mi experiencia, hay dos razones comunes por las que algunos/muchos investigadores no comparten su código.

Primero, el código puede dar a los investigadores una ventaja importante para el trabajo de seguimiento. Puede ayudarlos a adelantarse a otros investigadores y publicar investigaciones de seguimiento más rápido. Si los investigadores tienen planes de hacer una investigación de seguimiento, mantener su código en secreto les da una ventaja competitiva y les ayuda a evitar que otra persona se los lleve. (Esto puede ser bueno, o puede ser malo; no estoy tomando una posición al respecto).

En segundo lugar, una gran cantidad de código de investigación es, bueno, calidad de investigación. Los investigadores probablemente pensaron que era lo suficientemente bueno como para probar las hipótesis del artículo, pero eso es todo. Puede tener muchos problemas conocidos; puede no tener ninguna documentación; puede ser complicado de usar; podría compilarse en una sola plataforma; Etcétera. Todo esto puede hacer que sea difícil de usar para otra persona. O bien, puede llevar mucho trabajo explicarle a otra persona cómo usar el código. Además, el código puede ser un prototipo, pero no de calidad de producción. No es inusual tomar atajos durante la codificación: atajos que no afectan los resultados de la investigación y están bien en el contexto de un trabajo de investigación, pero que serían inaceptables para el código de calidad de producción implementado. Algunas personas son perfeccionistas y no t me gusta la idea de compartir código con debilidades conocidas o donde tomaron atajos; no quieren avergonzarse cuando otros ven el código.

La segunda razón es probablemente la más importante; Es muy común.

Cómo acercarse a los investigadores: Mi sugerencia es reenfocar sus interacciones con esos investigadores. ¿Cuáles son tus objetivos reales? Sus objetivos reales son comprender mejor sus algoritmos. Entonces, comience desde esa perspectiva y actúe en consecuencia. Si hay algunas partes en el trabajo que son difíciles de seguir o ambiguas, comience leyendo y releyendo su trabajo, para ver si hay algunos detalles que podría haberse perdido. Piense mucho acerca de cómo llenar los espacios que faltan. Haz un esfuerzo serio por tu cuenta, primero.

Si está en un nivel de investigación y se ha esforzado seriamente por comprender, y aún no comprende... envíe un correo electrónico a los autores y pídales que aclaren los puntos específicos que cree que no están claros. . No moleste a los autores innecesariamente, pero si muestra interés en su trabajo y tiene una buena pregunta, muchos autores estarán encantados de responder. Simplemente están agradecidos de que alguien lea sus artículos y esté lo suficientemente interesado en su trabajo como para estudiar su trabajo cuidadosamente y hacer preguntas perspicaces.

Pero asegúrese de hacer buenas preguntas. No seas perezoso y pide a los autores que aclaren algo que podrías haber descubierto por tu cuenta con más pensamiento. Los autores pueden sentir eso y lo descartarán como una plaga, no como un colega valioso.

Muy importante: comprenda que mi respuesta que explica por qué los investigadores podrían no compartir su código pretende ser una respuesta descriptiva , no una respuesta prescriptiva . Enfáticamente, no estoy haciendo ningún juicio sobre si sus razones son buenas, o si los investigadores tienen razón (o no) para pensar de esta manera. No estoy tomando una posición sobre si los investigadores deben compartir su código o no; Sólo estoy describiendo cómo se comportan algunos investigadores. Lo que deberían hacer es una bola de cera completamente diferente.

El cartel original pedía ayuda para comprender por qué muchos investigadores no comparten su código, y eso es lo que estoy respondiendo. Los argumentos sobre si estas razones son buenas son subjetivos y están fuera de tema para esta pregunta; si desea tener ese debate, publique una pregunta por separado.

Y, por favor, les insto a que usen un poco de empatía aquí. Independientemente de si cree que los investigadores tienen razón o no para no compartir su código en estas circunstancias, comprenda que muchos investigadores tienen razones que les parecen válidas y apropiadas. Trate de entender su forma de pensar antes de criticarlos reflexivamente. No estoy tratando de decir que sus razones sean necesariamente correctas y buenas para el campo. Solo digo que, si desea persuadir a las personas para que cambien sus prácticas, es importante comprender primero las motivaciones y las fuerzas estructurales que han influido en sus acciones actuales, antes de lanzarse a tratar de intimidarlas para que actúen de manera diferente.


Apéndice: definitivamente secundo la recomendación de Jan Gorzny de leer el artículo en SIAM News que él cita. es informativo

Aprecio la franqueza y la seriedad de esta respuesta.
+1 La mayor parte del código se escribe con una fecha límite, ya sea un estudiante de doctorado que intenta terminar o un postdoctorado que obtiene una entrega a tiempo. Conozco a muchas personas (incluido yo mismo firmemente) que se avergonzarían de ser juzgadas por la calidad de su código en lugar de la investigación real que respalda.

Stephen, tengo la misma experiencia que usted y mi explicación es que la relación costo/beneficio es demasiado baja.

Empaquetar una pieza de software para que pueda ser utilizada por otra persona es difícil, a menudo incluso más difícil que escribirlo en primer lugar. Requiere, entre otros:

  • escribir documentación e instrucciones de instalación,
  • asegurándome de que el código se pueda ejecutar en una variedad de computadoras y sistemas operativos (codifico en Ubuntu, pero usted puede codificar en Windows, por lo que tengo que obtener una máquina virtual de Windows para asegurarme de que también funcione allí),
  • respondiendo preguntas de mantenimiento del tipo "¿por qué obtengo este y aquel error de compilación cuando compilo su programa en la nueva versión de Ubuntu" (imagínense. Tal vez la nueva versión de Ubuntu eliminó alguna biblioteca requerida por el código? quién sabe).
  • cuidar las dependencias de terceros (mi código puede funcionar bien, pero depende de algún archivo jar de terceros cuyo autor decidió eliminar de la web).

Además, debería estar disponible para responder preguntas y corregir errores, varios años después de graduarme, cuando ya trabajo a tiempo completo en otro lugar y tengo hijos pequeños.

Y todo ello, sin recibir ningún pago especial ni crédito académico por todo ese esfuerzo.

Una posible solución que pensé recientemente es crear una nueva revista, Journal of Reproducible Computer Science , que aceptará solo publicaciones cuyos experimentos se puedan repetir fácilmente. Aquí están algunos de mis pensamientos acerca de tal diario:

Los trabajos enviados deben tener una sección de reproducción detallada , con (al menos) las siguientes subsecciones: - requisitos previos : qué sistemas, software de terceros, etc., se requieren para repetir el experimento; - instrucciones - instrucciones detalladas sobre cómo repetir el experimento. - licencias : ya sea una licencia de código abierto o de código cerrado, pero debe permitir el uso gratuito con fines de investigación.

El proceso de revisión requiere que cada uno de los 3 revisores diferentes, con diferentes antecedentes, pase por esta sección, utilizando diferentes computadoras y sistemas operativos.

Después del proceso de revisión, si el artículo es aceptado para su publicación, habrá otro paso previo a la publicación , que tendrá una duración de un año. Durante este paso, el artículo estará disponible para todos los lectores, y tendrán la opción de repetir el experimento y también contactar al autor en caso de que haya algún problema. Solo después de este año, el artículo será finalmente publicado.

Esta revista permitirá a los investigadores obtener crédito por el difícil e importante trabajo de hacer que su código sea útil para otros.

EDITAR: ¡Ahora veo que alguien ya pensó en esto! https://www.scienceexchange.com/reproducibilidad

"Science Exchange, PLOS ONE, figshare y Mendeley han lanzado la Iniciativa de Reproducibilidad para abordar este problema. Es hora de comenzar a recompensar a las personas que se toman el tiempo extra para hacer el trabajo más cuidadoso y reproducible. Los incentivos académicos actuales ponen énfasis en la novedad , que viene a expensas del rigor. Los estudios enviados a la Iniciativa se unen a un grupo de investigación, que se replicará selectivamente a medida que haya fondos disponibles. La Iniciativa opera sobre una base de aceptación porque creemos que el consenso científico sobre el más sólido , a diferencia de simplemente los más citados, el trabajo es una señal valiosa para ayudar a identificar hallazgos reproducibles de alta calidad que se pueden construir de manera confiable para avanzar en la comprensión científica".

No creo que sea una respuesta válida. Puede simplemente documentar su configuración o incluso simplemente distribuir el código. Incluso si no puedo correr, puedo aprender mucho con solo inspeccionarlo.
También pensé de esta manera, pero con el tiempo aprendí que cuando publicas tu código, inevitablemente tienes cierta responsabilidad sobre él. Si el código no está bien documentado, si no se compila, si no se ejecuta, la gente lo hará responsable y podría ser malo para su reputación.
Estoy de acuerdo en que si su código no se compila o no se ejecuta, puede ser malo para su reputación, pero creo que es razonable rechazar las solicitudes para cambiar/arreglar su código si simplemente lo está publicando. Si está administrando un proyecto de código abierto, eso es diferente, pero ¿por qué la publicación del código fuente requeriría más que simplemente responder preguntas (como lo haría cualquier publicación)?
Los trabajos enviados deben tener una sección de reproducción detallada ; una idea similar ha estado presente en la comunidad de arquitectura de computadoras durante algunos años, pero implica proporcionar una máquina virtual que funcione con el código instalado y listo. Arrancas la máquina virtual y listo.
@ErelSegalHalevi Es mucho peor para la reputación ocultar los detalles de implementación. En mi humilde opinión, básicamente significa "créeme". Así no es como funciona la ciencia. Ocultar el código viola la ley más importante de hacer ciencia: la falseabilidad. No puedes invalidar una obra si no tienes acceso a ella. El autor puede esconderse detrás de esta cortina negra negando cualquier intento de reproducir/invalidar su trabajo diciendo que no es idéntico a su método.
@Spidey, la respuesta de Erel es completamente precisa. Él describe una mentalidad que muchos investigadores tienen. Esa mentalidad puede ser buena o mala para el campo, pero independientemente, lo que importa es que muchos investigadores comparten esa mentalidad y actúan en consecuencia. El cartel original pedía una explicación de por qué muchos investigadores han decidido no compartir su código; Erel ha dado una descripción precisa de por qué algunos/muchos investigadores han decidido hacerlo. Puede estar de acuerdo o en desacuerdo con si han tomado la mejor decisión, pero esa no es la pregunta aquí.
@Spidey, estoy de acuerdo en que sería mucho mejor para la ciencia tener todo el código publicado. Es por eso que sugerí una forma de animar a los autores a publicar su código.
+1 para "Journal of Reproducible Computer Science", que por cierto es interesante para buscar en Google. Pero como desarrollador, creo que sus requisitos para empaquetar el código son demasiado estrictos. Cualquiera que conozca la frase "bit rot" sabrá que no es razonable esperar que otra persona mantenga un código que simplemente se creó para demostrar un punto.
Hay mucha investigación en esta área hecha por G. Fursin: él trata de hacer que el CS sea reproducible. Ver presentación en hipeac.net/system/files/grigori.pdf por ejemplo. También intenta impulsar un nuevo modelo de publicación ctuning.org/cm-journal
@DW Tienes 100% de razón. Quise decir que no es una razón válida para no compartir.
@ErelSegalHalevi: Tu sueño de tener papeles reproducibles es muy lindo. Pero piensa en el tiempo de publicación. Actualmente se tarda entre 6 y 18 meses en publicar un artículo. La publicación en esa revista puede demorar de 2 a 3 años si se necesitan revisores no remunerados (generalmente profesores) para leer toda su documentación, aprender el lenguaje utilizado, instalar herramientas, solucionar problemas del código y ejecutar para verificar si todo está bien. Suena más práctico usar una instancia en la nube, cargar el código y permitir que los revisores/lectores accedan a su código cargado en lugar de hacerlo todo por sí mismos. Si lo hace, también aumentará la confianza.
@Espanta: Un paso a la vez. Primero, comparte el código. Luego vamos pensando en la revisión por pares del código.
@Spidey: "Es mucho peor (...)" - cuando solo miran la ciencia, sí, pero (al menos en mi lugar) muchos candidatos a doctorado tienen el objetivo final de dejar la academia después de su doctorado para tomar un trabajo en el industria, o iniciar su propia empresa. Una vez que estén allí, serán juzgados por la calidad de cualquier código suyo que esté disponible públicamente, y el "código de estilo de prototipo experimental" se reflejará extremadamente mal en su reputación. Por lo tanto, puedo entender completamente si comparten código solo a pedido en lugar de hacerlo descargable en algún lugar. (Sin embargo, deberían reaccionar a las solicitudes).

Este artículo en SIAM News arroja algo de luz sobre la primera pregunta, por lo que podría valer la pena echarle un vistazo. Argumenta, para una audiencia matemática, por qué los investigadores deben publicar su código fuente y enumera muchas de las razones por las que los investigadores no comparten su código fuente. Lo hace mediante una ingeniosa analogía, que compara el intercambio de pruebas matemáticas con el intercambio de código fuente. Echar un vistazo; tiene una lista bastante extensa de razones por las que los investigadores podrían preferir no compartir su código fuente (así como algunas respuestas que argumentan que esas razones no son buenas).

Aquí hay una cita:

Las diez razones principales para no compartir su código (y por qué debería hacerlo). Randall J. LeVeque. Noticias SIAM, 1 de abril de 2013.

Le sugiero que proporcione más información sobre el artículo al que se vincula. Por ejemplo, indique el título y tal vez una oración que describa la idea principal. Tenga en cuenta que los enlaces caducan, y su respuesta sería más útil si proporcionara la información incluso si el enlace falla.

Al compartir código hay varios problemas:

  • El primer problema son los derechos de autor, ya que algunas investigaciones/proyectos de CS están financiados por ciertos industriales/organizaciones de financiación que desalientan el intercambio de información confidencial, como algoritmos, códigos o software, mientras se publican en publicaciones periódicas públicas.

  • De hecho, hay documentos basados ​​en ciertos datos (recopilados de la ejecución del código) que, lamentablemente, los autores modifican manualmente. Si comparten el código, detectar su error/error/modificaciones se vuelve muy fácil, lo que lleva al fracaso en su maestría/doctorado o proyecto de investigación, lo cual no es deseable.

  • En la investigación de CS y especialmente en la publicación, el desarrollo de código, particularmente un código largo y complejo, es una tarea no trivial y en la mayoría de los casos se considera un activo generador de dinero y papel. Al compartir el código con el público, revelan hechos con mucho detalle que pueden degradar su contribución en futuras investigaciones. Además, es posible que no sean los únicos que pueden regenerar el artículo y dar crédito a esa investigación y código en particular. En la mayoría de los casos, los estudiantes de maestría eligen un algoritmo o método, lo modifican ligeramente y presentan una tesis y un artículo basados ​​en él, que pueden contradecir los hallazgos y afirmaciones del primer autor. Recuerde a Thoma Herdon , un estudiante de posgrado que criticó los hallazgos de dos eminentes economistas de la Universidad de Harvard ( aquíes el enlace). Si se revelan los códigos en CS, es probable que las consecuencias sean catastróficas (puede que no haya demasiados casos, pero si sucede, será catastrófico).

  • Los códigos son propiedad vital para la mayoría de los investigadores para realizar experimentos e investigaciones. Si tiene un código, simplemente puede jugar con él y modificarlo para generar un nuevo conjunto de hallazgos que podrían ser más valiosos que los hallazgos iniciales. Sin tener autoría del autor inicial, no hay crédito a los mismos.

Sin embargo, Elsevier introdujo recientemente una nueva característica utilizando COLLAGE llamada Executable Papers que actualmente está disponible para la revista Computers & Graphics mediante la cual los códigos y los datos están disponibles y los investigadores pueden modificar el código y los valores de entrada para jugar.

Espero eso ayude.


Si se revelan los códigos en CS, las consecuencias son probablemente catastróficas. — ¿Entonces estás acusando de fraude a toda una disciplina intelectual? ¿En realidad?
@JeffE No sería tan duro llamarlo todo un fraude, pero definitivamente mejoraría la calidad general de los trabajos de investigación.
Suena como una acusación de fraude para mí, o al menos incompetencia criminal. La única razón por la que publicar datos/códigos sería "catastrófico" es si esos datos/códigos no respaldan las conclusiones publicadas sobre esos datos/códigos, como no lo hicieron en el artículo de Reinhart-Rogoff al que se hace referencia en una oración anterior .
Creo que su segundo punto es realmente el más importante. Si otros pueden replicar la investigación más avanzada y modificarla ligeramente para producir nuevos resultados publicables, entonces usted pierde la capacidad de capitalizar todo su arduo trabajo desarrollando el código para empezar.
pierde la capacidad de capitalizar todo su arduo trabajo [cita requerida]
No entiendo el segundo punto y la segunda mitad del tercer punto. ¿Desde cuándo CS significa pseudociencia basura deshonesta donde los autores manipulan datos y ocultan los detalles porque de lo contrario lo que ellos llaman "resultados" serían falsificados? Si resulta una catástrofe para los autores ser honestos y hacer que las cosas sean verificables, su campo ya debería haberse derrumbado y desaparecido para siempre. Como dijo JeffE, está acusando a CS si sugiere que estas son respuestas válidas a la pregunta de OP. Debes presentar pruebas. Oh, ¿recolectó evidencia con su código y la manipuló? Así es como funciona CS, ¿eh?
"derechos de autor [...] una gran cantidad de investigaciones de CS están financiadas por cierta organización que no permite que las personas compartan sus códigos" - ¿A qué organización se refiere? No conozco ninguno que prohíba a los investigadores de CS compartir su software, o alguna razón por la que los derechos de autor impidan compartir software. Creo que esta declaración es simplemente incorrecta.
Todas estas son buenas hipótesis, y el problema no se limita a CS. ¿Alguien sabe de un estudio para determinar cuál está realmente en juego? (sesgo asesino de falta de respuesta, probablemente... =)
@Erel Segal Halevi: edité el último párrafo y proporcioné un enlace a la función.
@JeffE: No tengo intención de acusar, es mi propia opinión de lo que ya he observado y es por eso que usé "probable" para proteger a los buenos e investigadores, como usted, que no falsifican los hallazgos. Además agrego uno más frase para eso. Sin embargo, si el punto te lastima a ti y a otros, realmente me disculpo. No tenía intención de eso. Lo siento amigo :)
@DW: Para mí, es lógico que los industriales que financian proyectos mantengan el derecho al algoritmo y al código. ¿Cree que los documentos de las grandes empresas de informática y comunicación se pueden replicar fácilmente? y están disponibles al público? Pueden publicar la importancia de su investigación, pero creo que intentan no compartir datos valiosos como el código con el público. No olvide que los competidores se miran entre sí. Una evidencia común es la declaración en papel publicado como "Aprobado para publicación externa". Este [ hpl.hp.com/techreports/2011/HPL-2011-55R1.pdf] es uno de esos. ¿No estás de acuerdo?
@Espanta, es un gran salto de "crees que sería lógico si los financiadores impidieran que los investigadores compartan el código" a lo que realmente escribiste. El hecho de que pienses que algo sería lógico, no significa que realmente lo sea. Es casi seguro que lo que realmente escribió en la respuesta es incorrecto. Si le importa la precisión, editará su respuesta para corregir lo que escribió y eliminará la afirmación de que "una gran cantidad de investigaciones de CS están financiadas por cierta organización que no permite que las personas compartan sus códigos".
@DW: Gracias amigo. Hice más cambios para hacerlo más preciso. Espero que ahora no tenga mucho problema.
Mi punto de vista sobre esto es que si no puede compartir el código y los datos, no puede publicar. Simple como eso. Todavía puede investigar y vender su fuerza de trabajo a cualquiera, pero ¿de qué sirve contarle a la comunidad científica sobre su logro si nadie puede reproducirlo?
Debe compartir datos, pero no necesariamente código. En las revistas, los revisores pidieron evaluar si los autores brindan suficiente información para replicar el trabajo. El código no es lo único para la replicación de la investigación. Hay muchos otros que impactan en los resultados que varían de un dominio a otro. Por ejemplo, para las aplicaciones basadas en la nube que se ejecutan en dispositivos móviles, hay una gran cantidad de métricas como dispositivo y tipo de nube, idioma programado, distancia entre la nube móvil, el tiempo de recopilación de datos, la calidad de la red y muchas más. Por lo tanto, la replicación del trabajo no es fácil en todos los dominios; El arte de los autores es generar confianza en su trabajo.

No soy un investigador de CS per se, pero estoy escribiendo código de Android para mi investigación en física atmosférica, por lo que mi visión es algo limitada. Sin embargo, puedo decir desde mi propia experiencia que gran parte del código que estoy desarrollando y probando es parte de un proyecto mayor que está desarrollando el equipo del que formo parte. Es una combinación de las reglas a las que estoy sujeto y la necesidad de mantener una parte del código en secreto por el momento.