龙五?龙舞!分享 http://blog.sciencenet.cn/u/DaCaiNiao 行踪常在云霄外,天下英豪我第一

博文

如何姿势正确的使用他人代码? 精选

已有 5463 次阅读 2017-8-18 09:34 |系统分类:观点评述

   按惯例讲正事儿之前,得先说几句无关的废话,简称“惯正几废”。在很久很久以前,呃,其实也没有那么久,那是2003年的事情。那时候我刚读研究生一年级,一个学年即将结束,暑假没有杂事自然是继续加班。在过去的一整年里,我主要忙一件事情:绘制动点(kinetochore)蛋白质之间的相互作用网络。动点是细胞中重要的蛋白质超级复合物,在细胞有丝分裂期间分别组装在染色体两侧的着丝粒(centromere)上,负责连接染色体和微管,从而使得姐妹染色单体能够在有丝分裂的后期顺利的分离到两个子细胞里。那时,蛋白质-蛋白质相互作用是整个生命科学领域最蜜汁热门的研究方向之一,我的导师很希望搞清楚那时已经发现的上百个动点蛋白质之间究竟怎样相互作用。作为当年实验室里唯一一个做生信的学生,这个任务自然落到了我头上。事实上在当时我的生信研究能力基本接近于零,除了满腔热血和用不完的精力,连个三脚猫的功夫也还没有入门。因此这个问题,对于当时的我来说,几乎是无解的。

所以我思考了半年之后,终于在暑假之前解决了这个问题:在PowerPoint里手工绘制网络。对,你没有看错,手绘。虽然看起来乱糟糟的,但怎么说我也完成任务了不是?所以当我高高兴兴把画的密密麻麻的网络图拿给老板看的时候,我猜想,导师会不会瞬间有种烈日灼身的感觉?老板看了很久,问了一个问题,那如果有新的蛋白质加入,你打算怎么办?我毫不犹豫地答:重新画一张。老板听了这话当真是虎躯一震,瞪了我半天不说话。我一看,得,老师不满意,那重新来吧。所以整个暑假就在忙这件事情,等到暑假结束的时候,冷不丁的读到一篇Bioinformatics上的论文,是一位德国学者Ralf Mrowka设计了一个JAVA Applet小程序,用来显示蛋白质相互作用网络。所以我就给作者写信,说你这个程序挺好,我能不能拿来处理我的数据?保证引用。回信:尽管用(Please feel free to use the applet with your own data)。后来我就拿这个程序绘制了动点蛋白质的相互作用网络,拿给老板看,这回老板看起来比较满意,然后提了两个问题,第一是他觉得网络节点的颜色不太好看建议我换一种;第二是他感觉节点太小,问能不能改的大一些。这两个问题直接用人家程序解决不了,必须得改他的代码。所以我又写信给作者,说要您这源代码行不?只用来从事学术研究。回信:用呗。代码不长,总共也就1000行左右,咱拿过来按照需求在相应的地方做了修改,然后再编译一下,然后就顺利完成了老板交代的任务。

这个程序我一直很喜欢,并且保留至今。今天写博客翻到以前的信件,顺手还查了一下Ralf Mrowka的信息,发现这位仁兄已经是德国耶拿大学(Universität Jena)的教授了。找了一下他现在的联系方式,写了封信过去感谢一下。在后来的学术研究中,这个程序我用过几次,包括人类蛋白质相互作用预测工具hsPPIP的构建,以及激酶-底物磷酸化网络模拟等。其中第一篇文章里没有致谢但有引用,为“We also adopt a Java applet program [7] (a modified version for hsPPIP)…”这个参考文献7就是Ralf的论文,而且我也注明这是“modified version”。第二篇文章里没有引用,主要是因为网络的可视化不是论文的主要内容,正文里也没有体现,所以在致谢里专门加了一句:“We thank Dr. Ralf Mrowka (Charite, Germany) for providing a Java applet for visualizing protein-protein interaction”。因此,在我的程序里,关于蛋白质相互作用网络的可视化部分,这不是代码相似,而是我就是在人家代码的基础上改出来的。因为用了别人的代码,所以要么引用要么致谢,做研究咱得遵守学术规范啊。

