本文经AI新媒体量子比特(公众号ID:QbitAI)授权转载,转载请联系出处。人生苦短,我应该选择Python吗?编程语言这些年更替,榜单竞争愈演愈烈,时不时顶不住黑马……至于Python,从2010年初开始就风生水起,其流行度已经超过了C、C++、Java等古老的编程语言。所以问题是:这种趋势会持续多久?为什么最终会被其他语言所取代?网友们就Python是否是未来的语言展开了激烈的争论。缺点:必然会有一种语言取代Python一位名叫RheaMoutafis的网友认为,Python不会是“未来的编程语言”。该视图在发布后仅几天就收到了10.2k个赞。他从“受欢迎的原因”、“缺点”和“何时何地被取代”三个方面进行了阐述。为什么Python现在这么流行?Moutafis认为,Python的成功部分体现在StackOverflow的趋势上。该平台衡量已发布帖子中主题标签的数量,考虑到它的大小,这是“流行编程语言”的一个很好的指标。从图中可以看出,R语言在过去几年一直处于稳定增长的状态,而其他语言,像C#、C++、Java、JavaScript等,则有下降的趋势。几乎14%的StackOverflow问题都带有“Python”标签,而且这个趋势还在上升。根据Moutafis的说法,这有三个原因。首先,Python也被认为是一种老式的语言。Python从90年代就出现了,这不仅意味着它有足够的发展时间,也意味着它拥有庞大而强大的社区支持。所以大家在用Python编程的时候,如果遇到什么问题,上网搜索一下,大概率可以解决。因为很可能在你之前,已经有人遇到过同样的问题,并在网上留下了宝贵的意见。其次,Python对初学者很友好。对此,并不是说它已经存在了几十年,给了程序员足够的时间来写教程。但是Python的语法特别容易阅读。比如你不需要指定数据类型,只需要声明一个变量,Python会根据上下文理解这个变量是属于整数、浮点数、布尔值等。这对初学者来说是一个巨大的优势。如果你用过C++,你可能会经历这样的痛苦:程序跑不出来,可能只是因为一个浮点数被指定为整数……而且,如果你对比阅读Python和C++的代码,你会可以深刻体会到理解Python代码是多么的容易。最后,Python被广泛使用。自从Python出现以来,开发人员开发了几乎每个领域和目的的包:想要处理数字、向量和矩阵?Numpy是您的首选。想做技术和工程计算?了解SciPy。想发展您在数据处理和分析领域的技能吗?熊猫值得一试。想涉足人工智能?Scikit-Learn真香(推荐...)。无论你想处理什么样的计算任务,Python几乎都有一个包。从近几年机器学习的风起云涌,不难看出Python一直走在发展的前沿。Python的缺点是致命的吗?当然,没有任何技术是完美的,Python也不例外。Moutafis列出了六个最重要的缺陷,并评估了它们是否致命。第一,速度(Speed)。平均而言,用Python运行一个任务所需的时间是其他语言的2-10倍。为什么会这样?原因之一是它是动态类型的。前面说过,你不需要指定数据类型,这意味着它需要使用大量的内存,因为程序需要为每个变量预留足够的空间,以保证它在任何情况下都能工作。而大量的内存使用意味着大量的计算时间。另一个原因是Python一次只能执行一个任务。这是灵活数据类型的结果——Python需要确保每个变量只有一种数据类型,而并行进程可能会把它搞砸。相比之下,一般的Web浏览器一次可以运行12个不同的线程……但归根结底,这些速度问题都不重要。现在计算机和服务器非常便宜,以至于用户并不真正关心他们的应用程序加载时间是0.001秒还是0.01秒。二、范围(Scope)。最初,Python是动态范围的。这基本上意味着,要计算一个表达式,编译器首先需要搜索当前块,然后依次搜索所有调用函数。动态作用域的问题是每个表达式都需要在每个可能的上下文中进行测试。这是一个相当繁琐的过程,这就是为什么大多数现代编程语言都使用静态作用域的原因。就此而言,Python试图过渡到静态作用域,但它搞砸了:通常,内部作用域能够查看和更改外部作用域,但在Python中,内部作用域只能查看外部作用域,而不能更改它们。第三,拉姆达。尽管Python具有很大的灵活性,但Lambdas的使用相当有限。Lambda在Python中只能是表达式,不能是语句。此外,变量声明和语句始终是语句,这意味着Lambda不能与它们一起使用。表达式和语句之间的这种区别可以说是相当随意的,不会出现在其他语言中。四、空格(Whitespaces)。在Python中,您可以使用空格和缩进来指示不同级别的代码。这使得它在视觉上具有吸引力且易于理解,而其他语言(例如C++)则更多地依赖花括号和分号。虽然这可能不吸引人或对初学者不友好,但它使代码更易于维护。这对于更大的项目更有用。较新的语言如Haskell解决了这个问题:它们依赖于空格,但同时为那些不喜欢使用空格的人提供了一种替代语法。五、移动开发(MobileDevelopment)。随着应用程序从桌面转移到移动设备,很明显我们需要强大的语言来构建移动软件。但是用Python开发的移动应用程序并不多。Python不是为移动开发而设计的,即使它在基本任务上能取得不理想的结果,最好还是选择一门专门为移动开发的语言,比如ReactNative、Flutter、Iconic和Cordova。需要明确的是,笔记本电脑和台式机在未来一段时间内仍将存在。但是由于移动端流量已经超过了桌面端流量,可以说学习Python并不足以让你成为全能开发者。第六,运行时错误。Python脚本不会被编译然后执行。相反,它会在每次执行时编译,因此任何编码错误都会在运行时显示出来。这会导致性能不佳、耗时且需要大量测试。这对初学者来说很棒,因为测试可以教会他们很多东西。但是对于有经验的开发者来说,这可能不是什么好事。未来,什么时候以及为什么会取代Python在编程语言市场上,又出现了一批新的竞争者:Rust提供了和Python一样的安全性——没有变量会被意外覆盖。但是它用所有权和借用的概念解决了性能问题。据StackOverflowInsights称,它也是过去几年最流行的编程语言之一。对于Python初学者来说,Go也是一种很棒的语言。非常简单,连代码都更容易维护。有趣的是,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既有内置工具来加快速度,也有广泛的工具生态系统来实现本机速度(与编译的C代码相反)。Python确实可以并行运行多个任务与大多数其他语言不同,Python代码非常容易并行运行,甚至可以跨大型节点集群运行,这非常适合云计算。内置多模块处理,可以在本地和远程节点上运行。还有其他工具,如Celery、IParallel、Dask等,可以让并行运行代码变得轻而易举。缩进作为代码块的分隔符,对任何项目都是有利的,因为它确保代码看起来独立于个人喜好,这意味着更好的可读性,这通常会增加可维护性。无论您有1名还是100名开发人员,Python都能很好地工作大多数项目只有1-5名开发人员,而Python的模块化方法使重构代码变得非常容易。模块化是构建大型可维护软件产品的关键成功因素。静态类型不是可扩展团队的关键因素根据我的经验,静态类型的影响即使不损害协作也可以忽略不计。团队实际开发过程的细节超过了你写的评论。一句话:静态类型很难处处正确。当出现问题时,需要更多的人加入团队。解决。团队规模越大,沟通成本越高,以n2的速度增加。也就是说,静态类型实际上限制了生产力,而且我敢说它不会提高质量。Python并不古老。Python的最新版本于2019年第四季度发布,无论是语言还是它支持的用例都不能说“老”。您关于它在浏览器中不起作用的说法不仅是错误的,而且没有抓住要点。大多数语言都不能在浏览器中运行,因为网络语言是JavaScript。不管你喜不喜欢,事情就是这样。React、Flutter等不是编程语言。混淆不应该比较的东西不利于你文章的可信度。...那么,您认为Python未来的命运会是怎样的呢?
