Código en documentos académicos

34

En mi carrera académica, he leído bastantes artículos académicos sobre diversos temas de informática. Muchos de los cuales implican una implementación y alguna evaluación de esa implementación, sin embargo, he descubierto que muy pocos de ellos publican realmente el código que usaron.

Para mí, los beneficios de incluir la implementación real serían significativos, a saber:

  • Extensión de confianza o reproducibilidad (¡solo pruébelo usted mismo!)
  • Aclaración de ambigüedades (particularmente para trabajos escritos por hablantes no nativos)
  • Reutilización de código para aplicaciones

Entonces, ¿por qué tan pocos documentos realmente incluyen algún código?

Supongo que podría ser la intención de la organización detrás del documento utilizar la implementación en sus propias aplicaciones y, por lo tanto, no querría publicarlo, pero si ese es el caso, ¿por qué incluso escribir el documento?

Kevin Dolan
fuente
14
Entonces, ¿por qué tan pocos documentos realmente incluyen algún código? Porque los revisores lo toleran por alguna razón, incluso si no hay una buena razón para ocultar la implementación. Somos los revisores, podemos cambiarlo.
Jukka Suomela
14
Creo que esto debe variar según el subcampo. Casi todas las cosas de la Teoría B con las que estoy familiarizado (y especialmente Haskell, Agda y, a veces, relacionadas con Coq) incluyen código publicado, a veces incluso como un apéndice o mejor aún, incluido en el documento. Para empezar, un buen número de artículos de ICFP están escritos como programas alfabetizados, y los autores publican su fuente en su totalidad. Una buena cantidad de ellos a su vez ha resultado en bibliotecas extraídas para su distribución. De los documentos restantes, una cantidad justa nunca tuvo código para empezar.
sclv
8
Los resultados de la investigación deben ser abiertos (y gratuitos), y también el código. Según algunas definiciones, la ciencia solo ocurre cuando las hipótesis son falsificables y los experimentos reproducibles, por lo que podría argumentar que las publicaciones basadas en código que no se publican no son trabajos científicos.
Raphael
44
@Raphael La publicación del mismo código solo ayudaría a establecer la repetibilidad, no la reproducibilidad. Ejecutar exactamente el mismo código en el mismo experimento es apenas independiente. La ciencia requiere reproducibilidad, no repetibilidad.
Mark Reitblatt
2
Estaba pensando en los resultados que hablan de las propiedades del código en lugar de sus resultados (en cuyo caso tiene razón, por supuesto). Digamos que los autores realizan experimentos en alguna implementación del algoritmo presentado y comparan tiempos de ejecución examinando gráficos (lo llaman "Ingeniería de algoritmos"). Aquí, el código proporciona reproducibilidad.
Raphael

Respuestas:

17

Aquí hay un artículo bien argumentado de David Donoho y Jonathan Buckheit que leí en la escuela de posgrado que aborda exactamente este tema desde el punto de vista de los investigadores de wavelet:

"WaveLab y la investigación reproducible"

Su idea era aún más ambiciosa, proporcionar un código para reproducir todas las figuras en sus documentos en un conveniente paquete de Matlab.

Realmente me gusta su idea, pero creo que los problemas son obvios.

(1) Es un trabajo extra (limpiar el código, hacer al menos una interfaz de usuario rudimentaria, escribir cierta documentación, proporcionar algo de apoyo cuando las personas inevitablemente se encuentran con problemas)

(2) No es realmente requerido / esperado por la mayoría de las conferencias / revisores

Pero no puedo evitar sentir que la comunidad de investigación de CS se beneficiaría si existiera la expectativa de hacer que el código y los datos utilizados en cualquier publicación estén disponibles públicamente en un formato utilizable. Admito que no lo he hecho incluso cuando la cantidad de trabajo involucrado hubiera sido manejable. Creo que es difícil hacer un esfuerzo extra cuando no hay un impulso externo.

