当前位置: 东方母婴网 >资讯 > 文章

人生苦短Python会不会被替代国外网友吵翻天

2020-04-05 16:39:18  阅读:1992+ 作者:责任编辑NO。许安怡0216

十三 发自 凹非寺

量子位 报道 | 公众号 QbitAI

人生苦短,我该不该选择Python?

编程语言几年一变样,榜单之争也是愈演愈烈,还架不住时不时杀出个黑马……

而对于Python,自2010年初以来一直蓬勃发展至今,在流行程度上,也超越了C、C++、Java等老牌编程语言。

那么问题来了:

这种趋势将持续到何时?最终会因何故被其他语言取代?

对于Python是不是the language of the future,网友们展开就此展开一番激辩。

反方:必然会有一种语言取代Python

一位名叫Rhea Moutafis的网友认为,Python不会是“未来的编程语言”。观点仅发布数日,便得到了10.2k的点赞。

他从“流行原因”、“缺点”以及“何时、何故被取代”三方面做了阐述。

Python为何现在如此流行?

Moutafis认为,Python的成功,某些特定的程度体现在Stack Overflow的趋势上。这个平台衡量了发布帖子中的标签数量,再考虑到它的规模,对于“受欢迎编程语言”来说是个不错的指标。

从图中能够准确的看出,R语言在过去几年中处于稳步增长的状态,但其他语言,像C#、C++、Java和Javascript,都有下降的趋势。

而在所有Stack Overflow的问题中,几乎有14%的问题被贴上了 “Python “的标签,而且这个趋势还在上升。

Moutafis认为,原因有如下3个方面。

首先,Python也算是一个老牌语言。

Python从90年代便已出现,这不仅意味着它有足够的时间来发展,还意味着拥有一个庞大而强有力的社区支持。

所以你在用Python编程的时候,如果遇到了任何问题,只要网上搜索一下,大概率就能解决掉。

因为有很大的可能性在你之前,就有人遇到过同样的问题,还在网上留下了宝贵的意见。

其次,Python对于初学者来说是友好的。

对于这一点,并不是说它存在了几十年,给了程序员们充足的时间来写使用教程。而是Python的语法易读性特别好。

例如你不需要指定数据类型,只要声明一个变量,Python会根据上下文,理解这个变量是属于整数、浮点数、布尔值等等。

这对于初学者来说优势是巨大的。如果你用过C++,你就有可能体会到这样的痛苦:程序跑不出来,可能仅仅是因为把一个浮点数指定成了整数……

以及,如果对比着读过Python和C++的代码,你就能深刻的体会到Python代码理解起来是有多么容易。

最后,Python的用途很广。

Python从出现至今,开发人员几乎在各个领域、用途方面开发了包(package):

想处理数字、向量和矩阵?Numpy是的你首选。

想进行技术和工程方面的计算?SciPy了解一下。

想在数据处理和分析领域大展身手?Pandas值得一试。

想涉足人工智能?Scikit-Learn真香(褒义……)。

无论你想处理哪种计算任务,Python几乎都可以提供相应的包。从近几年机器学习的激增,也不难看出Python一直处于发展的前沿。

Python的缺点是否具有致命性?

当然,没有一个技术是完美的,Python也不例外。Moutafis列出了6个最重要的缺陷,还评估了它们是否具有致命性。

第一,速度 (Speed)。

平均来说,用Python运行一个任务所需要的时间,是其他语言的2-10倍。

为何会这样呢?其中一个原因就是它是动态类型。

就像刚才说的,你不需要指定数据类型,这就从另一方面代表着它需要用大量的内存,因为程序需要为每个变量预留足够的空间,确保在任何情况下都能工作。而大量的内存使用量,意味着大量的计算时间。

另一个原因是Python一次只能执行一个任务。这是灵活数据类型的结果——Python需要确保每个变量只有一个数据类型,而并行进程可能会把这一点搞得一团糟。

相比之下,一般的Web浏览器一次可以运行12个不同的线程……

但说到底,这些速度问题都无关紧要。计算机和服务器现在很便宜了,用户并不真正关心他们的应用程序,是否在0.001或0.01秒内能加载完。

第二,作用域 (Scope)。

最初,Python是动态确定作用域的。这基本上就从另一方面代表着,要对表达式求值,编译器首先需要搜索当前块,然后依次搜索所有调用函数。