================================================

讲完废话,咱讲正事儿。前几天咱写了篇博客《BMC Systems Biology没有学术不端》,主要是讲了一篇2013年发表在BMC Systems Biology上的工作ppiPre,使用了Y同学设计的GOSemSim软件包的代码,但既没有引用也没有致谢,并且后续处理也不怎么好,所以就引发了一系列学术争议。博客贴了之后,动静不小,立马有信过来说您咋掺和这事儿呢?我说这事儿我得说,第一,Y同学这几篇文章里讲到的事情,不是个例,许多人都经历过类似的事情,既然这是个普遍的问题,我岂能视而不见?这几天也和许多朋友交流过,我不能说所有,但几乎绝大多数生信学者都碰到类似的问题,例如,C教授做了个很有新意的工作,还发布了开源代码,结果论文发表几年之后另一位教授发了类似的工作,做会议报告反复强调自己是原创。当然问题并不在于说自己是原创,而是这位教授在吹自己是原创的时候,C教授就坐在底下听这位教授说自己是原创听的脸色铁青。J教授发现了一组特异的转录调控关系,后来老外基于这篇文章验证了其中的一对转录调控关系,不引用也就算了还写文章说自己是firstJ教授写信给期刊编辑,编辑再转给作者,所以作者老老实实承认自己的错误,连个Erratum也没有这就过去了。海外的O教授,2010年做了个工具,2013年有个老外的实验室做了个类似的工具发表在顶级期刊上。后来O教授去这个老外所在的学校作报告,底下学生有质疑说O教授你不是抄别人东西吧?于是O教授很耐心的解释,你看,虽然你穿越小说看得多,但问题是我这点儿工资想穿越回三年前也付不起票钱啊。后来O教授气不过写信给期刊的编辑,编辑说我们同意你的说法,然而审稿人没提这个问题,所以我们就不出Erratum了。当然上述这几件事情那都不叫事儿,去年兄弟我参加一个会议,居然看见有人做报告用我的ppt模板。当时我周围几个朋友都震惊了,说菜鸟这不是你整天用的那个破模板吗?我后来跟朋友们解释,这个吧,咱这个模板不错的,当年结婚那会儿豆子妈嫌我做ppt用的模板太烂,专门给我做了一个,没准儿这位报告人觉得不错就拿过来用了呢,当然连个招呼都不打那是有点儿过了。所以这种事儿很多,国外比国内多得多。

第二,有人问了我一个问题,别人的代码和软件,“是调用合适,还是拷贝合适”?这也就是本篇要讨论的重点问题:如何姿势正确的使用他人的代码或软件?答:姿势要正确introduction里要有介绍,方法学里要有概括,人家论文你要引用,致谢里最好再写上感谢XX大虾仗义相助云云,这几个您总得占上一个吧?啥?一个都没有?那等着吧,看作者怎么写信来骂你。乖乖道歉估计也就骂一顿,不够乖估计Erratum是跑不了了。另外,使用他人代码是否规范,并不能按照代码相同或相似的比例来判定,GOSemSim做的是GO分析,ppiPre做的是相互作用预测,即使这两个代码相似度在99.9999999999%,那ppiPre也必然有自己独到的东西,不然如何能预测蛋白质的相互作用?所以抄袭是不存在的。同样的,RalfMrowka教授的小程序,是用来做相互作用网络的可视化,我改了他的代码来做我的研究,解决我想解决的问题,并且也得到了作者的许可,所以自然是符合学术规范。再有就是HPOSimDOSimGOSim代码相似的问题,有相似性或者有相同的地方,这是因为这三篇论文都没有涉及新的语义相似性比较方法,都是使用之前他人设计的方法,其中HPOSim用了7种方法,研究人类表型注释的相似性;DOSim用了10种,研究疾病注释的相似性;GOSim用了3种,研究基因注释的相似性。既然用了别人的方法,论文里不讲清楚他咋能过得了审稿人这一关?所以这三篇文章在方法学里,都用了相当的篇幅来介绍如何用之前他人的方法来研究自己关心的问题,并且既然都是用之前他人设计的方法,这代码如何能没有相似之处?最后,GOSim并不是一个完全原创的工作,它用的3种方法也是之前他人设计的,所以从学术上来讲,HPOSimDOSim可以不引用GOSimHPOSim也不必须引用DOSim,可以看成是平行的工作,credit应当是引用开发这些原创算法的作者。

