他只想更好地做科研写论文,却一不小心改变了全球程序员的命运......

01

上世纪90年代中期,正在麻省理工读硕士的吉姆来到了俄勒冈州的阿什兰,这里以莎士比亚戏剧节闻名于世。

当吉姆在一个剧院后面的公园里玩杂耍时,遇到了来自施乐PARC的一个科学家帕维尔·柯蒂斯,帕维尔也想加入,玩一个双人的杂耍。

吉姆欣然同意,两人愉快地玩了起来。

两人一边玩儿一边闲聊,帕维尔告诉吉姆他发现了一个新的编程语言:Python。

用Python写程序特别清晰,易懂,简直就是可以执行的伪代码!帕维尔他们这些搞科学研究的简直太喜欢这一点了! 

吉姆默默地把Python记在了心里。

回到MIT,吉姆开始写自己的硕士论文,论文是关于超导体和半导体相关的领域,需要大量的实验,然后用Matlab对数据进行处理,和理论模型进行对比。

吉姆发现,Matlab在数值分析方面强大得吓人,但在其他任务上糟糕透顶。

他费了九牛二虎之力,拼凑出了混合着C、Python、Matlab的代码,终于完成了论文。

一般人也就到此为止了,但是吉姆不一样,他开始琢磨起来:Python这么好用,如果能具备像Matlab那样的数值分析能力就好了!

这样大家做科研写论文就会非常方便!

吉姆研究了一下,发现了Python的另外一个重要特点:可以和C/C++紧密集成。

Python对外提供了一个清晰的 C API,在C代码中可以轻松调用 Python 函数,访问Python的对象。

所以对于一些性能关键的函数(矩阵乘法、哈希、加密等),完全可以用C语言来实现,这对于科学计算来说非常友好。

于是,吉姆决定写一个Python扩展,在保留Python作为通用编程语言的同时,又具备像Matlab那样数值分析的能力。

很快,这个叫Numeric的扩展就新鲜出炉了,Numeric也是第一个用于科学计算的Python库。

围绕 Numeric ,一个非常活跃的科学家和工程师社区开始形成,他们开始用Python+Numeric进行科学计算,并且基于Numeric开发了SciPy,提供了更高级的科学计算功能,比如优化、积分、信号处理、线性代数、统计等。

马里兰州的一个空间望远镜科学研究所为了处理大规模的数据,开发了numarray 软件包,相比Numeric ,numarray在处理大型数组时速度更快(但是在处理小型数组时更慢)。

2005年,Travis Oliphant将numarray的功能移植到了Numeric上,推出了大名鼎鼎的NumPy。

02

注意,Numeric出生于1995年,这一年也发生了几件大事:

1.Sun 公司发明了Java

2.松本行弘推出了Ruby 

3.网景的布兰登用10天设计了JavaScript。

而C#、Go等语言要等到21世纪才会出现。

换句话说,Python在科学计算领域抢得了重要的先发优势!

但是,Python却丢失了一个更大的机会:互联网。

1995~2005这十年,互联网狂飙突进,Java通过J2EE统治了企业级应用开发,然后不断向其他领域进军,成为第一大编程语言。

在浏览器端,在GMail,Google Maps的助推下,JavaScript成为无可争议的老大。

Ruby也依靠Ruby on Rails爆火,在Web2.0应用开发中捕获了大量程序员的芳心。

Python依然在自动化脚本、运维、科学计算等领域默默耕耘,虽然也有Django、Flask这样的框架,但是使用Python开发Web应用的人很少。

Python抬眼望去,Java、Ruby、JavaScript高高在上,如日中天,自己显得非常落寞。

好在Python并没有等多久,人工智能的浪潮就来了。

在科学计算和数值分析领域,没有一个编程语言能像Python那样拥有如此完备的生态,Python积累多年的优势终于释放了。

- NumPy、Pandas → 数据处理

- Scikit-learn → 传统机器学习

- Matplotlib、Seaborn → 可视化

- TensorFlow、PyTorch → 深度学习

- ......

这些库几乎成了AI研究的“标准工具箱”,被各个高校,研究机构,实验室广泛使用。

假设你是一个研究生,你进实验室的时候,你的师兄丢给你几万行没有注释的代码,是使用Python的NumPy/SciPy做数值分析, 虽然你很讨厌Python的语法,但是你会用你最喜欢的语言如Java/Ruby来重写它们吗?

大概率不会吧。 

先发的优势让Python垄断了数据科学领域,其他语言想替代Python,真正的门槛不在于 Python 语法,而在于“复制这个庞大的、久经考验的底层科学计算生态系统”

而这个生态系统的起点就是公园的那次偶遇,帕维尔向吉姆介绍Python的那一刻。

如果在另外一个平行时空,帕维尔和吉姆在公园偶遇,帕维尔向吉姆介绍了Java、JavaScript、Ruby,吉姆会用它们去做数值分析吗? 

大概率不会,因为这三门语言无法同时满足:1.清晰易懂 2.和C/C++紧密集成。

03

最后再来提一下吉姆,他完成了Python扩展Numeric , 把维护的工作交给了其他人,挥一挥衣袖,不带走一片云彩。  

在对Numeric做性能测试的时候,Jim比较了Python和其他很多语言, 他震惊地发现Java在一些简单的数值运算上居然和C语言一样快!于是他开始了一项工作,把Python移植到JVM, 这就是Jython。 

后来他也加入了施乐PARC,在那里他又参与设计了著名的AOP库AspectJ, 掀起了面向切面编程的热潮,尤其在Spring中大行其道。

2004加入微软后,他又把Python移植到了.NET平台,即IronPython。 

这四项工作,完成任意一项,都足以在软件发展史上写下自己的名字,而Jim居然都完成了,真乃奇人也! 

如今吉姆兴趣大变,他把注意力移到了一个叫做布料模拟器的研究上,玩得不亦乐乎:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值