为什么 Python 不是未来的编程语言?
导读:这是一篇“反”Python的文章,各位开发者你品,你细品。
事实上,开发者社区花了几十年的时间才开始青睐 Python的。具体说来是从 2010 年初,它才开始蓬勃发展——最终在流行度上超过了 C、C#、Java 以及 JavaScript等编程语言。
但这种趋势会持续到什么时候?
Python 最终一定会被其它语言取代。
给 Python 设定一个确切的生命周期将陷入过多的猜想,它就像科幻小说一样过去。相反,我将评估目前正在提升 Python 流行度的优点,以及如何打破这个语言的弱点。
是什么让 Python 现在流行
Python 的成功,可以体现在StackOverflow 的编程趋势中,它衡量平台上帖子中的标签数量。鉴于 StackOverflow 的规模,这是编程语言流行度的一个很好的风向标。
数据分析为主的 R 语言在过去几年一直处于稳定状态,许多其他编程语言都在呈下降趋势,但 Python 的增长似乎不可阻挡。
几乎 14% 的 StackOverflow 问题都被标记为“python”,而且这个趋势还在上升,这里总结有如下几个原因。
成熟
Python 从 90 年代就出现了。这不仅意味着它有足够的时间成长。它还有一个庞大的用户支持社区。
如果你在使用 Python 进行编程时遇到任何问题,通过一次 Google 搜索就可以解决的可能性很高,不仅是因为有人已经遇到了同样的问题并为此写了一些有价值的总结。
初学者友好
这不仅是因为Python已经存在了几十年,让程序员有时间制作精彩的教程——更重要的是,Python 的代码语法非常易读。
首先,不需要指定数据类型,开发者只需声明一个变量即可;Python 会从上下文中理解它是整数、浮点值、布尔值还是其它类型的值。这对初学者来说是一个巨大的优势。如果你曾经用 C++ 编程,你会知道程序无法编译是多么令人沮丧,你可能将浮点数做为整数处理。
如果你并排阅读过 Python 和 C++ 代码,你会知道 Python 是多么容易理解。尽管 C++ 在设计时就考虑到了英语短句,但与 Python 代码相比,C++的代码阅读过程却是相当坎坷。
用途广泛
由于 Python 已经存在了很长时间,开发人员已经为各种目的制作了软件包。如今,你可以找到几乎所有东西的包。
比如:
1、想要处理数字、向量和矩阵?NumPy 是好帮手;
2、想为技术和工程做计算吗?使用 SciPy;
3、想在数据操作和分析方面大展宏图吗?试试Panda吧;
4、想从人工智能开始?为什么不使用 Scikit-Learn。
无论你尝试管理某个计算任务,都有可能有一个 Python 包可用。这使得 Python 始终处于最新发展的前沿,从过去几年机器学习的激增就可以看出来。
Python 的缺点——它们是否会致命?
根据先前的阐述,可以想象 Python 将在未来很长一段时间内保持在顶峰之上。但和所有技术一样,都有生命周期,同样Python 也有其弱点。我们一一分析最重要的缺陷,并评估这些缺陷是否致命。
运行速度
Python 运行很慢,真的很慢。平均而言,使用 Python 完成一项任务所需的时间比使用任何其他语言要慢约 2 到 10 倍。
这里有很多个原因。其中之一就是它是动态类型的———开发者不需要像在其它语言中那样指定数据类型,这意味着需要使用大量内存,因为程序需要为它在任何情况下工作的每个变量保留足够的空间,大量的使用转化需要大量的服务器计算时间。
另一个原因是 Python 是单线程,即一次只能执行一个任务。这也是灵活数据类型的结果——Python 需要确保每个变量只有一种数据类型,而并行进程可能会搞砸。
相比之下,人们的浏览器可以同时运行十几个不同的线程,还有一些其他的技术。
但归根结底,速度问题已经不再重要。计算机和服务器现在变得非常便宜,以至于人们谈论的只是相差几分之一秒。
最终用户并不真正关心他们的应用程序是在 0.001 秒还是 0.01 秒内加载完成的。
作用域
最初,Python 是动态作用域。这基本上意味着,要评估一个表达式,编译器首先搜索当前语句块,然后再依次搜索所有函数调用。
动态范围的问题在于每个表达式都需要在每个可能的上下文中进行测试——这很单调乏味。这就是大多数现代编程语言使用静态作用域的原因。
Python 尝试过渡到静态作用域,但搞砸了。通常,内部作用域——例如函数内的函数——能够看到和改变外部作用域。在 Python 中,内部作用域只能看到外部作用域,而不能改变它们。这会导致很多混乱。
Lamda表达式
尽管 Python 具有很多灵活性,但 Lambda 的使用却非常有限,而且Lambda 只能是 Python 中的表达式,不能是语句。
另一方面,变量声明和语句段始终做为语句, Lambda 不能使用它们,在Python中表达式和语句之间的区别相当随意,而在其它语言中则不会出现。
空格
在 Python 中,开发者可以使用空格和缩进来表示不同级别的代码,这使人们在视觉上具有很强的吸引力并且容易理解。
其他语言,例如 C++,更多地依赖大括号和分号。虽然这可能不具有视觉吸引力和初学者友好性,但它使代码更易于维护,对于更大的项目来说,括号和分号更有用。
Haskell 等较新的编程语言解决了这个问题:它们依赖于空格,但为那些希望不使用空格的人们提供了另一种语法。
移动开发
近年来,我们目睹着从桌面到智能手机的转变,很明显人们需要更强大的语言来构建移动应用软件。
使用 Python 开发移动应用程序并不多,这并不意味着它不能完成——有一个名为 Kivy 的 Python 包是做这件事情的。
但是 Python 并不是为移动端应用而设计。因此,即使它能为基本任务产生可通过的结果,最好的方法还是使用一种为移动应用程序开发而创建的语言。
一些广泛使用的移动编程框架包括 React Native、Flutter、Iconic 和 Cordova。
可以明确的是,笔记本电脑和台式电脑应该会存在很多年,而移动端的流量早已超过桌面端,可以肯定地说,学习 Python 不能让你成为一个经验丰富的全能开发者。
运行时错误
Python 脚本不是先编译然后执行。相反,它每次执行时都会编译,因此任何编码错误都会在运行时显现出来,这种情况就会导致性能不佳、耗时,就像很多测试场景一样。
而这些,对于初学者来说非常有用,因为测试教会了他们很多东西。但是对于经验丰富的开发老手来说,用 Python 调试一个复杂的程序反而更容易出错。
什么时候 Python 将被取代?
在编程语言的江湖上,已经涌现出一些新的竞争对手:
Rust 提供了与 Python 相同的安全性——任何变量都不会意外被覆盖,它通过“所有权”和“借款”的概念解决了运行时性能问题。据StackOverflow Insights 的数据,它也是过去几年来最受欢迎的编程语言之一。
Go 非常适合像 Python ,非常体贴初学者。它学习起来简单,以至于维护代码更加容易。有趣的一点:Go 开发人员是市场上收入最高的职位之一。
Julia 是一种非常新的语言,可以与 Python 正面竞争。它填补了大规模计算技术的空白:通常人们会使用 Python 或 Matlab,大规模系统必要时用 C++ 库修补整个过程,现在人们可以使用 Julia 而不用再同时用两种语言。
市面上还有其他编程语言,准确的说 Rust、Go 和 Julia 是修复 Python 弱项的编程语言,这些语言都在某种技术方面表现出色,尤其是在人工智能方面。虽然它们的市场份额目前仍然很小,正如 StackOverflow 标签的数量所反映的那样,但它们的趋势很明显:数据是向上的。
StackOverflow 上几个新编程语言的标签快照
有鉴于目前 Python 已经无处不在,这些新语言中的任何一个肯定需要五年、十年甚至更长的时间才能取而代之。
它将是哪种语言?Rust、Go、Julia 或未来的一种新语言,目前还很难说。
但考虑到 Python 架构中的运行性能问题,这些编程语言将不可避免地占据一席之地。
编译:洛逸
作者:Rhea Moutafis
说明:本文由Rhea Moutafis 撰写,最初发表在Towards Data Science 上。
原文:https://thenextweb.com/news/why-python-not-programming-language-future-syndication
相关阅读: