从Fortran到arXiv.org, 计算机程序和平台的进步,令生物学、气候科学与物理学突飞猛进。在2019年,事件视界望远镜向世界首次揭开了黑洞的神秘面纱。但我们看到的那个发光环形黑洞图像并不是直接拍摄得到的,而是利用来自于美国、墨西哥、智利、西班牙和南极的射电望远镜所捕获的数据,通过复杂的数学变换和计算处理而得到的。
在发布结果的同时,该团队也公开了实现这一突破性成就的代码,使得科学界详细理解其实现过程,并以此为基础更深入地研究。
从天文学到动物学,这样的研究模式在各个学科中越来越趋于普遍:在现代每一项重大科学发现的背后,总有计算机的身影。
加州斯坦福大学的计算生物学家Michael Levitt由于在化学结构建模的计算策略方面做出的杰出贡献而分享了2013年的诺贝尔化学奖,他提及自己在1967年刚开始这项工作时,实验室电脑的内存和计算性能只有不到现在笔记本电脑的万分之一。他说:“虽然我们现在已经掌握了强大的计算资源,但思考的重要性并没有丝毫减弱。”这就需要科学家兼程序员。
如果没有可以处理研究问题的软件,没有知道如何编写并使用程序的研究人员,再强大的电脑也会显得毫无用处。
Neil Chue Hong是总部位于英国爱丁堡的软件可持续性研究所的负责人,该研究所主要致力于持续改善科学软件的研发和使用,Neil说:“现在的科学研究基本都会运用软件来进行,它们已经渗透到了研究的方方面面。”
尽管这样的列表并非绝对,但在过去一年里我们调研了大量研究人员,汇总了不同领域内对科研带来巨大影响的的十大软件工具。
编程语言先驱者:Fortran编译器(1957)
第一台现代电子计算机对于用户并不友好。编程需要通过手动逐个链接电路来完成。虽然随后的机器语言和汇编语言迅速发展,可以让用户通过代码进行编程,但依然需要对计算机体系结构有着深入的理解,这阻碍了许多科学家使用计算机的效率。随着20世纪50年代符号化语言的发展,效率慢慢提高,尤其是“公式翻译”语言Fortran的出现改变了这一局面。
Fortran语言是由John Backus与其在加州圣何塞的IBM团队开发的。用户可以利用Fortran中人类可读的指令来编程,例如编写x=3+5的计算公式,随后编译器就可以将其转化为快速高效的机器代码。这台CDC 3600计算机于1963年送达位于科罗拉多州博尔德的国家大气研究中心,它可以在Fortran编译器的帮助下进行编程。
但编程仍然不是一件容易的事情:早期的程序员使用打孔卡来输入代码,稍微复杂点的模拟就需要上万张打孔卡来编写程序。但新泽西普林斯顿大学的气候学家Syukuro Manabe表示,Fortran为非计算机科学家的研究者提供了一种高效的编程手段。“我们第一次可以自己对计算机进行编程”,Manabe说。他和同事们利用Fortran开发了第一个成功的气候模型。
如今,Fortran已经进入了第八个十年,它依旧广泛应用于气象建模、流体力学、计算化学和其他需要复杂线性代数与强大计算能力的学科。其生成的代码运算高效,依然有很大比例的程序员会使用Fortran。中古Fortran代码库仍然活跃在全球各地的超级计算机和实验室中。
信号处理器:快速傅立叶变换(1965)
当射电天文学家扫视天空时,他们会捕获到一系列随时间变化的复杂信号。为了理解这些电波的本质,他们需要看到这些信号转成频率方程是什么样的。研究人员可以使用一种被称为傅立叶变换的数学过程来完成这一过程,问题在于它的效率很低,一个N大小的数据集需要N²的计算量。
但在1965年,美国数学家James Cooley和John Tukey发明了一种方法来加速这一过程。
使用递归,一种“分而治之”的编程手段(算法可以重复调用自身),快速傅立叶变换(FFT)可以将傅立叶变换的计算降低到N log₂(N)步。计算速度随着数据集的增大而增加,1000个数据点的情况下速度提升100倍,而对于一百万个点的情况则可以提速5万倍。英国牛津大学的数学家Nick Trefethen说,这其实是一次重复发现——德国数学家高斯在1805年曾提出过这个算法,但他并未发表。
然而,Cooley和Tukey为数字信号处理、图像分析、结构生物学等等领域打开了广阔的应用空间。
分子编目:生物学数据库(1965)数据库是当代科学研究不可或缺的部分,但人们很容易忽略它是由软件驱动的。在过去几十年里,这些资源得到了大规模的扩充,并改变了许多领域的研究方式,但或许没有哪个领域能像生物领域一样出现了翻天覆地的变化。
当今大规模的基因和蛋白质数据库,源于马里兰国家生物研究基金会的生物信息学先驱Margaret Dayhoff的工作。20世纪60年代初,生物学家们致力于揭开蛋白质的氨基酸序列结构,Dayhoff开始整理这些信息,寻找不同物种间演化关系的线索。她与三位合作者合著的《蛋白质序列和结构图集》于1965年首次发表,描述了当时已知的65种蛋白质序列、结构及其相似性。
天气预报领导者:大气环流模式(1969)
在二战结束时,计算机先驱冯·诺伊曼将战时用于计算弹道计算和武器设计的技术转向天气预报的研究。Manabe说:“在那之前,天气预报都是依赖经验的,而冯·诺伊曼的团队则希望利用物理定律来实现数值天气预报。”
数值计算加速器:BLAS(1979)
科学计算通常利用向量和矩阵进行相对的简单数学运算,但计算量还是很大。而在上世纪70年代,科学界缺乏一套通用的计算工具来执行这些运算。于是,1979年,出现了基础线性代数程序集(Basic Linear Algebra Subprograms, BLAS)。这一标准一直发展到了1990年,为向量和后来的矩阵数学定义了一系列基本程序。
必不可少的显微镜:NIH Image(1987)
在上世纪80年代早期,程序员Wayne Rasband曾在马里兰贝塞斯达的美国国立卫生研究院脑成像实验室工作。其团队有一个可以对X光胶片进行数字化处理,但没办法在计算机上分析和显示。Rasband编写了一个程序来实现这一功能。该程序是专门针对价值15万美元的PDP-11微型计算机设计的。
序列检索器:BLAST(1990)
一个软件名从名词变成动词,这真是恰如其分地说明了其文化重要性。在搜索界有Google,而对于基因领域来说,人们则会想起BLAST。演化变化以替代、敲除、空缺和重排等形式刻在分子序列上。通过搜索序列(特别是蛋白质)之间的相似结构,研究人员能发现其间的演化关系,更深入理解基因的功能。
预印本发电厂:arXiv.org(1991)
上世纪80年代末期高能物理学家通常会将论文副本寄给同行,征询意见,同时也是一种礼节——不过仅发给少数几个。1991年,在新墨西哥州洛斯阿莫斯实验室工作的Ginsparg编写了一个电子邮件自动回复系统以推动这一领域的公平发展。订阅者将会收到每日的预印本论文,每篇文章都会被分配一个固定的文章识别号。
数据探索利器:IPython Notebook(2011)
2001年,当Fernando Pérez还是“寻找拖延症”课题的研究生时,他决定着手开发一个Python的核心组件。Python是一种解释型语言,这意味着它需要逐行执行。Pérez于2001年12月发布了这一共259行的版本。
十年后,Pérez与物理学家Brian Granger、数学家Evan Patterson合作,将这一工具移植到了浏览器中,开发出了IPython Notebook,掀起了数据科学的革命浪潮。
高速学习机:AlexNet(2012)一直以来人工智能(AI)存在两种不同的实现形式。一种使用编码规则,而另一种则使用计算机通过模拟大脑的神经结构去“学习”。
直到2012年,Hinton的研究生Alex Krizhevsky和Ilya Sutskever在证明了并非如此。Krizhevsky和Sutskever提出的AlexNet是一种基于神经网络的“深度学习”算法,将错误降低到了16%。这些成果预示着深度学习在实验室、工业界的崛起,这就是为什么手机可以理解语音查询、图像分析工具可以迅速从光学显微镜图像中挑选出细胞。
参考文献:
[1]. The Event Horizon Telescope Collaboration et al. Astrophys. J. Lett. 875, L1 (2019).
[2]. Braig, K., Adams, P. D. & Brünger, A. T. Nature Struct. Biol. 2, 1083–1094 (1995).
[3]. Strasser, B. J. J. Hist. Biol. 43, 623–660 (2010).
[4]. Newmark, P. Nature 304, 108 (1983).
[5]. Manabe, S. & Bryan, K. J. Atmos. Sci. 26, 786–789 (1969).
[6]. Lawson, C. L., Hanson, R. J., Kincaid, D. R. & Krogh, F. T. ACM Trans. Math. Software 5, 308–323 (1979).
[7]. Ginsparg, P. Preprint at http://arxiv.org/abs/1108.2700 (2011).
[8]. Nature Photon. 6, 1 (2012).
[9]. Nature 563, 145–146 (2018).
[10]. Krizhevsky, A., Sutskever, I. & Hinton, G. E. in Proc. 25th Int. Conf. Neural Information Processing Systems (eds Pereira, F., Burges, C. J. C., Bottou, L. & Weinberger, K. O.) 1097–1105 (Curran Associates, 2012).