以下是译文:

Python经过了几十年的努力才得到了编程社区的赏识。自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体系结构中最基本的性能问题,其终将难逃被人替代的命运。

Python 什么时候会被取代?的更多相关文章

  1. Python数据结构与算法--算法分析

    在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...

  2. 为什么我觉得Python烂的要死?

    为什么我觉得Python烂的要死? https://www.toutiao.com/a6636558446030225923/ 作为机器学习程序员的首选编程语言,Python成为世界范围内最受大学生欢 ...

  3. Python库资源大全

    转载地址:https://zhuanlan.zhihu.com/p/27350980 本文是一个精心设计的Python框架.库.软件和资源列表,是一个Awesome XXX系列的资源整理,由BigQu ...

  4. 七:python 对象类型详解三:列表

    一:列表简介: 1,列表可以包含任何种类的对象:数字.字符串甚至集合对象类型.列表都是可变对象,它们都支持在原处修改的操作,可以通过指定的偏移量和分片.列表方法调用.删除语句等方法来实现.关键的作用有 ...

  5. python配置文件转dict

    配置文件有很多种,如JSON,properties,conf,xml等. 除非需要跟别的语言进行交互,python本身是完全可以取代所有配置文件的.使用python进行配置可以使用非常灵活地执行一些逻 ...

  6. Python Weekly 422

    新闻 Python 采用12个月作为发布周期 链接: https://mail.python.org/archives/list/python-dev@python.org/thread/KE7OS4 ...

  7. Python库资源大全【收藏】

    本文是一个精心设计的Python框架.库.软件和资源列表,是一个Awesome XXX系列的资源整理,由BigQuant整理加工而成,欢迎扩散.欢迎补充! 对机器学习.深度学习在量化投资中应用感兴趣的 ...

  8. #2020征文-开发板#使用Python开发鸿蒙应用--2021.01.07直播图文

    写在前面: 每年的过年前夕,手中的项目一定会告急...而自己又缺乏三头六臂七十二变等特技,所以只能在鸿蒙社区先消失一阵子了.今天再看社区的帖子,发现大家的进步可不一般,各种案例示例层出不穷,一片欣欣向 ...

  9. 2019年12月4日Linux开发手记

    OK,经过昨天对V4L2工作流程的学习,现在已经大体了解了V4L2的工作原理,现在开始对V4L2的API的学习,目标:1.打开摄像头 2.储存图像 3.关闭摄像头,API网址:Linux Media ...

随机推荐

  1. activity的四种启动模式详细分析

    1.android中通过任务队列来管理activity 采用栈的结构就是后进先出 手机里面如果启动多个应用就会启动多个任务栈来管理对应的activity. 主要解决下面的问题:对应的四种启动模式: 1 ...

  2. linux网络编程-posix信号量与互斥锁(39)

    -posix信号量信号量 是打开一个有名的信号量 sem_init是打开一个无名的信号量,无名信号量的销毁用sem_destroy sem_wait和sem_post是对信号量进行pv操作,既可以使用 ...

  3. [强化学习]Part1:强化学习初印象

    引入 智能 人工智能 强化学习初印象 强化学习的相关资料 经典书籍推荐:<Reinforcement Learning:An Introduction(强化学习导论)>(强化学习教父Ric ...

  4. 入门大数据---Spark_Streaming与流处理

    一.流处理 1.1 静态数据处理 在流处理之前,数据通常存储在数据库,文件系统或其他形式的存储系统中.应用程序根据需要查询数据或计算数据.这就是传统的静态数据处理架构.Hadoop 采用 HDFS 进 ...

  5. spring配置文件的部分配置文字说明

    http://blog.csdn.net/zzjjiandan/article/details/22922847/ spring的组成: <beans> <contenxt> ...

  6. 关于位图数据和标记位-P3

    文章目录 1 背景 1.1 问题 2 问题1探究 2.1 没有区的情况 2.2 一个区的情况 2.3 两个区的情况 2.4 三个区的情况 2.5 四个区的情况 2.6 五个区的情况 3 问题2探究 3 ...

  7. Python优秀开源项目Rich源码解析

    这篇文章对优秀的开源项目Rich的源码进行解析,OMG,盘他.为什么建议阅读源码,有两个原因,第一,单纯学语言很难在实践中灵活应用,通过阅读源码可以看到每个知识点的运用场景,印象会更深,以后写代码的时 ...

  8. 记一次开发CefSharp做浏览器时关闭页面上时未释放遇到的小问题

    问题:当CefSharp放在List里,然后用了Remove移除,CefSharp是否还存在. 我将Cefsharp做成UserControl控件,然后在Main页面里采用List<UserCo ...

  9. OutOfMemory相关问题(内存溢出异常OOM)

    OutOfMemory(内存溢出异常OOM) java.lang.OutOfMemoryError :Thrown when the Java Virtual Machine cannot alloc ...

  10. wcf服务各种情况下应用

    1.控制台调用 第一步,添加wcf服务 2.写接口,记得要加好契约特性. 3.声明一个类继承wcf服务. 4.ipconfig配置 5.控制台运行 6.运行app.config里面,加上调用的接口方法 ...