写点什么

为什么 Python 不是未来的编程语言?

  • 2020-04-09
  • 本文字数:3329 字

    阅读完需:约 11 分钟

为什么Python不是未来的编程语言?

Python 现在如此火爆,已发展成为一种非常通用的语言,无论是从入门级选手到专业技术数据挖掘、科学计算、图像处理、人工智能,Python 都可以胜任。它会是未来的编程语言吗?它是完美无缺的编程语言吗?有人发出了不同的声音。此前,InfoQ 中文站曾编译过相关文章,今天,我们翻译并分享了 Rhea Moutafis 对 Python 的看法,权当一家之言吧!


编程社区花了几十年的时间才领略到 Python 迷人之处。但自 2010 年初以来,Python 就一直在蓬勃发展,并最终在受欢迎程度上超越了 C、C#、Java 和 JavaScript。


但这种趋势还会持续到什么时候呢?什么时候 Python 最终会被其他编程语言所取代?为什么会被取代?


预测这个时间点到底什么时候到来可能会像科幻小说一样充满各种可能性。我在本文中,将阐述 Python 那些受欢迎的优点,以及将来会打败它的弱点。

是什么让 Python 现在如此流行

Python 的成功体现在 Stack Overflow 趋势上,该趋势衡量平台上帖子中的标签数量。鉴于 Stack Overflow 的规模,因此它是编程语言受欢迎程度的一个很好的指标。



Stack Overflow 上各种编程语言的标签快照。


尽管 R 语言在过去几年里一直处于停滞不前的状态,而且许多其他编程语言也在稳步下降,但 Python 的增长似乎势不可挡。几乎所有 Stack Overflow 上的问题有 14% 被标记为“Python”,而且这一趋势还在上升。


这其中有几个原因:

它是古老的

Python 早在 20 世纪 90 年代就出现了。这并不仅仅意味着它有充足的时间来成长,它还得到了一个庞大的支持社区。


因此,如果你在用 Python 编写代码遇到了什么问题,你很有可能通过 Google 搜索一下就能解决。这是因为有人已经遇到过和你一样的问题,并记下了一些有用的东西。

它对初学者很友好

这不仅是事实,因为它已经存在了几十年,让程序员得以有时间来编写优秀的教程。更重要的是,Python 的语法非常易于理解。


首先,无需指定数据类型。你只需声明一个变量即可;Python 将会从上下文中理解它是整数、浮点值、布尔值还是其他值。这对初学者来说,是一个巨大的优势。如果你曾经使用 C++ 进行编程的话,你就会知道你的程序无法通过编译是多么令人沮丧,仅仅只是因为你将浮点数换成了整数。


如果你曾经同时阅读过 Python 和 C++ 代码,你就会知道 Python 有多么容易理解。尽管 C++ 在设计时考虑到了英语,但与 Python 代码相比,它的阅读还是相当困难。

它的用途广泛

由于 Python 已经存在了如此久的时间,开发人员已经为各种潜在需求制作了软件包。现在,你可以找到几乎所有用途的软件包。


想要计算数字、向量和矩阵吗?NumPy 就是你要找的东西。


想要做技术和工程方面的计算吗?请使用 SciPy


想在数据处理和分析方面做大吗?那就试试 Pandas 吧。


想从人工智能开始吗?那为什么不使用 Scikit-Learn 呢?


无论你想做哪种计算任务,都有相应的 Python 软件包。这使得 Python 一直处于发展前沿,从过去几年机器学习的火热的浪潮中可以看出来。

Python 的缺点以及这些缺点是否会致命

基于前面的阐述,你可以想象 Python 在未来几年仍将兴盛不衰。但是,像所有的技术一样,Python 也有它的弱点。我将一一介绍最重要的缺陷,并评估这些缺陷是否致命。

速度

Python 很慢。真的,非常非常慢。平均而言,使用 Python 完成一项任务所需的时间,是任何其他编程语言的 2~10 倍。


造成这种情况的原因有很多。其中之一是,它是动态类型的,记住,你不需要像在其他编程语言那样指定数据类型。这意味着需要使用大量的内存,因为程序需要为它在任何情况下都能工作的每个变量预留足够的空间,而且大量的内存使用意味着大量的计算时间。


另一个原因是,Python 一次只能执行一个任务。这是采用灵活数据类型带来的后果:Python 需要确保每个变量只有一种数据类型,而并行化的进程可能会弄乱这一点。


