潘石屹考了 99 分的 Python,到底是一种什么存在?

来自:脑极体 2020-05-29

去年,当地产大佬潘石屹要把学习 Python 作为生日礼物送给自己的时候,微博上还多是一阵调侃之声。可能正是印证了 Python 程序员们常常挂在嘴边的 " 人生苦短,就学 Python" 的口头禅,时年 56 岁的小潘同学要再一次抓住 " 青春 " 的尾巴吧。

为督促自己学习,小潘还在微博专门设置了一个 # 潘石屹用 Python 解决 100 个问题 # 的话题,鼓励全民围观,监督他的 Python 学习计划。显然,几个月的坚持,让小潘同学的 Python 学习有了初步的成果。5 月 16 号,他在参加完 NCT 全国青少年编程能力等级测试 Python 编程一级考试后,晒出了 99 分的优秀成绩单。

至于为啥要学 Python,朴实的潘总在接受媒体采访时表示,人到 50 岁以后一定要学点新东西,以防止老年痴呆。

但为什么选择要学一个自己完全不懂的 Python 语言,这还是他在请教了李开复之后得到的启发:Python 语言是现在全世界使用最多的一个编程语言,也是非常成熟的一个语言。

最主要的呢?

未来社会是一个人工智能的社会,学习 Python 是打开人工智能时代的钥匙。

Python 对于人工智能很重要,对很多关注 AI 的人们来说想必是个基本常识,但是对于大部分并非专业从事编程的人,比如我来说,Python 到底有多重要,其实还是一头雾水的。

于是我默默地拿起了一本《Python 编程:从入门到实践》……

额,短期学会有点不太现实。我还是本着谦虚好学的态度,梳理下专业人士的观点,来尽可能地搞清楚 "Python 之于 AI" 是一种怎样的存在吧?

Python 为何能这么流行?

衡量一门编程语言受欢迎程度的重要指标,可以参考其在 Stack Overflow(一家 IT 问答社区)上面的标签数量。下图是近 10 年来全世界最主要的几种编程语言在社区平台的问答帖子中的标签数量的趋势图。

从 2012 年之后,Python 就一直处在稳步上升的趋势,与此相对照的是其他主流编程语言,除了 R 语言一直处于停滞不前的状态,其他编程语言则是在不同程度地稳步下降。

这一指标确实很好地印证了 Python 的流行程度和普及度。根据专业人士的说法,Python 具有以下优点:

一、Python 的成熟和易用。

实际上,从 1991 年,van Rossum 向全世界发布了第一个版本的 Python 至今已经有 30 岁的高龄了。但 Python 却没有因为这种计算机时代略显 " 古老 " 的年龄而走向衰败,反而因为 Python 在可用性和功能性上面取得的平衡,让越来越多的程序员开始使用这一语言。

一方面简单易用,一方面又可以用来开发大型的应用程序,这两个因素结合,正是 Python 在上世纪 90 年代逐渐取得成功的原因。现在,Python 语言已经形成一个庞大的成熟社区,一旦人们在编写 Python 代码遇到任何问题,都可以从中找到有用的答案。

二、Python 对于初学者非常友好。

从一开始,Python 就提供了清晰而明确的语法,使得发人员更容易阅读和理解代码,这是众多程序员喜欢上 Python 的主要理由。

用三种语言来显示 "Hello World!" 为例,相比起 C 语言和 Java,Python 更符合人类直觉的语言形式,对新手而言也更加友好,只需要一句 "print"(发布)就可以了。

用 van Rossum 的原话来说就是,一门编程语言不仅要告诉计算机该做什么,还要便于在开发者之间传递思想。那还有什么比使用一种 " 符合人性 " 的编程语言来实现更好的思想交流呢?

第三,Python 的功能足够强大。

经过如此久的迭代开发,Python 早已拥有各种各样的支持库。用一个形象的比喻来说,Python 就像是编程界的 " 瑞士军刀 ",可以在各种各样的场合里用到。比如处理矩阵和向量数据的 NumPy、做技术和工程方面的计算的 SciPy、数据处理和分析的 Pandas 以及支持数据可视化的 Matplotlib 等等支持库。

需要注意的是,正是 Python 在支持库上面的功能扩展,与 AI 技术发展息息相关。这些正是我们接下来要讨论的问题。

为什么 Python 更适合人工智能?

我们知道第三次人工智能浪潮的兴起得益于机器学习,特别是深度学习算法的成功。而训练一个 AI 算法模型就需要为其喂养大量的数据。在前期的 AI 发展中," 有多少智能就有多少人工 " 就是这一 AI 训练过程的典型描述。在这一过程中,Python 因其有强大的数据处理的生态库,因而能够为其提供数据的访问和转换,实现 AI 算法的快速 " 喂养 "。