Mugizi Rwebangira
fuente
77
Creo que una expectativa de (a) pseudocódigo o (b) código disponible, al menos en los sitios web, sería muy útil para la comunidad de investigación de CS. No todo el código de investigación tiene una alta capacidad de uso, y no estoy seguro de si hacer que el código con errores esté disponible sería bueno o no.
Peter Shor
1
He hablado con autores en papel que no han publicado su código por razones similares: en el estado en que se encuentra, se sentirían culpables si alguien realmente intentara hacer algo con él.
sclv
66
el código no necesita ser bueno, limpio o reutilizable. pero necesita ser reproducible para ser considerado 'ciencia'. Hubo un buen artículo en la naturaleza de Nick Barnes (2010) Publique su código de computadora: es suficientemente bueno argumentar este punto.
David LeBauer
16

Si trabaja para un laboratorio industrial, puede ser mucho, mucho más fácil obtener un documento aprobado para su publicación que obtener el código aprobado para su publicación (incluso si el documento contiene toda la información necesaria para reescribir el código). Culpa a la burocracia.

Peter Shor
fuente
1
Si bien esto es cierto, me pregunto si un cambio apropiado en la cultura impulsado por investigadores académicos permitiría a los investigadores industriales presionar a la administración para permitir la liberación del código. Después de todo, sospecho que incluso obtener una política para la publicación en papel debe haber tomado algo de trabajo
Suresh Venkat
66
Al menos en MSR, es muy fácil publicar código de investigación. En realidad, es más difícil usar código externo, ya que MS tiene mucho cuidado al respetar las licencias de software. Dado que muchas caídas de código relacionadas con el papel vienen sin un archivo de licencia explícito, esto puede ser un poco molesto. Por lo general, solo lleva un correo electrónico al autor del documento para aclarar las cosas, pero puede facilitarles a los investigadores industriales al recordar pegar una licencia aprobada por OSI en su lanzamiento de código público.
Neel Krishnaswami
2
@Neel: ¿Quieres decir "aprobado por OSI, pero no GPL"?
Radu GRIGore
3
La GPL generalmente está bien, ¡muchos de nosotros usamos Emacs! :) No se nos permite usar el software Affero GPL, ya que sus condiciones de reciprocidad se extienden a cualquiera que interactúe con el software (es decir, cierra el vacío del servicio web), y MS no quiere arriesgar la posibilidad de que algún servidor interno ejecutar código AGPL accidentalmente podría hacerse público. Pero incluso la AGPL es mejor que ninguna licencia, porque elegir una licencia en realidad hace que los términos de compartir no sean ambiguos.
Neel Krishnaswami
13

Migrado y expandido de un comentario:

Creo que esto debe variar según el subcampo. Casi todas las cosas de la Teoría B con las que estoy familiarizado (y especialmente Haskell, Agda y, a veces, relacionadas con Coq) incluyen código publicado, a veces incluso como un apéndice o mejor aún, incluido en el documento. Para empezar, un buen número de artículos de, por ejemplo, ICFP están escritos como programas alfabetizados, y los autores publican su fuente en su totalidad. Una buena cantidad de ellos a su vez ha resultado en bibliotecas extraídas para su distribución.

De los documentos restantes, una cantidad justa nunca tuvo código para empezar. De esos, probablemente hay dos razones principales. Primero están los documentos cuyo contenido principal es árboles de pruebas, reglas de mecanografía con pruebas de solidez asociadas y similares. De ellos, los avances en la metateoría mecanizada han alentado al menos a algunos autores a proporcionar código en su probador de teorema de elección (ver las diapositivas de Weirich en POPLmark:) http://www.seas.upenn.edu/~sweirich/talks/cambridge-09. pdf. En segundo lugar están los que descienden de las cosas de Bird-Merteens (banannas & co.). Estos generalmente se pueden traducir a un lenguaje funcional sin demasiado trabajo. Sin embargo, sospecho que generalmente hay una pérdida de generalidad, y que lidiar con problemas concretos de sintaxis y escritura complica innecesariamente las cosas y hace que sea más difícil seguir el razonamiento equitativo.

