当前位置: 首页 > 科技观察

Python这么火,为什么它不是未来的编程语言?

时间:2023-03-12 16:18:06 科技观察

本文转载自公众号《读书芯》(ID:AI_Discovery)Python这两年非常火,随处可见的广告让它逐渐成为家喻户晓的存在。尽管在诞生几十年之后,Python并没有被编程社区所重视。然而,它的势头似乎无与伦比。2010年初以来,Python风起云涌——从热度上看,它终于超越了C、C#、Java、Javascript,成为计算机语言中的“大热门”。它很好地为人们服务——但这种趋势会持续多久?Python何时会被其他语言取代?为什么?没有。与其猜测,不如评估当前促进Python流行的优势,以及阻碍其在未来流行的弱点。是什么让Python现在如此流行Python的成功反映在StackOverflow趋势中,该趋势衡量平台上帖子的主题标签数量。鉴于StackOverflow的规模,这确实是一种语言流行程度的良好指标。StackOverflow上各种编程语言的标签快照虽然R在过去几年中趋于稳定,许多其他语言一直在稳步下降,但Python的增长似乎势不可挡。将近14%的StackOverflow问题都带有“python”标签,而且这个趋势还在增长。以下是出现这种情况的几个原因:1.早期出现Python诞生于1990年代左右。这不仅意味着它有足够的时间成长,而且还获得了庞大的粉丝群。因此,如果人们在使用Python编码时遇到问题,很可能只需要一点谷歌搜索就可以解决。只是有些人已经遇到了同样的问题,写了一些有助于解决问题的东西。2.对于初学者Python已经存在了几十年,程序员可以利用这段时间写出好的教程。此外,Python的语法很容易理解。首先,不需要指定数据类型。只需指定变量;Python会根据上下文判断是整数、浮点数、布尔值还是其他值。对于初学者来说,这是一个很大的优势。在C++的情况下,当用浮点值代替整数时程序将无法编译,用过这种语言编程的初学者应该理解这种情况的挫败感。如果初学者曾经并排阅读过Python和C++代码,他们就会明白Python是多么容易理解。尽管C++语言在设计时考虑到了英语,但与Python代码相比,它仍然难以理解。3、用途广泛Python已经存在了相当长的时间,开发者针对不同的用途制作了不同的包。现在,几乎任何东西都可以打包。想要处理数字、向量和矩阵?Numpy是个好帮手。想为技术和工程做计算?使用Scipy。想要完成数据处理和分析?试试熊猫。想入门人工智能?为什么不使用Scikit-Learn。无论人们想要管理什么样的计算任务,都有可能有Python包。从过去几年机器学习的快速发展可以看出,其自身使用的广度已经让Python走在了近期发展的前沿。Python的劣势——以及它们是否致命根据前面的讨论,可以想象Python将在很长一段时间内保持其快速发展的势头。但与任何技术一样,Python也有其弱点。笔者将一一介绍其最值得注意的缺点,并分析这些缺点是否致命。1.速度Python慢??。真的很慢。与其他语言相比,Python完成任务所需的时间要长2-10倍。缓慢的原因有多种。原因之一是Python是动态类型的——请记住,您不需要像在其他语言中那样指定数据类型。这意味着大量的内存,因为程序需要为任何情况下都可以运行的变量预留足够的空间。大量的内存占用会转化为大量的计算时间。另一个原因是Python一次只能执行一个任务。灵活的数据集是有后果的——Python需要保证每个变量只有一种数据类型,并行处理会造成混乱。相比之下,一个普通的网络浏览器可以同时运行十几个不同的线程。还有一些其他的理论。但归根结底,所有速度问题都无关紧要。计算机和服务器很便宜,所以人们谈论的是几分之一秒。最终用户不关心加载应用程序需要0.001秒还是0.01秒。2.作用域最初,Python使用动态作用域。这基本上意味着,为了计算一个表达式,编译系统首先搜索当前块,然后依次搜索所有调用函数。动态作用域的问题是每个表达式都需要在每个可能的上下文中进行测试——这非常乏味。这就是为什么大多数现代编程语言都使用静态作用域的原因。Python试图过渡到静态作用域,但它引起了混乱。通常,内部作用域——例如函数中的函数——将能够查看和更改外部作用域。但是Python中的内层作用域只能看到外层作用域,而不能改变它。这会导致严重的混乱。3.Lambdas尽管Python具有很高的灵活性,但是Lambdas的使用仍然有一定的局限性。在Python中,lambda只能是表达式,不能是语句。另一方面,变量声明和语句始终是语句。这意味着Lambdas不能用于它们。表达式和语句之间的区别是相当随意的,而在其他语言中则不是这样。空格使代码更容易理解,但也使代码更难理解4.空格Python使用空格和缩进来表示代码的不同层次。这使代码在视觉上更吸引人,更直观易懂。其他语言,例如C++,使用更多的花括号和分号。虽然在视觉上没有吸引力并且对初学者友好,但这样做可以使代码更易于维护。对于较大的项目,这有很大帮助。较新的语言如Haskell解决了这个问题:该语言大量使用空格,但为那些不想使用空格的人提供了替代语法。5.移动开发正如我们看到的从台式机到智能手机的转变,很明显人们需要强大的语言来构建移动软件。但是使用Python开发的移动应用程序并不多。这并不意味着使用Python进行移动开发是不可能的——一个名为Kivy的Python包就可以。但是Python没有考虑移动设备。因此,即使它有可能完成一些基本任务,最好还是使用一种为移动应用程序开发而创建的语言。广泛使用的移动编程框架包括ReactNative、Flutter、Iconic和Cordova。需要明确的是,笔记本电脑和台式机应该在未来许多年内继续存在。然而,移动设备在通信量方面已经远远超过了桌面设备,因此可以肯定地说,学习Python不足以成为一名经验丰富的全能开发人员。6、运行错误Python脚本没有遵循先编译后执行的流程。相反,它会在每次执行时编译,因此任何编码错误都会在运行时显示出来。这会导致性能不佳、时间浪费和大量测试。真的很多测试。这对初学者来说是一件好事,因为他们可以从测试中学到很多东西。但对于有经验的开发人员来说,用Python调试复杂的程序会让人感到不知所措。性能不佳是在Python上设置时间戳的最大原因。什么会在未来取代Python——特别是当编程语言市场出现几个新的竞争者时:Rust具有与Python相同的安全性——没有变量会被意外覆盖。但它通过所有权和借用的概念解决了性能问题。根据StackOverflowInsights,它也是过去几年最流行的编程语言。Go非常适合初学者,就像Python一样。它是如此简单,甚至使维护代码变得更加容易。有趣的事实:Go开发人员是市场上收入最高的程序员之一。Julia是一种非常新的语言,可以与Python正面交锋。它填补了大规模技术计算的空白:以前,人们通常会使用Python或Matlab并使用C++库修补整个程序,这是大规模技术计算所需的过程。现在,人们可以使用Julia而无需纠结于两种语言。虽然还有其他语言,但Rust、Go和Julia是弥补Python弱点的语言。所有这些语言都擅长于尚未使用的技术,并且在人工智能方面做得特别好。StackOverflow标签的数量表明,这些语言的市场份额仍然很小,尽管它们未来的上升趋势是明确的。StackOverflow上各种编程语言的标签目前,Python的流行程度可以说是无处不在,肯定需要五年(甚至十年)的时间才能有新的语言来取代它。目前还很难说哪种语言会取代Python(Rust、Go、Julia或未来的某种新语言)。但考虑到Python架构中最基本的性能问题,必须有某种语言来取代它。你怎么认为?