Go对Python产生的冲击

1,571 阅读5分钟

感谢久关不弃。

本文简单聊一下我对Go的一些思考,非技术向。

Go的流行让以Python为主流语言的开发者(比如我)产生了一定的危机感。上一次有这种危机感还是做Android开发的时候,当时用Java做Android开发,Google强推Kotlin让我有比较强的危机感,加了很多Android开发者交流群,大家都说工作难找,后来我就转Python了。

就目前观察而言,Python的流行不会那么快的衰减,很多非开发人员会以Python作为首门编程语言来学习,Python简单上手的特点在这里发挥出巨大的优势,但了解的越深会体会到Python在工程方面的乏力,一个很具体的例子就是Web方面,虽然最近出现了测试覆盖率100%的FastApi框架,但整体形势依旧不太乐观。

Python的异步机制一直让人诟病,听过多位资深Python开发者吐槽Python在asyncio上存在的问题,就我了解而言,很少有公司会在生成环境使用asyncio,太多迷惑行为以及限制了,目前生产环境要用异步,依旧首选gevent,多年的东西,更新也不是特别频繁,依旧是现在的首选,从这点也可以看出Python在异步方面很不给力。

Python还有很多缺陷,这里不再多费笔墨,但一个事实是,「每个编程语言深入后,都可以提出很多缺陷」,但比较让人悲观的是Python社区的运作方式,其松散的运作方式让很多重要却具有较大难度的功能难以被推进与实现。当然,我个人能力有限,在社区也无丝毫贡献,所以也无话可说。

虽然吐槽了Python,但Python还是一门值得学习的编程语言,特别是作为非技术人员的首门语言。

回到本文的主题。

  • 1.为什么Go对Python产生了冲击?
  • 2.为什么很多公司开始从Python转Go?
  • 3.为什么Java对Python造成不了这么大的威胁?

先回答第三个问题,虽然Java比Python快上不少,但在「多技术联动的时代,这种差距的影响在缩小」,而Python在开发效率上比Java高出不少,让更多人倾向于选择Python。

假设Java比Python快10倍,执行相同逻辑Java需要1ms,而Python需要10ms,差距似乎很大啊,但一个项目通常不会只使用编程语言完成逻辑操作,比如数据库使用MySQL,数据库操作可能要花费60ms,那么相同的逻辑,Java项目需要61ms,而Python项目需要70ms,此时相差9ms,注意这9ms的速度落差对于整体项目时间的比重并不大,可以说编程语言速度上的差距会因为一个项目中使用多种不同的工具而降低影响。

另一个原因是,选择Java通常是开发大型Web项目,此时会从架构、易维护、易读等不同角度考虑,这并不是Python web开发的主战场,中小型Web项目才是。

综上所述,Java对Python的冲击并不大。

为何Go会产生这么大的冲击呢?

Go的运行速度确实比Python快很多,但核心原因却是Go语言上手难度低、开发效率高,使用Go开发一个Web系统是很快的,语言层面支持异步,让初学者不必了解太多技巧,循规蹈矩的开发就可以获得一个性能不错的Web系统。

在早几年,Go的周边工具链还不完善,所以影响没那么大,但经过今年发展,Go已经全方位跟上了Python的步伐,从这点也可以看出,一个开源项目的背后有个商业公司的益处,对项目会有较强的推动性。

在Web领域,Python在Go面前几乎没啥优势...

为什么很多公司要从Python转Go?

Go的众多优势是一个明显的原因。

此外很多公司的项目因为历史原因,还是使用Python2.7开发的,2020年,Python官方宣布停止对Python2.7的支持,让很多公司不得不考虑升级成Python3,尴尬的是,Python3并没有向后兼容Python2,所以升级会存在风险,此时Go风头正盛,简单易用性能好的特性越发深入人心,这就产生了「升级Python3还不如使用Go重写的想法」。

注意,上述讨论都是针对于Web领域,而Python在数据分析与机器学习等领域依旧是一流语言,但遗憾的是,这几个领域并不太依赖于Python多样化的语法糖,而更侧重该领域特有的一些知识,如数学、统计学等等。

至此,结论已经很明显了,如果你想找Web方面的工作岗位,我建议你学习Go。

这几天,公司开发任务比较重,在开发过程中遇到了一些比较耗费心力的Bug,同时学习到很多有趣的知识,后面几篇文章会分享一下Docker底层原理与Kafka相关的内容,漫画版呦!

最后,感谢你的关注与阅读,我们下篇文章见吧。