产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

Python 这么完美,但为什么反对者还是不放弃诋毁它?

  • 2021-08-13
  • 本文字数:2785 字

    阅读完需:约 9 分钟

Python这么完美,但为什么反对者还是不放弃诋毁它?

软件开发长期以来一直是一个雷区。


普通人会发现,用传统的编程语言(如 C 和 JAVA)闯入软件领域是很可怕的。


但一旦 Python 加入游戏,这种情况很快就改变了。Python 以其革命性的编程方法在软件开发方面是一个巨大的飞跃。


人们爱上 Python,是因为其简洁性、广泛的库支持和表达能力。因此,像 C 和 Java 这样的语言的统治结束了。

没有什么是完美的。等等,真的吗?

如果你是一个软件开发者,你可能熟悉**权衡(trade-off)**这个词。


每当一个关于编程语言的问题突然出现时,人们通常会得到一个传统的答案:“视情况而定”。


普遍认为没有一种完美的编程语言。等等, 是真的吗?


对我来说,不是这样。我认为 Python 是编程语言中的银弹。


到目前为止,我用过 Python、C、C++、MATLAB、JAVA。Python 是我接触最晚的,但却是最好的。


为了测试 Python,我做了一个实验,并将大多数非 Python 程序转换为 Python。最终的 Python 版本要好得多。


目前,据我所知,Python 在两个问题上一直受到严重批评:


  • 动态类型

  • 速度


虽然我同意这些问题在某种程度上对软件开发有重大影响,但我可以确认,这些大部分是 Python 诞生初期存在的问题。


然而,多亏了 rock-solid 社区,Python 已经演变到几乎与每一种编程语言相当。动态类型和速度不再对编码实践产生重大影响。


Python 可以用来处理任何问题。


如果是这样的话,为什么 Python 还没有被大规模采用呢?


因此,有必要解释为什么动态类型和性能问题是容易被忽略的小问题。

动态类型

为了理解动态类型,最好先理解其反面——静态类型。


静态类型语言有 C、JAVA 等。这些语言与它们的动态类型对应语言之间的主要区别在于类型检查。静态类型是在编译时进行类型检查,而动态类型是在运行时进行类型检查。


注:这是对动态类型和静态类型的平淡定义。其中具体的技术细节超出了本文要讨论的范畴。


由于 Python 的调试问题,以及 Python 语言如何使跟踪 bug 的过程变得比现在更复杂,一些开发人员对 Python 大发牢骚。


这种抱怨源于这样一个事实:作为一种动态类型语言,Python 在运行时标记错误,这使得它比 Java 等静态类型语言更容易出错。


理论上,这是一个威胁,毕竟考虑到一个著名的谚语——是人都会犯错。但是在实践中,我怀疑类型错误有没有他们声称的那样严重。


说真的,现在谁还犯类型错误?


静态类型语言远不是一个无障碍的调试避风港。除了类型错误之外,大多数静态类型语言都无法捕获到你可能认为应该检测到的细微错误。这些错误同样发生在静态类型和动态类型中。


此外,几乎没有代码会不经过单元测试就部署。单元测试可以很好地防范类型错误。只有极少数情况下,类型错误会绕过单元测试来搞乱代码。在调试方面,编程语言的另一个特性是安全类型和不安全类型。允许用户重写系统类型的语言被认为具有不安全的类型——例如 C。虽然不安全的类型给了用户对类型的控制,但它的误用会导致程序任意崩溃。


大多数静态类型语言都是不安全的类型系统。然而,JAVA 是一种安全类型语言。Python 和我所知道的其它动态类型编程语言也是如此。


最后,我更愿意使用像 Python 这样方便和高级的语言编写一百万次代码,而不是陷入 JAVA 等语言的低级细节中。

速度

可怜的 Python 总是笑着接受性能批评。如果你是在一场编程语言辩论中,我几乎可以保证,一旦你开始赞美 Python,你就会受到性能打击。这是真的。嗯,在某种程度上。