相比之下,一般的 Web 浏览器可以同时运行十几个不同的线程。此外,还有其他一些理论。


但说到底,这些速度问题都无关紧要。计算机和服务器已经变得如此便宜,以至于我们谈论的只是几分之一秒的时间。实际上,最终用户并不在乎他们的应用程序是在 0.001 秒还是 0.01 秒内加载的。

作用域

最初,Python 的作用域是动态的。这基本上意味着,要计算表达式,编译器首先搜索当前块,然后依次搜索所有调用函数。这就是大多数现代编程语言使用静态作用域的原因。


Python 曾试图过渡到静态作用域,但搞砸了。通常情况下,内部作用域(例如函数中的函数)能够查看和更改外部作用域。但在 Python 中,内部作用域只能看到外部作用域,而不能改变它们,这就导致了很多混乱的情形。

Lambda

尽管 Python 具有所有的灵活性,但 Lambda 的使用还是相当受限的。Lambda 只能是 Python 中的表达式,不能是语句。


另一方面,变量声明和语句始终是语句。这意味着 Lambda 并不能用于它们。


表达式和语句之间的这种区别是相当随意的,在其他编程语言中并不会存在。



空白使代码的可读性更强,但可维护性却更低了。


在 Python 中,你可以使用空格和缩进来表示不同级别的代码。这使得它在视觉上具有吸引力,理解起来也更直观。


其他编程语言,如 C++,则更多地依赖花括号和分号。尽管这可能在视觉上不够吸引人,对初学者也不太友好,但是它使代码更易于维护。对于较大的项目,这个方法更有用。


像 Haskell 这样的新语言解决了这个问题:它们依赖于空格,但为那些希望不使用空格的人提供了另一种语法。

移动开发

我们正在见证从台式计算机到智能手机的转变,很明显,我们需要强大的语言来开发移动软件。


但使用 Python 开发的移动应用并不多。不过,这并不意味着它做不到 — 有一个名为 Kivy 的 Python 软件包就是专门用于开发移动应用的。


但是 Python 在设计时并没有考虑到移动开发。因此,即使它可能会为基本任务产生差强人意的结果,你最好的选择是使用一种专为移动开发而创建的编程语言。一些广泛使用的移动编程框架包括 React Native、Flutter、Iconic 和 Cordova。


需要明确的是,笔记本计算机和台式计算机应该会在未来很多年里继续存在。但是,由于移动设备的流量早已超过台式计算机,所以可以肯定地说,学会 Python 并不足以成为经验丰富的全能开发人员。

运行时错误

Python 脚本不是先编译后执行的。相反,它会在每次执行时编译,因此,任何编码错误都会在运行时显示出来。这会导致性能差、耗时长,并且需要进行大量测试。比如,很多很多测试。


这特别适合初学者,因为测试可以教会他们很多东西。但是对于经验丰富的开发人员来说,必须用 Python 调试复杂的程序会让他们出错。这种性能的缺乏是在 Python 上设置时间戳的最大因素。

未来何时,谁将取代 Python?

在编程语言市场上有几个新的竞争对手:


  • Rust 提供了与 Python 同样的安全性,任何变量不会被意外覆盖。但是,它用所有权(ownership)和借用(borrowing)解决了性能问题。根据 Stack Overflow Insights 的统计,Rust 也是过去几年来最受欢迎的编程语言。

  • Go 对于 Python 这样的初学者来说很棒。它是如此简单,以至于维护代码更加容易了。有趣的是:Go 开发人员是市场上收入最高的程序员之一。

  • Julia 是一门非常新的编程语言,可以与 Python 一较高下。它填补了大规模技术计算的空白:通常情况下,人们会使用 Python 或 Matlab,然后用 C++库来修补整个程序,这在大规模应用时是必需的。现在,人们可以使用 Julia,而不是同时使用两种编程语言。


虽然市场上还有其他编程语言,Rust、Go 和 Julia 是修补了 Python 薄弱部分的编程语言。所有这些语言在未来的技术上表现出色,尤其是在人工智能领域。虽然它们的市场份额仍然很小,但从 Stack Overflow 标签的数量可以看出,它们的趋势都很明显:上升。



StackOverflow 上各种编程语言标签快照。


鉴于目前 Python 已无处不在的流行程度,这些新语言中的任何一门要想取代它,肯定要花上五年的时间,甚至终其“一生”。