举个例子,机器学习或者深度学习的算法模型所要处理的数据实际上都是矩阵和向量。而 NumPy 则正好支持维度数组与矩阵运算,结合 Python 内置的 math 和 random 库,可以轻松通过简单代码实现矩阵的转置、求逆、求和、叉乘、点乘和分解等功能。

而且,NumPy 在实现层对矩阵运算做了大量的并行化处理,通过数学运算的精巧,而不是让用户自己写多线程程序,来提升程序效率。有了 Python 这种强大的数据计算和处理能力,开发者就可以把工作重心放在模型和算法上,不用操心运行的问题了。

就像上面所说,Python 其实也是 AI 技术的 " 瑞士军刀 "。对于 AI 训练所需要的数据获取、分析、建模等流程也都可以通过 Python 的各类支出库来解决。

(用 Python 训练和使用一个 logistic Regression 模型)

比如,像 requests、scrapy 这类网络爬虫库,可以从网络上获得源源不断地海量数据;像 scipy、pandas、matplotlib 以及刚刚介绍的 NumPy, 帮助开发者进行科学计算、数据处理、绘图以及矩阵计算等操作;而像 nltk、keras、sklearn 这类用于建模的支持库,即可用于 NLP、DL 的模型搭建,实现一个完整的 AI 算法模型。

此外,Python 也可以用于处理高效的 C/C ++ 算法,以及 CUDA/cuDNN 的包装语言,这让现有的机器学习和深度学习库可以在 Python 中高效运行的原因之一。

总体而言,Python 成为一门理想的集成语言,可以让开发者关注真正的问题,而不是花很多时间在细节实现上。

Python 语言十全十美吗?

当然不是,像任何一门编程语言一样,Python 也会有自身的缺陷。

首先,Python 的执行速度不够快。由于 Python 是一门解释型语言。编程语言和机器语言之间需要解释器的翻译,而 Python 是一次执行一个任务,因而需要每翻译一行程序叙述就立刻运行,然后再翻译下一行再运行,这样就导致 Python 要比像 C、Java 这类编译型语言执行速度慢的原因。

但对于现在的服务器算力来说,Python 速度的劣势几乎没有什么影响,因为对于开发者而言根本察觉不到明显的延时。此外,还可以通过和 C 语言的结合,将需要优化速度的应用转换为编译好的扩展语言,并在系统中使用 Python 脚本将这部分应用连接起来,以提高程序的整体效率。

其次,Python 源代码加密困难。Python 不像编译型语言的源程序会被编译成目标程序,而是会直接运行源程序,因此对源代码加密比较困难。

此外,Python 不太适用于移动开发。Python 在设计时并没有考虑到移动开发,因而还不支持在非 x86 硬件平台上编译代码,而且 Python 的测试套件很容易在移动平台崩溃。随着移动设备的数量和流量开始远远超过 PC 设备,Python 也应该要努力进化以支持移动平台了。

尽管 Python 在未来几年内会依然兴盛,但是一些潜在的竞争对手也正在成长—— Rust、Go 以及 Julia。这些语言都各自超过 Python 的优点,也能修补 Python 的薄弱环节,正在成为 Stack Overflow 近几年受欢迎趋势上升很快的三种语言,但是零点几的份额还不足以挑战 Python。

然而总体上,Python 因其开放的开源社区以及全球最多的开发者生态,使其成为近十年来最成功的编程开发语言之一。

如果列举 Python 的广泛应用,我们可以列举出一系列的名单。包括人工智能学习框架如 Google 的 TensorFlow 、Facebook 的 PyTorch、开源社区的神经网络库 Karas 以及云计算开源平台 OpenStack 等使用 python 实现。此外,Python 还在 Web 开发、操作系统运维、金融大数据分析和图形 GUI 上面都是强大的支持工具。

(MIT 研究员在通过 Python 代码跑出黑洞图片后,没有报错时的小兴奋)

如果这些领域还是离我们的日常生活太过遥远的话,我们不妨就记住 Python 这样的一个小应用吧。

还记得去年媒体疯传的那张黑洞照片吗?这张据说用了 2 年时间拍摄而成的黑洞照片,其实并不是一个望远镜拍摄到的,而是采用了遍布全世界的望远镜连接起来,共同拍摄而成的。那么来自多个望远镜拍摄的数据的处理就需要用到 Python。

简单来说,人类看到的第一张真实的黑洞照片,其实是用 Python 合成的。如果今后有人问起 Python 能做什么,你还能记得这个知识点就可以了。