以下是译文:

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. linux网络编程-socket(37)

    在编程的时候需要加上对应pthread开头的头文件,gcc编译的时候需要加了-lpthread选项 第三个参数是线程的入口参数,函数的参数是void*,返回值是void*,第四个参数传递给线程函数的参 ...

  2. 7-4 List Leaves (25分) JAVA

    Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. I ...

  3. 入门大数据---Spark简介

    一.简介 Spark 于 2009 年诞生于加州大学伯克利分校 AMPLab,2013 年被捐赠给 Apache 软件基金会,2014 年 2 月成为 Apache 的顶级项目.相对于 MapRedu ...

  4. 《UNIX环境高级编程》(APUE) 笔记第三章 - 文件I/O

    3 - 文件I/O Github 地址 1. 文件描述符 对于内核而言,所有打开的文件都通过 文件描述符 (file descriptor) 引用.当打开一个现有文件或创建一个新文件时,内核向进程返回 ...

  5. Taro 3 正式版发布:开放式跨端跨框架解决方案

    作者:凹凸曼 - yuche 从 Taro 第一个版本发布到现在,Taro 已经接受了来自于开源社区两年多的考验.今天我们很高兴地在党的生日发布 Taro 3(Taro Next)正式版,希望 Tar ...

  6. MySQL 字符串索引优化方案

    字符串建立索引的优化 1. 建立前缀索引 假设建立一个支持邮箱登录的用户表,对于邮件字段来说,可以有以下几种建立索引的方式: 直接对整个字符串建立索引 alter table SUser add in ...

  7. 每日一题 - 剑指 Offer 41. 数据流中的中位数

    题目信息 时间: 2019-06-30 题目链接:Leetcode tag: 大根堆 小根堆 难易程度:中等 题目描述: 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有 ...

  8. css3支持动画吗?css3可以用于网页动画的展现吗

    CSS3 主要可以分为几个模块:边框和背景,渐变,文字特效,字体,2D/3D转换,动画(过渡动画和动画),选择器,盒模型,多列布局,用户界面. css3动画有2类:一种是transition的,另一种 ...

  9. css可以修改超链接颜色吗?

    超链接a标签大家都应该很熟悉,这篇文章主要的讲的是a标签的基础css样式设置,下面我们来看一下css修改超链接颜色的方法. css可以使用下面几个伪类来设置超链接: a:link :是未被访问的样式, ...

  10. idea+DevTools热部署

    1.增加devtools依赖 <!-- 热部署DevTools --> <dependency> <groupId>org.springframework.boot ...