社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

人生苦短,Python会不会被取代?网友吵翻了

51CTO官微 • 5 年前 • 633 次点击  

十三 发自 凹非寺
量子位 报道 | 公众号 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未来的命运会是什么样呢?(欢迎投票或者留言区分享你的观点)


本文经AI新媒体量子位(公众号 ID: QbitAI)授权转载,转载请联系出处。

反方博客:

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

正方博客:
https://medium.com/@miraculixx/clearly-your-knowledge-of-python-is-not-very-extensive-you-just-get-too-many-things-completley-fb42676edcd4


近期热文

☟☟☟


千万别坐北京地铁6号线!“黑科技”简直了

没哭着交过房租的北漂,不足以语人生

技术大牛不幸离世,刚入职OPPO,著有《JavaScript框架设计》


“在看”我吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/61191
 
633 次点击