动态作用域的问题在于,每个表达式都需要在每个可能的上下文中进行测试。这个是相当繁琐的过程,这也就是为什么大多数现代编程语言使用静态作用域的原因。

对于这样的一个问题,Python试图过渡到静态作用域,但却搞砸了:通常,内部作用域能够查看和更改外部作用域,但在Python中,内部作用域只能看到外部作用域,而不能更改它们。

第三,Lambda。

尽管Python内部的灵活性很好,但Lambda的使用还是相当有限制的。Lambda只能是Python中的表达式,而不能是语句。

另外,变量声明和语句始终是语句,这在某种程度上预示着Lambda不能用于它们。

表达式和语句之间的这种区别,能够说是相当随意,在其他语言中就不会出现这样的一种情况。

第四,空白符 (Whitespaces)。

在Python中,你可以用空格和缩进来表示不同级别的代码。这让它在视觉上很吸引人,也很容易理解

而其他语言,例如C++,更多的是依赖大括号和分号。虽然这可能并不吸引人,也不适合初学者,但它让代码的可维护性提高了很多。对于较大的项目来说,这就更有用了。

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

第五,移动开发 (Mobile Development)。

随着应用逐步从电脑桌面转向移动端,很明显我们应该强大的语言来构建移动软件。但用Python开发的移动应用并不多。

Python并不是为移动端开发而设计的,即便在基本任务上能达到差强人意的效果,但最好还是选择专门为移动端开发的语言,例如React Native、Flutter、Iconic和Cordova。

需要明确的是,笔记本和台式电脑仍会在未来存在一段时间。但由于移动端流量早已超过了桌面端,可以说,学习Python还不足以让你成为一个全能型开发者。

第六,Runtime Error。

一个 Python 脚本不是先编译,然后再执行。相反,它在每次执行时都会编译,所以任何编码错误都会在运行时显示出来。这导致性能差、时间消耗大,以及需要大量的测试

这对初学者来说是很好的,因为测试可以教给他们很多东西。但对于经验比较丰富的开发人员来说,不见得这是个好事。

在未来,何时、何故会让Python被取代

在编程语言这个市场上,出现了一批新的竞争者:

Rust提供了和Python一样的安全性——没有一点变量会被意外覆盖。但它用ownership和borrowing的概念解决了性能问题。根据StackOverflow Insights的数据,它也是过去几年来最受欢迎的编程语言之一。

Go对于Python初学者来说也是非常棒的一门语言。它格外的简单,甚至代码维护起来更容易。有意思的一点是,Go开发者是市场上收入最高的程序员之一。

Julia是一门非常新的语言,可以与Python一较高下,它填补了大规模技术计算的空白。在大规模计算中,人们通常会使用Python或Matlab,然后用C++库进行修补。现在,只用Julia就可以了,不用再在两种语言之间来回切换。

虽然市场上有其他语言,但Rust、Go和Julia是修复Python弱点的语言。

所有这些语言都擅长于未来的技术,尤其是人工智能。虽然它们的市场占有率仍然很小,但从StackOverflow标签的数量能够准确的看出,它们上升的趋势都很明显。

考虑到目前Python的普遍流行,这些新语言要想取代它,肯定要花上五年,甚至整整十年的时间。

那么,取代Python的将是哪一种语言?Rust、Go、Julia,还是未来的新语言?

目前还很难说,但考虑到Python架构中的性能问题,必然会有一种语言取代它的位置。

正方:你的观点漏洞百出

反方一辩陈述完毕,接下来,是正方的观点。

用户miraculixx针对Moutafis的文章,发起了猛烈攻击,也获得了高度关注——2.1K的赞。

miraculixx直接开门见山:

这篇文章有够烂的。你喜欢Rust、Go和Julia?那就去写它们好了,不要来抨击Python。

而后,直接提出了七大错误之处。

Python并不慢

首先,速度有两个组成部分。

其一,你写出想要的程序有多快,这是客户和大多数开发人员真正关心的。Python对于一个命令行语言来说,它的速度是非常快的,大多数其他语言所需要的时间要长得多。

其二,是执行速度。正如你所指出的,在很多情况下,这几乎不重要,但当它有需要的时候,Python既有内置的工具来加速,也有广泛的工具生态系统来实现native速度 (与编译后的 C 代码相同)。

Python确实可以并行运行多个任务