对于原始或标准 Python 比 C 或 JAVA 慢这一事实,我不会争论。但正如我之前所说,有一个像 Python 一样勤奋和创新的社区,不要害怕。


Python 与其静态类型的竞争对手之间的性能差距在过去几年中急剧缩小。JIT 编译和并行计算方面的进步使 Python 赶上了它的竞争对手。


许多变通方法都是为了解决 Python 的性能问题而开发的。例如:


  • 将实现从CPython更改为PyPy可以显著提高执行速度。有时候,PyPy 甚至能超越 C。


注意:CPython 是你从Python.org下载的实现。


  • 抑制GIL使得 Python 能够并行执行序列,从而提高计算速度。

  • JIT 编译器Numba。只要把 Numba 装饰器放在你的函数上,就可以看着它以光速运行了。

  • 许多 Python 库(例如 Numpy 和 Scipy)是用 C/C++编写的。


如您所见,性能是一个反对 Python 的过时论据。有了这些解决方案,除了赞叹 Python 充满活力的社区之外,别无选择。


但是,为什么有些人仍然不喜欢 Python,而喜欢使用老式的 JAVA 之类的东西呢?

为什么不向 Python“投降”?

首先,这有一篇让我咯咯笑的 quora 帖子。



来源:Quora


显然,有些人没有也不会认真对待 Python。真有趣!


无论如何,我个人认为阻止 Python 大规模采用的是人们对待编程的心态。换句话说,问题不在于编程语言,而在于人。


你看,Python 的出现是为了让编程更容易,更重要的是,为了节省时间


你可能在想,“我用 JAVA 写代码,好好的。我为什么要用 Python?”好吧,你当然不需要,但是要知道,如果你投资 Python,你将能够充分发挥你的编码潜力,而不是陷入 JAVA 的低级混乱中。


Python 是开源的、干净的、对用户友好的。用一个好的文本编辑器,你甚至可以让你的代码比英文文本还漂亮。Python 并不期望有什么回报,只是一点儿欣赏。


Python 可能太好了。我个人认为是这样。


人们仍然使用 C 和 JAVA 的原因是一个古老的信念——努力工作是有回报的。我不会撒谎说这个信念是错误的。但是,我想表达的是“努力工作会有回报”只是放在了错误的属性上。相反,这句话应该放在 Python 上。


事实上,JAVA 和类似的语言是跳转到 Python 之前的一个很好的热身。他们会让你更成功地使用 Python。


此外,在死板的程序员眼中,向 Python 的转换并不是一个选项,例如,曾协助 C 启动,并从那时起就一直被困在 C 中。一个真正随着语言成长并在其起伏中支持它的开发人员不太可能放弃这门语言。


我敢肯定,这些值得尊敬的开发人员不会改变他们的想法,即使在极端情况下——例如,发布一种自己写代码的编程语言。


事实是,“适应”说起来容易做起来难。

最后的一些想法

软件开发是一个令人入胜的领域。它总是让你保持警觉。


因此,你应该随时准备好武器来反击任何对你最亲爱的编程语言的批评。否则,你就要看着它中弹。知识和经验是你的最好的武器。


编程曾经是一个非常困难的领域,但现在由于 Python 的出现,它对每一个人来说都是一个开放的世界。


“Python 可以教给孩子们” — Guido Van Rossum


我个人认为 Python 是一种完美的编程语言。Python 在可读性方面胜过所有编程语言。当然,一个糟糕的 Python 程序员会产出糟糕的代码。但是,我觉得那些糟糕的代码会比这些人用另一种语言编写同样的代码的糟糕程度好得多。


坦白地说,我从未遇到过 Python 与另一种编程语言相比黯然失色的情况。也许将来我会。如果我做了,我会重新忏悔。


如果 Python 不是开源的,人们会指责我为 Python 打广告。


参考


文章的灵感来源于《计算机的进步》一书和作者的经历。

作者介绍

Mohammed Ayar,科技爱好者。区块链倡导者。撰写编程、数据科学与加密货币相关的文章。


