Python再度夺冠,嵌入式领域的未来之星?

发表时间: 2023-09-05 09:02

8月29日,IEEE Spectrum发布2023年顶级编程语言排行榜,在排行中,Python愈加拥有统治地位,一度成为嵌入式的得力竞争者,嵌入式开发的未来就在Python了吗?


IEEE Spectrum公布了三类榜单,虽然每种榜单的权重有所不同,但得出的结果却极为接近。


作者丨付斌

出品丨电子工程世界


学Python,有未来?

IEEE Spectrum的综合排行中,Python、Java、C++、C、JavaScript、C#、SQL、Go位列前八,Python极具统治地位,流行度指标一度碾压第二的Java。


其实Python早蝉联多年榜首,其丰富的库和框架,如Pandas、Scikit-learn等成为其最大的竞争优势,在近两年表现强势,但需要注意的是,C、C++、C#等大型语言相加的总和是超过Python的,同时这几种语言也在特定维度拥有更好的流行度。


6~10名的编程语言排名发生了较大变动。最明显的是,微软的C#语言从2020年的第25位跃升至第6名,或与2020年年底发布的C# 9.0 、尚在襁褓的Windows 11以及开发者对分布式系统的兴趣持续增长有关;HTML也进入了前十,位列第9;Arduino和Matlab则跌出前十。



在就业语言使用排行中,SQL摘得桂冠,其次才是Python、Java、JavaScript、C++、C#、C等。


曾经作为查询数据库的SQL,无疑是现在就业市场最基本的技能,而事实上,大多雇主更希望应聘者在掌握其它语言,诸如Python、C、Java的基础上,同时具备SQL能力。



语言发展趋势榜单中,Python表现依然强势,与位列第二和第三的Java和JavaScript拉开巨大差距。



IEEE Spectrum强调,Python的已经成为万能语言,并在特定领域成为佼佼者,就比如,人工智能领域。此外,虽然摩尔定律对于高端数字芯片的提升已遇瓶颈,但MCU依然深受其影响,从而提升性能,这意味着一个价值0.7美元的CPU上,就有足够的计算能力让Python进行嵌入式开发,尽管解释器的开销很大。


当然,IEEE Spectrum还特别提示,不能过于迷信榜单,一方面,多数情况公司都要求工程师同时掌握Python和SQL,另一方面,各种C和Java语言综合的受欢迎程度远超Python,特别对于一些高性能的任务,解释器的开销还是过大。


很多工程师时常会发问,嵌入式,现在上车Python,有未来吗?而在EEWolrd论坛中,也不缺乏观望Python的学生,想要通过熟练掌握Python,作为嵌入式的敲门砖。


颇具争议的Python


事实上,Python已经大火很多年了,回顾过往,2012年~2014年云计算烧起一把火,大批创业公司和巨头起风,催生大量Python岗位;2014年~2015年,北京大街小巷挤满了创业者,O2O、P2P是无人不知的口号,Python开发速度一个顶仨,自然而然成为当时的主流;2016年~2017年,AlphaGo又引燃了业界一把火,AI/ML的首选语言就是Python;这两年,几乎每个人都听说过用Python写爬虫这件事,Python的话题也不断涌现。


究其原因,是因为它入门简单,同时在于人工智能、数据分析、Web、自动化测试和运维表现优异:

  • 人工智能:Python是一种用LISP和JAVA编译的语言,按照Norvig文章中对Lips和Python的比较,这两种语言彼此非常相似,仅有一些细小的差别;
  • 数据分析:大数据时代,数据可以说明一切,现在很多做数据分析并没有那样简单,Python语言成为了做数据分析师的第一首选,它同时可以给工作带来很大的效率;
  • Python Web网站工程师:Web一直是不可忽视的存在,我们离不开网络,离不开Web,利用Python的框架可以做网站,而且都是一些精美的前端界面,还有我们需要掌握一些数据的应用;
  • Python自动化测试:Python语言对测试帮助非常大,自动化测试中Python语言用途很广,可以说Python太强大,掌握和熟悉自动化的流程,方法和我们总使用的各个模板,到现在为止Python使用最多的应该是自动化测试;
  • Linux运维:用Python实现的测试工具及过程,包含服务器端、客户端、web、andriod、client端的自动化测试,自动化性能测试的执行、监控和分析,常用selenium appium等框架。


Python之父吉多·范罗苏姆也曾豪言:“Python在爬虫、数据分析、AI、ML、Web开发、金融、运维、测试等多领域都有不俗表现,从来没有哪一种语言可以同时在这么多领域扎根。”


在嵌入式开发中,Python一般以MicroPython的形态所出现,对于Python进行嵌入式开发,工程师们众说纷纭。


