以下经验法则是在实证格拉米安框架 (emgr) 开发过程中产生的,这是一个年轻的开源软件项目,位于明斯特大学数值分析与科学计算工作组,该工作组隶属于明斯特大学,目标是用于控制系统的算法模型降阶。emgr 是用经常被——而且是被错误地——轻视的MATLAB 编程语言编写的,该语言以其几乎伪代码般的语法,易于理解且性能良好。以下指南,其中许多与科学代码宣言相关,是从 MATLAB 的角度给出的,但它们也适用于其他编程语言和环境。
查看开放政府周文章的完整合集
1. 保持兼容性
emgr 与 MATLAB 编程语言的两个主要解释器兼容:Mathworks MATLAB 和 GNU Octave,并且使用额外的实用程序脚本,也与 Freemat 兼容。虽然 MATLAB 在许多情况下性能更好,但 Octave 提供了开源替代方案,因此可以在完全开源的堆栈(例如 Linux 上的 Octave)上运行 emgr。就我个人而言,我认为 MATLAB 编程语言受益于这种专有与开源的竞争。Octave 让 Mathworks 保持警惕。
2. 保持可用性
当然,emgr 代码可以从项目网站获得,也可以从 GitHub 存储库、Zenodo 和 MATLAB Central Fileexchange 获得。这曾经为每次发布创造了一些工作,但随着 Fileexchange 和 Zenodo 的 GitHub 集成,它变得越来越容易。除了这些便利功能之外,所有应该可维护的代码都应该受到某种版本控制,例如 git。
3. 保持可重现性
通过提供源代码以及结果,更容易展示这些结果。一个促进可重现性的平台是 runmycode,可以将随出版物一起发布的代码存放在该平台上。此外,人们无需担心确保此特定代码的可用性。
4. 保持简洁
总的来说,emgr 源代码大约有 400 行长,并且不应该增长太多。emgr 的设计类似于 应用程序,专注于一项特定任务。由于其精简的代码库,在两个小时内,就可以向一位经验丰富的程序员解释整个程序和所有功能。
5. 保持快速
盲目地“调整”代码很少能加快计算时间。对于 emgr,如果没有事先咨询统计或仪器分析器,就不会进行性能优化;MATLAB 和 Octave 都提供了这样的工具。此外,许多性能泄漏已经通过像 mlint 这样的静态代码分析器暴露出来。
6. 保持信息丰富
文件或函数标头可以密集地 packed with documentation 和 元信息。除了必要的作者、许可证、版本和项目网站链接外,关于参数和返回类型、其他选项、相关文档或函数、引用提示和关键字的信息都可以放在标头内。
7. 保持可引用性
最后,科学中的一个重要因素是被引用。与 GitHub 一起,Figshare 和 Zenodo 最近 开始为学术软件项目提供 DOI,从而使软件可引用。此外,为了充分引用项目网站,应该参考已注明日期的快照,例如使用像 archive.today 这样的存档服务制作的快照。
评论已关闭。