原文链接:


https://towardsdatascience.com/python-is-perfect-why-anti-python-developers-wont-give-up-326ae1a09e7f

2021-08-13 09:004657
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 533.8 次阅读, 收获喜欢 1976 次。

关注

评论 5 条评论

发布
用户头像
Python之父都不会这么想。。。可能因为这帮特别的粉丝,Guido都离开Python BDFL
2021-08-21 21:38
回复
用户头像
听君一席话,不如去看书
2021-08-16 15:44
回复
用户头像
国外也有为了骗回复率而挑起争论的啊。

普通人会发现,用传统的编程语言(如 C 和 JAVA)闯入软件领域是很可怕的。

2021-08-16 15:30
回复
用户头像
这种就是只讲一部分不讲重点,屁用没有
2021-08-15 10:58
回复
用户头像
最讨厌这种没有营养的文章
2021-08-13 09:53
回复
没有更多了
发现更多内容

你们单测覆盖率是如何统计的?原理是什么?

派大星

测试 单元测试 Java 面试题 互联网大厂面试 单测覆盖率

BSN-DID研究--主题一:DID API

BSN研习社

区块链 did

浅谈JVM整体架构与调优参数

华为云开发者联盟

JVM 华为云 Java虚拟机 华为云开发者联盟 企业号2024年4月PK榜

Kyligence 正式加入华为“同舟共济”行动计划,成为行业数智化“联盟级伙伴”

Kyligence

远程桌面管理软件:Apple Remote Desktop中文版下载

Rose

新质生产力崛起,运营商前端运营如何跃升

鲸品堂

前端 运营 运营商

无线LED显示屏的崛起:探索其带来的无限可能

Dylan

通信 科技 LED显示屏 全彩LED显示屏 led显示屏厂家

Waves混音效果全套插件:Waves 14 Complete完美破解版及安装教程

Rose

2D动画设计制作软件:cartoon animator4安装教程 含Cartoon Animator破解补丁

Rose

第45期 | GPTSecurity周报

云起无垠

HTTP/1.1协议中的响应报文

百度搜索:蓝易云

云计算 Linux 运维 HTTP 云服务器

Databend 开源周报第 138 期

Databend

Redis开源协议调整,我们怎么办?

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号2024年4月PK榜

Word 2021 LTSC for Mac永久版 含word2021激活工具

Rose

ubuntu22安装和部署Kettle8.2

百度搜索:蓝易云

Linux ubuntu 运维 kettle 云服务器

Astute Graphics:提升设计效率与创造力的强大插件工具集

Rose

Studies for Mac(mac学习记忆工具)v1.8.7直装版

Rose

人人都是创造者!李彦宏2024年首场演讲剧透,这三大方向不容错过

飞桨PaddlePaddle

百度 BAIDU 飞桨 文心大模型 PaddleX

AI时代:看低代码如何赋能金融创新,开启交易新时代

快乐非自愿限量之名

人工智能 AI 金融

cad 2024 mac下载 cad设计绘图软件,AutoCAD 2024破解版安装教程

Rose

ubuntu安装指定版本:nodejs

百度搜索:蓝易云

云计算 Linux ubuntu 运维 云服务器

HTTP/1.1协议中的八种请求

百度搜索:蓝易云

云计算 Linux 运维 HTTP 云服务器

SQLynx发布3.0.0版本:带来更流畅便捷的SQL开发体验

先锋IT

ubuntu创建自定义开机服务

百度搜索:蓝易云

云计算 Linux ubuntu 运维 云服务器

产品经理能力模型

执于业务

原型图设计思路总结

执于业务

详解数仓对象设计中序列SEQUENCE原理与应用

华为云开发者联盟

数据库 华为云 华为云开发者联盟 华为云GaussDB(DWS) 企业号2024年4月PK榜

Python这么完美,但为什么反对者还是不放弃诋毁它?_AI&大模型_Mohammed Ayar_InfoQ精选文章