究竟会是哪一门编程语言将取代 Python,是 Rust?Go?Julia?抑或是未来的一门新语言?现在还很难说。但是鉴于 Python 架构中的最基本的性能问题,这些语言中的一门将会不可避免地占据一席之地。

作者介绍:

Rhea Moutafis,目前正攻读暗物质物理学的博士学位。热爱艺术、音乐和美好的事物。


延伸阅读:


https://towardsdatascience.com/why-python-is-not-the-programming-language-of-the-future-30ddc5339b66


2020-04-09 15:165580
用户头像
刘燕 InfoQ高级技术编辑

发布了 1123 篇内容, 共 605.7 次阅读, 收获喜欢 1982 次。

关注

评论 1 条评论

发布
用户头像
这种标题,这种文章有啥意义?世界是向前发展的,未来是啥时候?未来没有尽头,哪有未来的编程语言?
2020-04-09 17:43
回复
没有更多了
发现更多内容

面试突击76:${} 和 #{} 有什么区别?

王磊

Java 常用面试题

灏天农业签约旺链科技,推动中药材产业健康发展

旺链科技

区块链 产业区块链 中药材

攻击面管理:企业向主动安全转变的开始

SEAL安全

攻击技术 黑客攻击 软件供应链安全

说实话,Hibernate 和 MyBatis 哪个更好用?

TimeFriends

8月月更

阿里云丁宇:以领先的云原生技术,激活应用构建新范式

阿里巴巴中间件

阿里云 Serverless 容器 RocketMQ 云原生

中仑网络全站 Dubbo 2 迁移 Dubbo 3 总结

阿里巴巴中间件

阿里云 开源 云原生 dubbo

从零开始实现一个MyBatis加解密插件

vivo互联网技术

spring mybatis

极盾·析策XDR,助力顶级汽车集团构建安全运营中台

极盾科技

网络安全 安全 信息安全 数据安全 xdr

使用 yo 命令行向导创建 SAP UI5 应用

汪子熙

前端开发 SAP SAP UI5 ui5 8月月更

RedisSyncer同步引擎的设计与实现

京东科技开发者

同步代码 key 引擎 redis 底层原理

Apache顶级项目Ranger和Alluxio的最佳实践(附教程)

Alluxio

Ranger Alluxio Apache 分布式 大数据 开源 8月月更

搜索引擎分布式系统思考实践

得物技术

搜索引擎 分布式系统

基于STM32的录音机设计(STM32F103+VS1053B)

DS小龙哥

8月月更

数据治理几乎所有常见问题的简答都在这里了

雨果

数据治理

JS【数组合并】的性能差异对比

掘金安东尼

JavaScript 前端 8月月更

[教你做小游戏] 用177行代码写个体验超好的五子棋

HullQin

CSS JavaScript html 前端 8月月更

密集计算场景下的 JNI 实战

vivo互联网技术

Java c++ 性能 JVM jni

Kubernetes 1.25 发布!博云带你玩转新特性

BoCloud博云

容器 云平台 #k8s

SpringBoot 整合 MyBatis-Plus

SpringBoot 2 Mybatis-Plus 8月月更

藏不住了,数据分类分级利器「极盾·智辨」发布

极盾科技

网络安全 安全 数据 数据分类 数据安全

【python】通用的json_diff方法

转转技术团队

测试工具

高效的工作从取消汇报开始|敏捷实践

LigaAI

高效工作 Scrum 敏捷开发 研发团队 每日站会

开源一夏 | 大佬,人人都说精通的单例模式,你精通了吗

知识浅谈

单例模式 8月月更

静态IP是什么意思?和动态IP 有什么区别

郑州埃文科技

静态IP 动态IP IP地址

图灵访谈 | Vue.js官方团队成员霍春阳:跨专业做程序员,是什么感受?

图灵社区

vue.js 代码人生

数据治理(七):Atlas搭建启动

Lansonli

数据治理 8月月更

Go-Excelize API源码阅读(十八)——GetPageMargins、SetWorkbookPrOptions、GetWorkbookPrOptions

Regan Yue

Go 开源 源码解析 8月日更 8月月更

语音聊天app源码:系统功能有哪些?

开源直播系统源码

软件开发 直播系统源码 语音直播系统 语音直播

HMS Core Discovery第17期直播预告|音随我动,秒变音色造型师

HarmonyOS SDK

我想搞信息资讯聚合类产品,如何编写PHP爬虫?

智伍应用

为什么Python不是未来的编程语言?_语言 & 开发_Rhea Moutafis_InfoQ精选文章