18 votos

¿Cómo distribuir la fuente de los programas utilizados en un trabajo?

He escrito un artículo, que incluye un apéndice en el que se explica cómo obtener pruebas numéricas del resultado del artículo. Ahora el cálculo funciona esencialmente como sigue:

  • Crea una matriz tridiagonal grande.
  • Calcula sus valores propios.
  • Calcula la diferencia de los valores propios consecutivos y la devuelve.

La implementación de un algoritmo de este tipo es bastante sencilla, pero para poder analizar matrices grandes, empecé a utilizar algoritmos de un paquete llamado LAPACK que resultó ser más rápido que los algoritmos normales de Matlab. (No soy especialista, así que no estoy muy seguro de lo que ocurre).

Tengo curiosidad por saber si se debe proporcionar el código fuente de un cálculo de este tipo y, en caso afirmativo, de qué forma. Se me ocurren las siguientes opciones:

  • Pseudocódigo (como arriba)
  • Matlab simplificado, que funciona con cualquier instalación de matlab, pero es demasiado lento para hacer realmente los cálculos.
  • El código real, que la mayoría de la gente no podrá hacer funcionar sin cierto esfuerzo.

También tengo curiosidad por saber si se debería incluir algún tipo de código fuente en el documento y, en caso afirmativo, de qué forma. O qué ha hecho la gente en tal caso...

El código simplificado está disponible en: http://math.rice.edu/~hk7/ftp/matlab_code/SkewSpecDense.m

No he puesto el código real en línea, porque requiere paquetes externos, y no estoy seguro de lo fácil que es instalarlos...

12voto

maclema Puntos 5959

Incluya el código fuente como archivos auxiliares cuando lo envíe al ArXiv. Es una ubicación más permanente y segura que tu propia página web. En el artículo real sólo hay que poner el pseudocódigo y un enlace a la fuente ArXiv.

Si tienes mucho código, ese enfoque no funcionará y tendrás que alojarlo tú mismo.

Véase http://arxiv.org/abs/1007.1730 para un ejemplo de cómo Scott y yo tratamos este tema, hay un ejemplo trabajado bastante extenso para que la gente pueda averiguar cómo comprobar la salida del programa localmente por su cuenta. Allí tenemos un enorme paquete que hemos escrito y que el programa utiliza, así que tenemos un servidor configurado del que cualquiera puede descargar el paquete.

12voto

Bill Thurston Puntos 19407

Usted debe hacer las tres formas disponible públicamente: pseudocódigo, código simplificado y código de trabajo, con la mayor cantidad posible en el arXiv u otro sitio de mantenimiento público. Sin embargo, no creo que el almacenamiento permanente de la trabajando código es una cuestión tan central como lo es para los artículos de investigación, ya que los entornos informáticos evolucionan con rapidez. Lo más importante es preocuparse por su disponibilidad durante, digamos, 10 años (pero el pseudocódigo, de forma más permanente).

El almacenamiento en línea es extraordinariamente barato. No veo motivos para escatimar. Lo único que hay que tener en cuenta es la organización, para que la gente entienda lo que hay y sepa qué versión (si la hay) quiere. Los tres formularios sirven para fines distintos. Aunque nadie descargue nunca la versión completa, a usted o a alguien sólo le cuesta unos céntimos, e incluso puede reducir su tiempo y molestias el mero hecho de proporcionarla.

A veces hay una tarea computacional que alguien quiere realizar y que no es más que un paso en un proyecto mayor. La programación suele consumir bastante tiempo por idea, incluso si se tiene muy claro lo que se está haciendo, y la habilidad y la velocidad de programación varían mucho de una persona a otra. Debes ponérselo lo más fácil posible para que puedan hacer uso de tu trabajo.

A veces la gente está pensando en resolver problemas relacionados en los que el código no será directamente útil, pero las ideas pueden serlo, y a veces la gente sólo quiere comprobar si lo que estás haciendo es correcto. El pseudocódigo es mucho mejor en estos casos.

A veces la gente quiere utilizar el código, pero no tiene instalada tu infraestructura. Para estas personas, es bueno proporcionar una forma despojada que no requiere mucho para empezar --- una vez que lo tienen trabajando en alguna forma de bebé, pueden añadir en las bibliotecas externas, o tal vez optimizar de diferentes maneras. Tal vez incluso lo mejoren.

