最近,咱们总在吐槽Python:“尽管它是一种不错的言语,但不适用于专业范畴。”
前不久,我在LinkedIn上找到一篇帖子,首要建议初级开发人员应该学习哪种言语,以便取得更好的作业时机,Python凭借出色的体现稳居榜首。
其它证据同样标明:Python的确太受欢迎了!近来,TIOBE编程社区发布了“2023年8月编程言语排行榜”。
数据显示:Python仍然排名榜首,占比13.33%;C言语紧随其后,排行第二,占比11.41%;C++位列第三,占比10.63%,与C言语距离为0.78%。
此外,Java和C#别离排在第四和第五位,占比别离为10.33%和7.04%。JavaScript在本月仍然保持榜单第六位,占比为3.29%。
尽管Python如此受欢迎,但它能否继续盛行依旧是一个重大问题,许多用户普遍以为,假如继续运用将会使职业倒退好几年。
1、限制:Python无法开发大型运用程序
Python关于开发大型运用程序不太友爱,在工程化实践中需求特别的技能支撑。
“我曾用Python编写过大型运用程序许多年。因为Python入门十分简略,在编写大型运用程序时就像用乐高积木构建核反应堆一样。”原作者在文章中形象地比喻道。
“可是,现在‘反应堆’现已运转好久,辐射泄漏处处都有,咱们需求处处‘贴新砖’让‘反应堆’继续运转。”
实践上,现在唯一能做的就是将“反应堆”封装在混凝土中让它冷却下来,然后再用适宜的建筑材料构建出一个新的。
以为“Python无法开发大型运用程序”的网友以为它“不太友爱”,在工程化实践中需求特别技能支撑。
也有反对者以为:在大型项目中,与影响更大的其它因素比较,编程言语的语法、语义、范式等简直无关紧要。团队经历和熟悉度、开发办理、流程、实践、支撑工具、文档、言语生态体系、言语成熟度、办理支撑等都会对项目成果产生更大的影响。
别的,从技能层面来讲,质疑Python无法开发大型编程言语只能反映发问者对相关开发缺乏了解。这些质疑一是源于Python的动态类型特性,使类型揣度变得困难,对代码的静态查看和重构十分不利;二是因为Python代码没有编译进程,因而短少编译时查看过错机制。
关于动态类型特性质疑,Python从3.3版本起就引进类型声明,因而,只要遵循规范编写代码,类型揣度和代码重构就不是问题。
不久前,ChatGPT的问世也证明了Python能够写出高功用、可扩展性强的大型分布式核算渠道—Ray。现在,这个渠道已会聚超越1亿的月活泼用户。
“糟糕的运用程序架构是绝大多数运用产生功用瓶颈的原因,而不该该由开发言语来背黑锅。”有些评论者这样以为。
2、速度慢
固然,Python与其它开发言语比较,在运转速度方面的确落后不少。究其根源,仍是因为Python之父以为不需求过多重视Python的速度问题,以为它现已足够快了。
的确,关于99%以上的任务来说,Python的速度够快,快到足以支撑早期Google和Dropbox。
自那时起,Python的速度又有了明显提升,但开发者仍要求Python运转得更快。因为,不管人们现已运用Python构建出算力多么惊人的核算渠道,它的核算才能在许多场景下仍然更慢。
3、功用差
当然,Python是一种灵敏的和duck类型的言语:咱们键入代码、保存它,然后仅在运转时才干依据输入的数据确认语句一直有用、有时有用仍是根本不可能完成。
此外,你在用Python编写程序时,只能部分操控进入该函数的数据,需求严格查看一切输入的数据。
更糟糕的是,Python的duck式输入办法可能会引进“可怕”代码,这会带来麻烦。
4、过错百出
我在用Python编写大型运用程序的这些年里,经历过一些可怕的作业;假如这些运用程序是用理性的、安全的言语编写的,这些事就不会产生。
*在几年前的一个比如中,我设法说服安排用Rust重写体系,作用十分不错!
实践上,我曾多次在社区中发布用Python编写的大型运用程序新版本,成果却立即被过错“吞噬”;这些过错都是由Python代码反常导致的。
*Python的保卫者会说,这不是言语的缺点,而是代码审查和测验办法的缺点。
*他们错了!理论上,测验办法首要是查看每一行代码并查看每个输入和场景,但实践上这并不可能!
好的编程言语的特点之一是:你不用查看和测验内存中每个相关方位的摆放;假如有必要翔实地查看和测验每个“a=b+c”,程序将可能永远无法运用于实践。
我会常常查看Python函数,并想了解是否有人实践调用了它们以及携带了哪些参数。
我也常常不得不“求助”代码库的全文查找功用寻找调用方位;不幸的是,即便没有输出任何成果,当我删除相应函数时,程序仍然会溃散;就算程序没有立即溃散,也无法判断程序是否会在某种情况下溃散。
5、分叉进程,耗尽内存
用Python的另一个问题是内存。我的笔记本电脑有10个CPU内核,其间,Python运用程序大约占用1.2个。
这该怎么办呢?走运的是,我能够在Python中运用分叉作业进程的功用处理请求,确保一切核心都能正常运用。
不幸的是,分叉进程的操作很快就耗尽了内存,所以我决定在处理完一定数量的请求后自行终止分叉,然后由Linux进行内存办理。尽管这并不是Python自身的问题,但Python使内存办理变得更加糟糕。
分叉作业进程还有另一个影响:Python运用引证计数法击败了写时仿制。为操控引证计数,保存只读变量的内存块也被写入,从而耗费了一定的内存。
处理这个问题的有用办法是:让编译器对一切由主进程创建和由worker进程继承的变量运用参阅数值,而不用触及到具有该参阅数值的引证计数。
这是超级聪明的处理方案,但我以为应该没这个必要。假如你需求破解编译器才干让Python为你所用,那这种言语又有什么用呢?
总归,Python使编写牢靠、易于保护和快速的代码变得十分困难。
6、将Python替换成GO
当我对Python忍无可忍之时就会转向Go,它运用起来简直与Python同样容易、安全,还能快速构建体系并生成高度优化的二进制本机代码文件。
尽管Go也并不是完美的,可是,假如你想牢靠和快速地编写代码,并在代码失控时能够调试和重构,Go比Python好许多!
相关内容拓宽:(技能前沿)
近10年间,甚至连传统企业都开始大面积数字化时,咱们发现开发内部工具的进程中,大量的页面、场景、组件等在不断重复,这种重复造轮子的作业,糟蹋工程师的大量时刻。
针对这类问题,低代码把某些重复出现的场景、流程,具象化成一个个组件、api、数据库接口,避免了重复造轮子。极大的提高了程序员的生产功率。
一款程序员应该都知道的软件JNPF快速开发渠道,选用业界抢先的SpringBoot微服务架构、支撑SpringCloud形式,完善了渠道的扩增基础,满足了体系快速开发、灵敏拓宽、无缝集成和高功用运用等归纳才能;选用前后端分离形式,前端和后端的开发人员可分工合作负责不同板块,省劲又快捷。
体会官网:www.jnpfsoft.com/?juejin 还没有了解低代码这项技能能够体会学习!