26

在我丰富的空闲时间,我与许多科学家(主要是生物学家)合作,他们开发与他们所做的工作相关的软件、数据库和其他工具。

通常,这些项目是一次性构建的,在内部使用,最终有人决定“哦,这可能对其他人有用”,因此他们发布二进制文件或在其上添加一个 PHP 接口并将其推到网。但是,他们通常不会费心将他们的源代码或数据库转储提供给其他开发人员,因此在实践中,这些项目通常会在为其编写代码的项目结束或失去资金时终止。几个月(或几年)后,其他一些实验室需要相同类型的工具,他们必须重复第一个实验室所做的工作,项目最终会失败,起泡,冲洗,重复。

对于如何说服主要工作不是编程的人,让他们对自己构建的工具更加开放,这对他们的社区有益,有什么建议吗?

同样,关于如何传达版本控制、错误跟踪、重构、自动化测试、持续集成和其他我们专业开发人员认为理所当然的常见做法是值得花时间研究的好想法的任何建议?

不幸的是,许多科学家似乎认为编程是一种枯燥、必要的恶作剧,他们的研究更为重要,没有意识到现在软件开发是科学研究的一部分,如果社区作为整体来说,提高发展标准的门槛,人人都会受益。

你有没有遇到过这样的情况?什么对你有用?

4

15 回答 15

17

Software Carpentry听起来很符合您的要求:

概述

许多科学家和工程师一生中大部分时间都在编程,但只有少数人被教导如何做好这件事。结果,他们把时间花在与软件搏斗上,而不是做研究,但不知道他们的程序有多可靠或高效。

本课程深入介绍了科学家和工程师的基本软件开发实践,可以将他们花费在编程上的时间减少 20-25%。所有材料都是开源的:任何人都可以出于教育或商业目的免费使用它,并且积极鼓励学术界和工业界的研究小组对其进行调整以适应他们的需求。

于 2009-08-05T19:56:19.133 回答
9

让我先说我是一名生物信息学家,所以我看到你一直在谈论的事情。有一些事实是,这些人中的许多人都是生物学家出身的程序员,他们只是没有接触过最佳实践。

也就是说,核心问题不是这些人不知道好的做法,或者不关心。问题是他们没有动力花更多的时间学习软件工程,或者清理他们的代码并发布它。

在学术研究环境中,您的声誉(以及您未来的工作前景)几乎完全取决于您所贡献的出版物的数量和质量。关于方法或新算法的出版物不像那些报告新生物学发现的出版物那样受到尊重。因此,在我对数据集进行快速分析之后,我几乎没有动力花大量时间清理我的代码并发布它,那时我可以转移到下一个数据集并进行更多的生物学发现。

我还要指出,用于计算开发的可用资金比用于生物学的可用资金少几个数量级。在只有 10% 的已提交拨款得到资助的情况下,科学家们没有时间花时间清理和发布他们的代码,而这样做并不能帮助他们保持实验室的资金支持。

所以,一言以蔽之,问题就来了。作为一名生物信息学家,我认为这是不正当的,而且常常令人沮丧。

也就是说,未来还是有希望的。特别是随着第二代和第三代测序,生物学正在进入高通量发现领域,其中数据挖掘和可靠的计算管道成为科学成功不可或缺的一部分。当这种情况发生时,你会看到越来越多的资金用于计算项目,越来越多的真正的软件工程正在发生。

于 2009-08-06T23:56:39.153 回答
7

这并不简单,但通过示例进行演示可能会最有效地说明这一点 - 找到研究人员需要完成的任务,找到确实花时间制作工具的人,并指出研究人员需要多少时间由于该工具可用,因此可以节省 - 然后指出他们可以以同样的方式回馈社区。

于 2009-08-05T19:38:07.627 回答
5

实际上,除了他们选择的职业之外,您要求他们做的就是成为专业的开发人员(利用他们丰富的空闲时间)。他们的不情愿是可以理解的。

于 2009-08-05T19:40:12.223 回答
5

对于如何说服主要工作不是编程的人,让他们对自己构建的工具更加开放,这对他们的社区有益,有什么建议吗?

放弃。说真的,这就像教猪唱歌一样。(我可以这么说是因为我曾经是一名物理学家,所以我知道他们是什么样的。)

真正的问题是,你的同事会因为以出版物而非软件衡量的科学产出而获得奖励。在计算机科学中,要在构建软件方面获得认可已经够难的了;在其他科学领域,这几乎是不可能的。

你不能以“它对你有好处”为由向你的生物学朋友推销好的开发实践。他们会问“我应该投入精力学习良好的软件实践,还是应该投入同样的精力来发表另一篇生物学论文?” 没有比赛。

于 2009-08-05T20:03:11.523 回答
4

也许从学术/知识责任的角度来构建它在一定程度上会有所帮助——在很多方面分享你的资料,就像正确引用你的资料或详细说明你的研究方法一样。对于您希望鼓励的一些“专业软件开发人员”行为,也有类似的论据,尽管我认为基于这些理由发布代码可能比其他可能需要更多工作的事情更容易推销。

