编译:CSDN-弯月,作者:Rhea MoutafisPython
经过了几十年的努力才得到了编程社区的赏识。自 2010 年以来,Python 得到了蓬勃发展,并最终超越了 C、C#、Java 和 JavaScript。但是,这种趋势将持续到什么时候?何时 Python 会被其他语言取代?被取代的原因又是什么呢?
对于 Python 被淘汰出局的确切日期有很多猜测,它可能会像科幻小说一样成为过去。在本文中,我将讨论促成 Python 大面积普及的优势,以及将来导致它陨落的弱点。
促成 Python 流行的因素
通过 Stack Overflow 发展趋势就可以洞悉 Python 的成功。考虑到 StackOverflow 的规模,我们可以认为这是衡量编程语言流行度的一个很好的指标。
尽管在过去几年中,R 语言的发展一直处于平稳状态,很多其他编程语言已开始稳步下降,但 Python 的增长似乎势不可挡。在所有 StackOverflow 的问题中,带有“python”标签的占到了 14%,而且这种趋势还在上升。其中的原因有很多。
Python 是一种古老的语言
Python 于 90 年代问世。这不仅意味着 Python 有足够的时间成长,而且还拥有了一个庞大的支持社区。因此,如果你在使用 Python 进行编程时遇到任何问题,只需上网搜索就可以得到答案。因为总是会有人在这之前就遇到了这个问题,并为此撰写了一些有用的资料。
对初学者很友好
Python 对初学者友好的原因不仅仅是因为它已经存在了数十年,予以程序员足够的时间编写出色的教程,而且还因为 Python 的语法非常易于理解。首先,无需指定数据类型。你只需声明一个变量即可,Python 会根据上下文判断这个变量是整数、浮点数、布尔值还是其他类型。
对于初学者来说,这是一个巨大的优势。如果你有过使用 C++编程的经历,那么就会懂得只因为你错把浮点数定义成了整数,就导致程序无法通过编译有多么难受了。此外,比较 Python 和 C++代码,不难发现 Python 有多么易于理解。尽管 C++在设计时考虑到了英语,但与 Python 代码相比,阅读 C++的代码还是相当坎坷。
用途广泛
由于 Python 已经存在了很长时间,因此开发人员为之开发出了各色的软件包。如今,无论遇到什么问题,你都可以找到相关的软件包。
想处理数字、向量和矩阵?那么就来试试 NumPy 吧。
想进行技术和工程的计算?那么就来试试 SciPy 吧。
想操作和分析大数据?那么就来试试 Pandas 吧。
想学习人工智能?为什么不试试 Scikit-Learn 呢。
无论你需要进行哪方面的计算任务,都可以找到相关的 Python 软件包。由于过去几年中机器学习的迅猛发展,Python 已经站在了时代发展的最前沿。
Python 的缺点,这些缺点是否致命?
通过上述讨论,你可以想象在很长一段时间内 Python 的发展都势不可挡。然而,Python 也逃不开一切技术的命运,它也有自己的弱点。接下来,我将逐个介绍 Python 的重大缺陷,并评估这些缺陷是否致命。
速度
Python 很慢,非常非常慢。平均而言,使用 Python 完成某个任务所需的时间是使用任何其他语言的 2–10 倍。其中的原因有很多。其中之一是因为 Python 是动态类型的,别忘了你不需要像其他语言一样指定数据类型。
这意味着内存的耗费非常大,因为在任何情况下程序都需要为每个变量保留足够的空间。而巨大的内存使用量必然需要耗费大量的计算时间。另一个原因是 Python 一次只能执行一个任务。这是灵活的数据类型带来的结果,Python 需要确保每个变量只有一个数据类型,而并行进程可能会在这一点上出问题。
相比之下,普通的 Web 浏览器一次可以运行十几个不同的线程。当然其中还涉及别的因素。但最终所有的速度问题都不打紧。因为电脑和服务器的价格越来越低,我们谈论的也只不过是几分之一秒的问题。最终用户并不真正在乎他们的应用加载需要 0.001 还是 0.01 秒。
范围
最初,Python 是动态作用域。这基本上意味着,为了评估表达式,编译器首先需要搜索当前块,然后依次搜索所有调用函数。动态作用域的问题在于,每个表达式都需要在所有上下文中进行测试,这很繁琐。
这就是为什么大多数现代编程语言都使用静态作用域。Python 曾尝试过渡到静态作用域,但搞砸了。通常,内部作用域(例如函数中的函数)能够查看和更改外部作用域。在 Python 中,内部作用域只能看到外部作用域,但不能更改。因此引发了很多混乱。
Lambdas
尽管 Python 非常灵活,但 Lambdas 的使用还是有一定的局限性。Lambda 只能是 Python 中的表达式,而不能是语句。另一方面,变量声明和语句始终是语句,这意味着它们不能使用 Lambda。在 Python 中,表达式和语句之间的区别相当随意,这是其他编程语言都没有的问题。
空白
在 Python 中,你需要使用空白和缩进来表示不同级别的代码。这种格式具有视觉吸引力,而且易于理解。其他编程语言(例如 C++)都需要依赖大括号和分号。尽管这可能在视觉上没有那么强的吸引力,而且对初学者不够友好,但可以提高代码的可维护性。
在大型项目中,这种方式更为妥当。Haskell 等新兴的编程语言解决了这个问题:它们依赖空白,但同时也为那些希望不用空白的人提供了另一种语法。
移动开发
我们目睹了从台式机向智能手机的转变,很明显,我们需要强大的语言来构建移动软件。然而,使用 Python 开发的移动应用并不多。这并不意味着 Python 无法开发移动应用,你可以试试看一个名为 Kivy 的 Python 包。
但是,Python 的设计被没有考虑到移动设备。因此,即使 Python 可以应付基本的任务,但我们最好还是选择专门为移动应用程序开发而创建的语言。广泛用于移动编程的语言包括:React Native、Flutter、Iconic 和 Cordova。
我们需要明确的是,笔记本电脑和台式计算机已经存在很多年了。然而,由于移动设备的使用已然超越了桌面设备,因此我们肯定地说,学习 Python 不足以成为经验丰富的全方面开发人员。
运行时错误
Python 不需要首先编译,然后再执行。相反,它会在每次执行时编译,因此所有编程上的错误都会在运行时显示出来。这会导致性能下降、浪费时间,而且还需要进行大量测试。对于初学者来说,这未必是坏事,因为测试可以教会他们很多知识。
然而,对于经验丰富的开发人员而言,必须使用 Python 调试复杂的程序很令人头疼。性能欠缺是 Python 最大的问题。
Python 什么时候会被取代?
如今,编程语言市场上涌现了新的竞争力量:
Rust 提供了与 Python 相同的安全性——不会意外覆盖任何变量。但是,它通过所有权和借用的概念解决了效率的问题。根据 StackOverflow Insights,Rust 是近几年最受欢迎的编程语言。
Go 与 Python 一样非常适合初学者。语言本身非常简单,维护代码更加简单。此外,有趣的是,Go 开发人员是市场上收入最高的程序员之一。
Julia 是一种非常新的语言,可与 Python 正面竞争。Julia 填补了大规模技术计算的空白:以前,人们通常都需要使用 Python 或 Matlab 编写代码,然后再使用 C++库修补整个程序,因为 C++库是大规模必不可少的。如今,人们可以使用 Julia,而不必在两种语言之间挣扎。
尽管市场上还有其他语言,但 Rust、Go 和 Julia 可以弥补 Python 的弱点。所有这些语言在即将到来的技术中都有出色的表现,最典型的就是人工智能。尽管它们的市场份额仍较小,但根据 StackOverflow 的数据显示,这些语言的发展呈现出明显的上升趋势。
如今,Python 无处不在,我们还需要五年甚至更长的时间,才有可能看到 Python 被新语言所替代。就目前而言,我们很难判断哪种语言有可能替代 Python,是 Rust、Go、Julia 抑或是其他的新语言。
但鉴于 Python 体系结构中最基本的性能问题,其终将难逃被人替代的命运。
原文:https://towardsdatascience.com/why-python-is-not-the-programming-language-of-the-future-30ddc5339b66
最后,发起一个长期活动,每 15 天 (最后一天,明天公布)留言最多的人送上一本书或企鹅公仔。
今日问题:假如 python 真的过气了,下一个火起来的语言是什么呢?
推荐阅读:
本文分享自微信公众号 - 编程三分钟(coding3min)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。