中立派对它的评价是,Python要么是用在数据分析,再者就是Web、人工智能、自动化办公,其它领域还是没法工业化应用。


也有人评价:“Python简单易学, 第三方模块超多,但是缺点也很明显:,即解释执行, 打包问题,项目管理和发布等。”


更有甚者称,Python是一种胶水语言,不要再被它所忽悠了,并在EEWorld论坛中引发大面积讨论。


反对者称,Python主要特性是调用C语言的程序包较为容易,所以有很多人把各种C语言的程序库修改成Python能够调用的包。总结来说,Python有两大硬伤:


一是解释执行效率的硬伤。


Python是一种动态语言,解释执行,就如同JavaScript一样,JavaScript是网页里嵌入的特定领域语言,目前也在被新的编程体系取代(webassembly,可以由其它语言编译而来)。


现在,很多解释执行的语言都有被静态编译语言取代的趋势,GOlang有可能取代Java,Rust有可能取代C/C++,webassembly有可能取代JS。Java、C/C++,JS都是目前的主要生产语言,就是可以用来写大型的应用的语言。


Python是后来者,主要用来写简短的、临时性的试验代码。例如,在写软件时可能需要临时处理文本格式或统计数据,此时就没有必要使用工作语言临时建立工程,这种情况用Python,很好。所以在大型商业(开源)软件基本见不到Python。


二是没有专业的软件库,基本是第三方语言库。


如绘图软件库,Python只能使用其它语言库,往往C语言等语言的库都比较底层,如果Python想拿来使用时需大量的封装代码,需要很多专业知识,新手(或只懂Python)很难做到,对于需要扩展程序库的功能基本上就没法解决,所以Python不能独立完成一个大型复杂项目。


此外,编写大型软件时,Python代码的组织结构很不友好,阅读起来费劲,Python的高级语法和其它语言也一样很不好理解的。对于专业程序来说,只掌握程序语言知识并不能写出能赚钱吃饭的程序,必需要有其它体系知识,就像嵌入行业不知道高低电平、上拉下拉电阻一样,职业程序员不是只写打印个字符三角形、求解个一元二次方程之类的教学程序,而是涉及大量行业知识。


反对者强调,“Python对于专业程序员来说可有可无,学与不学都无所谓,不要被那些做培训的忽悠,这些人只是为了让你交钱而已,才不管你是不是要吃饭的。对于想成为专业程序员还是学JAVA、C/C++、C#靠谱。”


辩论者则认为,即便不在嵌入式领域,Python代码的执行效率依然较慢,这一点早已被诟病,但执行速度并非一切,现如今,CPU算力普遍过剩,良好的代码结构远比堆叠CPU参数更为直接,何况主流CPU和MCU平台性能已远超以往,成本不断下降。不止如此,MicroPython的生态环境和开发效率都极具优势,不能忽略它们所带来的隐形福利。


也有人称,早期QBasic这种解释型语言,也很简单,作为语言,最终目的是开发程序,只要能实现功能,开发又便捷,何尝不是一种首选。也许Python不适用于大型商业应用,但在小应用上依然存在使用价值。更何况,使用第三方库的可不止Python一个,VB.net、C#、Java哪个不是需要第三方库。


一些Python的使用者,也反应了其中的问题。一是Python2到Python3语法不兼容,二是用Python处理二进制数据就会产生很多误导,每次都要查语法。

对于Python的诟病重重,但又连连夺冠,虽然从教育机构,到媒体,再到工程界,不缺乏极力推崇Python进入嵌入式开发的人,但又有许多专业人士不断给出证据,证明Python缺乏专业性。

当然,除了嵌入式开发,Python在IC设计中也有大作用,简单来说就是EDA环节中编写流程设计插件或是作为EDA工具的扩展,Peal能做的事,Python都能做,而且代码更易读、更易理解,但文本处理比Perl麻烦一些。

Python一定是好用的,能在很多领域发挥不俗的作用,但反观现在就业环境,C/C++和Java的地位依然屹立不倒,也许目前最稳妥的方法,依然还是掌握C/C++或Java。

参考文献


[1] The Top Programming Languages 2023 Python and SQL are on top, but old languages shouldn’t be forgotten.2023.8.29.https://spectrum.ieee.org/the-top-programming-languages-2023

[2] EEWorld论坛:http://bbs.eeworld.com.cn/thread-1193555-1-1.html

[3] EEWorld论坛:http://bbs.eeworld.com.cn/thread-1173450-1-1.html

[4] 橙子物联网:Python在嵌入式领域有没有前途?.2021.3.1.https://mp.weixin.qq.com/s/nVH9pnEQ5pPZoGEv4i-HOA