于 2009-08-05T20:14:03.857 回答
3

一方面,我们可以停止教授生物学家 Perl 吗?教非专业程序员一门只写语言实际上肯定会导致无法维护、丢弃的代码。Python 填补了同样的空白,同样易于学习(它甚至被用来教孩子编程!),并且更具可读性。

于 2009-08-07T00:10:37.160 回答
3

实际上,根据我的经验,要求任何忙碌的项目团队在他们的日程安排中包括让他们的软件适合其他团队采用的时间是非常困难的。

为公共利益做额外的工作是一个很大的要求。

在项目完成后,我看到了一种常见的“收获”模式,这反映了为重用而立即编码往往会在当天的紧迫性中丢失。

我能想到的唯一途径是,如果重用是在一个预算为“狩猎采集者”的组织内进行,这个人的存在原因是 IT。

您可能会更喜欢单元测试之类的东西,因为它们可以立即为开发带来回报。

于 2009-08-05T19:38:21.400 回答
3

与统计数据相提并论。统计数据是科学研究的重要组成部分,唯一明智的建议是:要么学会正确地做,要么让专家为你做。不正确的统计数据可以完全破坏一篇论文,就像写得不好的代码可以完全破坏公共数据库或网络资源一样。

PS:这个博客非常好,但让他们阅读将是一场艰苦的斗争:为科学家编程

于 2009-08-07T10:17:41.820 回答
3

克里斯,

我在一定程度上同意你的观点,但根据我的经验,最终发生的事情是,在他们急于发表你的文章中,你最终得到了太多“我也是”的代码和方法,这并没有真正增加科学的质量。如果更多地考虑开源代码并鼓励其他人做出贡献(不一定要从中获得出版物),那么每个人都会受益。

绝对同意科学程序员和软件工程师之间的分离是一件好事,特别是对于生产应用程序。但即使对于科学编程,如果我当时遵循良好的实践,我的代码质量也会好得多。

于 2009-08-17T04:20:14.173 回答
3

根据我的经验,让人们干净地编程的最好方法是在与他们一起工作时展示一个很好的例子。例如:“我从来没有在无望的日子里调试我的代码,因为我编写的第一件事是自动化单元测试,当问题很小且很容易检测到时,它会查明问题”或者:“我在跟踪事物的版本方面非常糟糕,但是有时我的新代码确实破坏了以前的工作。所以我使用 svn/git/dropbox 来跟踪我的事情”

以我的经验,这种陈述可以引起“学会如何编写脚本的生物学家”的兴趣。如果您需要在更大的项目上进行合作,请明确表明您拥有更多经验,并且如果按照您的方式完成,一切都会更加顺利。


关于代码的发布,目前的做法确实令人沮丧。我希望看到像 Source Code for Biology and Medecine 这样的新期刊,其中代码经过同行评审并且可以发表,但没有(或非常低)的发表成本。将代码放在 sourceforge 或其他网站上确实不“科学上值得”,因为它不会在您的出版物列表上划出一条线,而且大多数代码的革命性不足以保证支付 1,000 美元用于在 Source Code for Biology and Medecine 或 PLoS One 上发表...

于 2009-10-04T17:12:48.740 回答
1

作为魔鬼的拥护者,教科学家成为优秀的软件工程师是正确的做法吗?研究中的软件通常是针对特定目的的——有时到一段代码只需要在单个数据集上成功运行一次的地步。然后将结果输入出版物并实现目标。而且你的技术或算法很可能会在短期内被更好的技术或算法所取代。因此,存在真正的风险,即浪费在生成闪亮代码上的努力。

当您因翻阅一大堆格式错误的 perl 代码而感到沮丧时,请认为您正在查看的代码是少数幸存者之一。这样的代码堆积如山,多次使用,然后被丢弃,再也见不到天了。

我想我只是说在研究臭气熏天的一次性原型代码方面有很大的空间。存在这样的代码是有充分理由的。它可能不漂亮,但如果它完成了工作,谁在乎呢?如果证明是合理的,我们总是可以聘请软件工程师来编写生产就绪版本,然后让我们的科学家继续前进。

于 2009-08-11T04:43:08.037 回答
1

您可以让他们使用内容管理系统,例如 Joomla。这样他们只推送内容而不推送代码。

于 2009-08-05T19:37:41.323 回答
1

我不会说服太多,因为我会简化流程。清楚地记录它,制作视频教程并捆绑某种工具链,这使得设置源存储库变得非常容易,而不需要他们成为不是他们主要领域的专家。

于 2009-08-05T19:38:44.943 回答
1

找一个已经知道最佳实践的优秀程序员,请你的科学家教他他们需要什么以及他们做什么,最终程序员将拥有最少的领域知识(我怀疑这需要 1 到 3 年,具体取决于领域)科学家要求什么。

开发人员总是学习另一个能力领域,因为他们的大多数程序都不是为开发人员准备的,所以他们需要知道“客户”在做什么。

于 2009-08-06T12:44:01.610 回答