第三,学术有争议很正常,学术不够规范也很常见,但讨论学术争议,我们应当客观,该是什么样就得是什么样。所谓的客观,就是不管谁说,这事儿的性质不会变。举个例子来说,咱读研究生那会儿,逛论坛发现一个帖子,内容是有位学生说,他一篇文章同时投了18个杂志,然后问大家这算不算一稿多投。看回复大家的队形很完整,基本上都是答:不算。我和FF教授(当时的合作者)瞪着眼看这个帖子憋到内伤,然后不约而同都回复:不算。所以这里出一道送分题:有一稿18投,众曰不算一稿多投,那究竟算不算一稿多投?

第四,我们做生信的,就是希望别人能够用自己的东西,但对自己的东西也需要有很好的保护,例如软件做出来要记得申请个著作权证书,网站、说明书和代码注释部分要写清楚使用之后得引用等等,别人用了自己的东西如果既没有引用也没有致谢那得写信去骂人,所以做研究要有耐心,没有关系的,挨个骂反正人家不占理。再有就是尽量多和同行交流、多参加学术会议,大家都知道你做了什么东西,不引用的情况就会少很多。当然如果希望完全能够避免此类事情,最好的方法是代码不开源,只放可执行文件,或者做成在线工具或数据库。例如我们组就从来不开源代码,不开源代码的原因在于,第一,我不能100%的保证我的东西不会被别人用了并且只字不提;第二,我们组设计的工具,潜在用户是实验学家而不是生信的同行,毕竟实验学家的数量要远比咱生信的人数多,实验学家不怎么编程拿源代码有何用?第三,我们对所有工具都是持续维护,用户有什么问题写信过来我们都会想办法解决,并且实现到软件里,所以代码我们自己维护,就犯不着让别人代劳了。

最后,我上一篇博文提出来之后,Y同学有回应《大学教授力挺抄袭为哪般- 回应BMC Systems Biology没有学术不端》,另一位X同学也有话说《活久见,抄袭竟是重用他人代码没有致谢?》,一件事情各人会有各人的观点,不同的观点建议结合起来看,这样会更清楚。本篇写完之后也发给几位朋友看了看,其中J教授说,

   “我们不是要去跟别人争对错,而是告诉大家怎么样处理这个事儿,下回再碰到享用别人代码的时候,该怎么做。找到一个代码你肯定要先判断,你觉得挺好的话,你要先判断他是不是开源的。如果是开源的,人家允许不允许用这些都要先判断完了,然后再修改,修改完了应该保留源代码,并且在源代码上必须要有注释,这是从哪里来的等等。然后文章中致谢也好,引用也罢,这些都应该做。另外,有些可能没有说明是开源代码,那就要发信去问人家我能不能用,该怎么用,这些都需要遵循原作者的意见。再有,使用代码的时候,是否有学术不端的应该这样判断,不能说我用了别人一个代码做了一个东西,我就是剽窃,这个肯定是不对的。他只要是开源的,最多就是叫做疏忽,这个应当要非常明确。”

http://blog.sciencenet.cn/blog-404304-1071612.html

上一篇:BMC Systems Biology没有学术不端
收藏 分享 举报

15 马省伟 赵克勤 杨正瓴 岳东晓 黄仁勇 文克玲 陆泽橼 张明武 周春雷 邹斌 李毅伟 刘永鑫 xlsd dachong99 ychengwei

该博文允许注册用户评论 请点击登录 评论 (10 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备14006957 )

GMT+8, 2017-9-23 10:00

Powered by ScienceNet.cn

Copyright © 2007-2017 中国科学报社

返回顶部