9voto

radpin Puntos 121

Mi preferencia es el pseudocódigo detallado, a un nivel de abstracción lo suficientemente alto como para permitir la comprensión del algoritmo.

Por supuesto, como señala el comentario de Ryan Budney, depende mucho de cuáles sean los requisitos de la revista y en qué revista publiques. Sin embargo, creo firmemente que el conjunto de código completo que se utiliza debe estar disponible en algún recurso, ya sea a través del editor del artículo de la revista, o de su propio sitio web, su sitio web académico, oa través de Arxiv.

Si el pseudocódigo es lo suficientemente detallado como para que otro matemático pueda reimplementar el algoritmo sin problemas, debería ser suficiente.

Si el pseudocódigo tiene que omitir ciertos detalles que son relevantes para el cálculo, entonces el código interpretado que implementa el algoritmo en un paquete de cálculo numérico (como Maple, Matlab, Sage o Octava o Scilab ( enlace de descarga ) que son paquetes de software libre de código abierto capaces de ejecutar código similar o equivalente a matlab).

¿Por qué no ofrecer ambas cosas? -- Si usted puede proporcionar un enlace a su propia página web para el documento, o para sus materiales complementarios de apoyo, no veo por qué no podría proporcionan el código interpretado y el código compilable en C o C++ en tu página web, a menos que haya problemas de derechos de autor, por ejemplo, si no has escrito todo el código tú mismo y no tienes derecho a publicar todo el código fuente. Soy partidario del software libre de código abierto y del Gnu de la organización Licencia GPL lo que permitiría a otros beneficiarse de su código y contribuir a él mediante mejoras incrementales.

Le sugiero que especifique qué versión del paquete de software, sistema operativo, compilador y/o biblioteca que utilizó para ejecutar su programa o para crear la aplicación binaria a partir de su código. Esto es necesario porque diferentes versiones de Octave (2.3 vs. 3.0) o Matlab (R10, R13, etc.) o cualquier paquete de software puede implementar o incluir diferentes rutinas y no ser capaz de ejecutar correctamente su programa de software.

Le recomendaría que si son necesarios determinados paquetes para ejecutar el código interpretado en Octave o Matlab, indique de qué paquetes se trata. En la misma línea, si su código C o C++ requiere librerías particulares como LAPACK o BLAS, asegúrese de listarlas en un fichero de texto o en un fichero de cabecera. Si sabes cómo utilizar el escriba a puede crear un makefile para ayudar a otros a compilar su software.

En escriba a la colección de compiladores Gnu y muchas otras herramientas de desarrollo forman parte de las distribuciones Gnu/Linux, como Debian.

Mi preferencia es el pseudocódigo detallado, a un nivel de abstracción lo suficientemente alto como para permitir la comprensión del algoritmo.

9voto

William Stein Puntos 2048

Una opción podría ser incluir su código en Sage: http://sagemath.org/development.html El código que se incluye con Sage es revisado por expertos y existen normas de comprobación y documentación. Además, el código debe funcionar en una amplia gama de plataformas y seguir haciéndolo en las nuevas versiones. Tenga en cuenta que Sage incluye LAPACK, pero por supuesto Sage es de código abierto por lo que no incluye MATLAB, por lo que distribuir con Sage puede no ser una opción para usted.

Existe un directorio en la biblioteca principal de Sage dedicado al código que no está destinado a ser utilizado de forma habitual por los usuarios de Sage, sino que está relacionado con artículos publicados.

8voto

sickgemini Puntos 2001

En mi opinión, es absolutamente necesario distribuir la fuente real en alguna parte. Es una prueba importante de sus afirmaciones. Seguro que el 95% de tus lectores confiarán en que los resultados son como dices, pero el 5% que quiere comprobar o ampliar tu trabajo es el que más te importa.

La mayoría de los autores que he visto ponen la fuente en sus páginas web personales y proporcionan una URL en el artículo. Si su trabajo va a aparecer en una revista que publica regularmente artículos de cálculo intensivo, podría ver cuál es su práctica habitual.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X