与大多数其他语言不同,Python代码非常容易并行运行,还可以跨大型节点集群运行,这对于云计算来说非常好。

内置的多模块处理,可以在本地和远程节点上运行。还有别的工具,如Celery、IParallel、Dask等,让并行运行代码变得轻而易举。

缩进,作为代码块的分隔符,对任何项目来说都是一种优势

因为这样就能确保代码看起来与个人偏好无关,意味着更好的可读性,这通常会增加可维护性。

无论你有1个还是100个开发者,Python都很好用

大多数项目都只有1-5个开发者,而且,Python的模块化方法使得重构代码变得非常容易。

模块化是构建大型可维护软件产品的关键成功因素。

静态类型不是可扩展团队的关键因素

根据我的经验,静态类型的影响如果不损害协作能力的话,也能忽略的。

团队实际开发过程中的细节情况,超过出了你写的评论,一言以蔽之:静态类型很难做到处处都是对的,当出现一些明显的异常问题的时候,还是需要更多人加入到团队来解决。

团队规模越大,沟通成本就越高,以n2的速度增长。也就是说,静态类型实际上限制了生产力,而且我敢说这样做并没有提高质量。

Python并不老

Python最新版本是在2019年第四季度发布的。无论是语言还是它所支持的用例,都不能说是“老”。

你说它不能在浏览器中运行不仅是错误的,而且也没有抓住重点。大多数语言都不能在浏览器中运行,因为Web语言是Javascript。不管你喜不喜欢,事情就是这样。

React、Flutter等都不是编程语言

把不该比较的东西混为一谈,对你文章的可信度并没什么好处。

......

那么,你觉得Python未来的命运会是怎样呢?

“如果发现本网站发布的资讯影响到您的版权,可以联系本站!同时欢迎来本站投稿!

点击排行
睿宝儿科联合富士instax教育:守护儿童健康,共创美好回忆
睿宝儿科联合富士instax教育:守护儿童健康,共创美好回忆

所有家长都希望自己的孩子能够健康快乐的成...

富士instax教育联手三野石孕童摄影,为准妈妈送上“爱的体验”
富士instax教育联手三野石孕童摄影,为准妈妈送上“爱的体验”

摄影的意义在于它能留住生命中美好的瞬间。...

孩子早产脑子发育不良的后果早产儿如何护理
孩子早产脑子发育不良的后果早产儿如何护理

一、早产儿脑部发育不良的并发症  1.心血...

Kipling官宣品牌大使Selina任家萱 携手乐活女神——“轻轻我行,即兴乐活”
Kipling官宣品牌大使Selina任家萱 携手乐活女神——“轻轻我行,

明媚而崭新的春日与3.8女神节共同来临之际...

新生儿水中毒了怎么办怎么给宝宝科学的喂水
新生儿水中毒了怎么办怎么给宝宝科学的喂水

一、婴儿水中毒的症状有哪些  要知道对于...

青紫型新生儿的原因解析新生儿皮肤青紫的6大原因
青紫型新生儿的原因解析新生儿皮肤青紫的6大原因

一、新生儿皮肤青紫的原因  局部青紫  ...

儿童喉咙发炎引起呕吐的原因儿童喉咙发炎引起呕吐的
儿童喉咙发炎引起呕吐的原因儿童喉咙发炎引起呕吐的

  在日常生活之中,小孩子经常会出现喉咙...

16天新生儿黄疸值190高吗新生儿黄疸指数高的原因有哪些
16天新生儿黄疸值190高吗新生儿黄疸指数高的原因有哪些

一、正常新生儿黄疸值是多少  足月出生宝...

黄疸指数高的危害黄疸高怎么治疗
黄疸指数高的危害黄疸高怎么治疗

一、为什么黄疸会偏高  1、新生儿的体内...

小孩出麻疹症状小孩护理措施
小孩出麻疹症状小孩护理措施

  因为宝宝的身体比较弱,抵抗力还没有发...

新生儿脐炎首选抗生素九个步骤轻松护理宝宝的脐部
新生儿脐炎首选抗生素九个步骤轻松护理宝宝的脐部

一、新生儿脐炎首选抗生素  新生儿脐带发...

曼龙,用爱见证传承,一路陪伴成长
曼龙,用爱见证传承,一路陪伴成长

曼龙创始人:“做这个品牌的初衷,只是为了...