程序员用代码改变世界,基于计算机硬件的迅猛发展,摩尔定律被渐渐遗忘,科学圈也受到了一系列的影响。近日,科学顶刊Nature发布文章,介绍了上世纪五十年代以来改变科学圈的十大计算机代码,当然,排名不分先后,仅供参考。
编译
八宝粥责编
张文
头图
CSDN下载自视觉中国
从Fortran到预印本,这些程序上的进步和平台给生物、气象和物理学带来了显著的提速。
如果你带着你的手机回到几十年前,就是超神一样的存在,它的计算能力比起NASA在年登月时候都强的多。然而,手握一个甚至多个手机的我们,可能极少数人会有自己的卫星和登月计划吧?(这里请马斯克同志不要发言)。
计算机在航空航天、物理学、化学、生物学等多个领域,起到了催化剂和加速器的作用。今天我们一起来看Nature上总结出来为科学变革加速的十大计算机代码。
文章选出了以下十大名码,分别是Fortran、快速傅立叶变换、生物数据库、气候一般循环模型、BLAS、NIH/ImageJ/Fiji、BLAST、arxiv.org、IpythonNotebook以及AlexNet。
语言先驱:Fortran编译器()
Fortran诞生的年代,计算机操作还需要借助打孔卡
Fortran,全称:FormulaTranslation,诞生于年。那一年,ENIAC也才11岁,那个带手机穿越回去就能当成计算之神的年代,编程真的是太太太不友好了。即使机器语言和汇编语言允许用户利用代码编程,仍然需要熟悉计算机结构,然而这样的人肯定不多。不过,IBM的工程师约翰·巴科斯(J.Backus)就给董事长斯伯特·赫德(CuthbertHurd)写信,说天天写这个太浪费青春了,我们造一个新的语言吧?董事长也是有魄力,大手一挥就决定了。
也不知道真的看到了前景还是说就是不服,反正当时的顾问冯·诺依曼的强烈反对没有用就是了。虽然就在Fortan诞生这一年诺依曼就去世了,但大神就是大神,即使在当时Fortran还没有如后来一般名扬科学圈,诺伊曼依然对Fortran表示了承认。
从那时起,计算机不再只是“计算机科学家的玩具”,其他专业的科学家们就能访问程序进行编程,也意味着科学计算、数值计算时代的到来,几十年来,Fortran在工程等数值计算领域影响巨大,直到现在还有很多流体动力学、航空航天领域依然在使用。编程语言可以被后浪赶超,却依然有自己的光芒。许多课题组的“祖传代码”就是Fortran语音写成的,NASA甚至在年招募Fortran大佬帮忙优化代码。
信号处理器:快速傅立叶变换()
既然说到Fortran就不能不说快速傅立叶变换(FastFourierTransform,FFT),那可是大大的有名呀。
年,美国数学家JamesCooley和JohnTukey提出了一种加快傅立叶变换过程的方法,使用递归方法分而治之,快速计算串行的离散傅里叶变换或其逆变换,傅里叶分析将信号从原始域转换到频域的表示或者逆过来转换。从离散傅立叶变换到快速傅立叶变换,复杂度从O[N2]优化到了O[NlogN]。如果你是电气或者自动化方向的,数字信号处理肯定是你一生难忘的课程。
这一重大发现,在数字信号处理、图像分析、结构生物学等领域均有频繁而广泛的应用。美国数学家吉尔伯特·斯特朗把FFT描述为“我们一生中最重要的数值算法”,IEEE科学与工程计算期刊也将其列入20世纪十大算法。
不过,英国牛津大学数学家尼克·特雷菲森(NickTrefethen)表示,这个方法其实德国天才数学家高斯在年就完成了,只是没有发表而已。目前该方法的潮流是西方最快的傅立叶变换(FastestFourierTransformintheWest,FFTW),是快速傅立叶变换的最快的免费软件实现。
分子编目:生物数据库()
读到这篇文章的你,想必对数据库会有一定的了解,在过去的几十年当中,数据库在生物学上的影响也是非常巨大而富有戏剧性的。
年,三位作者合著《蛋白质序列和结构图谱》,描述了当时65种蛋白质的序列、结构和相似程度。使人们对于氨基酸序列有了更深刻的了解。年启动了蛋白质数据库,如今该数据库已经能描述多个分子结构。
随着科技的进步和时间的推移,也涌现出了更新、更全面的生物学数据库。美国国家生物技术信息中心(NCBI)前主任詹姆斯·奥斯特尔(JamesOstell)表示:“这简直就是不太了解计算机和统计学的生物学家的明灯,通过对比序列我们就能了解到关于癌症的知识。”通过对数据集的整合,研究人员们还能发现更多的信息。
预测先锋:一般循环模型(年)
二战时期,天气对于交战双方而言是无法改变的事情,率先了解天气就可以占尽天时,在那个经验为主预测天气的情况下,诺伊曼创造性地采用“根据物理学定律进行数值天气预报。不过在早期,这些实际问题无法准确解决,算力和算法均无法达到。
年末,冯·诺伊曼在普林斯顿建立了天气预报小组,15年后,第二个团队,也就是地球物理流体动力学实验室,开始研究“无限预测”,也就是气候建模。年,Manabe加入团队,他的同事KirkBryan也将这些用于海洋。年,他们成功地结合了二者,创造了自然界计算的里程碑。
如今,该模型已经可以将地球分成25×25公里的正方形,将大气也划分成十个层次,这比起当年来已经强了很多。
数字处理者:BLAS()
时间到了上世纪70年代,虽然矩阵和向量的计算在科学计算当中很常见了,但是还没有一套普遍认可的操作工具,于是,研究者们就开始思考如何使用代码来解决问题。他们需要一个标准!
然后就有了BLAS(BasicLinearAlgebraSubprograms)基本线性代数子程序。这是一个设计基本现行代数操作的数学标准,主要分三级,一级是向量之间或者向量与标量、常数间的运算;第二级是矩阵与向量间的操作,而第三级就是矩阵之间操作。
德克萨斯大学奥斯汀分校的计算机科学家RobertvandeGeijn说,BLAS“可能是为科学计算定义的最重要的接口”。
显微成像伴侣:NIHImage()
进入80年代,脑成像技术发展到了关键时期,由于X射线胶片数字化之后无法在计算机上显示或者分析,程序员拉斯班德(Rasband)编写了一个程序来解决问题,当时的计算机还是PDP-11,价值15万美元。苹果电脑出现后,对于医学成像的显示更加友好。
这里的NIH不是别的,而是美国国立卫生研究院(NationalInstitutesofHealth(NIH),也就是说这是有国家卫生研究院监督的。后来拉斯班德又编写了Java版本的ImageJ。在插件的帮助下,ImageJ工具可以自动识别显微镜图像中的细胞核。拉斯班德退休之后,它的团队依然保持对于该产品的维护。
序列搜索器:BLAST()
上面我们提到了BLAS,这里我们要说的是BLAST,一字之差,意义大不同。来自美国国家生物技术信息公司,全称BasicLocalAlignmentSearchTool。文章作者广告词都想好了“要搜索,找Google,用遗传,BLAST。通过研究蛋白质之间的相似性,科学家们就可以发现进化关系并剖析基因功能,因而分子信息库就至关重要了。
经历了”点对点突变“矩阵、FASTP、等等团队开发了”GeneMyers“并在多年之后提出了更强大的改进。年BLAST正式公布。搜一下,xiu的一下!这种系统给当时处于萌芽状态的基因组生物学提供了一种非常高效快捷的方法。
预印本大仓:arXiv.org()
相当长一段时间里面,科学家们相互交流的方式就是邮寄手稿,算是早期的“同行评议”,不过这种方式很容易使得一些并不有名气的人被埋没,即使天才如拉玛努金,最初寄给几位科学家的研究成果也被无视,直到哈代和利特尔伍德慧眼识珠。年,在洛斯阿拉莫斯国家实验室的金斯伯格(Ginsparg)编写了电子邮件自动回复程序,使得订阅用户能够每天收到预印本的清单,这个可以说是论文界的RSS了。
最初金斯伯格的计划是保留三个月,并限制在高能物理领域,随着他研究学科越来越广,这个系统也在年被放在了万维网上,年,正式得名arXiv.org。如今,距离最初那个邮件订阅已经三十个年头,arXiv已经有万份预印本,每月有一万五千多投稿和三千万次下载。同时,由于其良好的口碑,受到基础学科和计算机科学领域研究者们的热爱,甚至《MIT科技评论》都有一个周更的栏目——最好的arXiv物理文章(TheBestofthePhysicsarXiv)
金斯伯格表示,令人欣慰的是,三十年前被视为异端的食物,如今被广泛地接受,从这个角度来讲,也算是一个成功的研究项目。
数据浏览器:IPythonNotebook()
Jupyternotebook对于初学Python的朋友简直是一个无比友好的存在,它能显示Markdown,也能显示并执行代码,比传统的交互式和全脚本执行更加清晰和简便,而它的前身就是来自费尔南多·佩雷斯(FernandoPérez)发明的IPythonNotebook。
年的佩雷斯还在读研还是读博,作为Mathematica和MAPLE的重度用户,他决定给Python一个更好的展现交互的平台。由于Python并不是为科学计算创建的语言,用户在预加载模块和保持数据可视化状态上存在很多障碍,因此他就自己写就了IPython,年12月,这个“交互式”的Python解释器单程了,总共行。
十年之后,他和物理学家布莱恩·格兰杰(BrianGranger)和数学家埃文·帕特森(EvanPatterson)合作,将该工具迁移到Web浏览器。从此,Python也有了自己的笔记本,年,它演变成了一个项目ProjectJupyter,支持多种语言,用户就可以在自己的笔记本上远程访问超算的算力和数据了。
年,《自然》文章报道,Jupyter已经成为了数据科学家的标准,GitHub上的Jupyternotebook也已经超过千万,包括记录引力波和黑洞成像的那些。
快速学习者:AlexNet()
人工智能有两种,一种使用编码规则,一种使用计算机通过模拟大脑的结构来学习。几十年来人们一直忽视后者。直到年,欣顿(Hinton)的研究生亚历克斯(AlexKrizhevsky)和伊利亚(IlyaSutskever)在ImageNet的比赛中发挥出色,在包含百万个日常对象的图像中训练出的AlexNet能将错误率降低到16%,这是通常人工智能算法的一半。
他们的成功也点燃了包括数据集、硬件设备和GPU等的飞跃,突然之间,人们发现可以将算法的运行速度提升几十倍。这些生理预示着深度学习在实验室、诊所等领域的兴起。如今手机也能理解语音查询、图像分析工具也能帮助细胞筛选。AlexNet引领了人工智能界许多工具的质变。
文章最后,还特意做了一个调查,选出对你影响最深的3项工作。
截至目前为止,Fortran编译器以42.8比35.5的比重领先第二名FFT,选择“其他”选项的也占有较大比例。结果见下图:
显然,在众多读者的眼中,Fortran和FFT的地位举足轻重,这些重要的代码,改变了科学界,也改变了世界。你是否也有一个用代码改变世界的梦想呢?欢迎下方留言评论,对你影响最大的代码是哪些?你最得意的事情是用代码做了什么?
参考资料: