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