Quería corroborar un poco mis observaciones, así que hice un recuento aproximado de los primeros dos días de ICFP 2010. De los documentos estándar (es decir, no los informes de experiencia o las conversaciones invitadas), 12 de 21 proporcionaron algún tipo de código. Tres proporcionaron Coq (un cuarto reclamó una prueba parcial pero no la publicó). Tres se burlaron de Haskell. Tres proporcionaron Agda. Uno proporcionó Scheme, uno proporcionó Caml y uno proporcionó Twelf. (Tenga en cuenta que algunos proporcionaron código para más de un asistente de prueba, o tanto para una formalización como para una implementación). Del resto de los documentos, algunos trabajaron con un nivel de abstracción lo suficientemente alto como para que implementarlo en un asistente de prueba sería un documento nuevo en sí mismo, y un buen número más funcionó y sospecho que podría haberse implementado en un asistente de prueba usando técnicas estándar, pero que ciertamente hubieran requerido una gran cantidad de trabajo para hacerlo.

sclv
fuente
12

Usted cree que el código debe publicarse, pero pregunta por qué los documentos no incluyen el código. Estas son dos cosas diferentes.

La mayoría de las veces, simplemente no hay suficiente espacio para publicar una cantidad significativa de código. En mi campo de investigación (procesamiento de imágenes), la información de pseudocódigo o arquitectura a menudo es mucho más valiosa y nunca me he quedado atrapado debido a la falta de código en un documento. A menudo se deja como un ejercicio para el lector que entendió el artículo.

Sin embargo, hay mucho código disponible para ilustrar los documentos. Los autores generalmente tienen una página web e incluso si el revisor no tiene la oportunidad de probar y verificar el código en sí, la selección natural parece funcionar bastante bien y los autores que no publican el código son mucho menos citados.

sam hocevar
fuente
8

Esto ya podría haber sido preguntado hace algún tiempo, sin embargo, siempre me he sentido muy convencido al respecto, así que daré mis dos centavos. He trabajado durante años (ya no) dentro de la comunidad SAT. La mayoría de los investigadores rara vez publican su código. El documento se publica junto con el algoritmo, pero es muy raro ver el código real del solucionador SAT (solucionador MAXSAT), etc., publicado junto con el documento.

Y la realidad es que con solo el código publicado en el artículo, nunca tendrá la oportunidad de reproducir los experimentos del autor. No solo porque el código publicado no está completo (por supuesto) sino también porque incluso el pseudocódigo publicado rara vez se traduce semi-directamente en lo que realmente se implementa.

La razón detrás de esto es difícil de conocer y puede depender de un investigador a otro, pero sobre todo es doble.

  • Primero, el investigador tiende a trabajar continuamente en un único solucionador publicando documentos después de los documentos sobre el mismo solucionador y agregando gradualmente nuevas características que se traducen en nuevas versiones del solucionador. Existe una obsesión poco saludable de que la competencia utilizará su solucionador para avanzar en sus carreras extendiéndola y publicando documentos sin otorgarle el debido crédito (es decir, coautoría).

  • En segundo lugar, algunos códigos realmente se escriben (como con todo el software) a toda prisa. Guiones a medio hornear. Características no probadas, etc. Al publicar este código, el investigador sentiría que se avergonzaría y dañaría su reputación.

Os dejo con una referencia reciente sobre esto de ACM: http://cacm.acm.org/magazines/2011/5/107698-the-importance-of-reviewing-the-code/fulltext

Paulo Matos
fuente
7

Históricamente, los artículos científicos tenían que imprimirse en papel, y las revistas se enviaban internacionalmente. Cada página adicional solía agregar un costo significativo, por lo que los artículos estaban sujetos a limitaciones de longitud, e incluso el código de trabajo simple generalmente ocupa mucho espacio que una descripción informal.

Hoy no hay una buena razón para no incluir código en ningún tipo de artículo que haga referencia a un algoritmo.

También puede ser útil abandonar los formatos orientados a la impresión como pdf y postscript en favor de formatos más semánticamente conscientes (HTML con MathML o tal vez una variación de código abierto de Mathematica).

Antonio Valerio Miceli-Barone
fuente
8
+1 para los primeros dos párrafos, -1 para el último párrafo. Puedes quitarme mi LaTeX cuando lo quites de mis manos frías y muertas.
Jeffε
2
Ahora hay muchas herramientas disponibles para habilitar la programación alfabetizada de LaTeX ...
sclv