写点什么

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:004688
用户头像
刘燕 InfoQ高级技术编辑

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

关注

评论 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
回复
没有更多了
发现更多内容

面向高性能计算场景的存储系统解决方案

Baidu AICLOUD

异构计算 云原生存储 AI加速

妙啊!美团 OCTO 分布式服务治理系统,这描述也太清晰了

冉然学Java

Java 分布式 美团 #技术干货# Java 开发

实时计算基本概念解析

五分钟学大数据

实时计算 7月月更

专注B2B跨境支付的背后,XTransfer的风控基础设施是如何炼成的?

XTransfer技术

TiKV主要内存结构和OOM排查总结

TiDB 社区干货传送门

故障排查/诊断

NFT卡牌链游系统Dapp开发搭建

薇電13242772558

NFT 链游

TIME的新封面:元宇宙将改变一切

智捷云

元宇宙 Metaverse 智捷云 智捷云科技

图文并茂,讲解TCP和UDP协议的原理以及区别

程序知音

程序员 网络 TCP/IP 后端技术 底层原理

转转监控系统的内部原理及实践 审核中

转转技术团队

监控 Prometheus

优博讯助力深圳打造全球“鸿蒙欧拉之城”

Geek_2d6073

CSS 炫酷文本过渡动画

南城FE

CSS css3 前端 7月月更

转转微服务框架的连接管理

转转技术团队

微服务 RPC 服务治理

Ticmp - 更快的让应用从 MySQL 迁移到 TiDB

TiDB 社区干货传送门

性能测评

如何做好研发精益需求管理

思码逸研发效能

研发管理 研发效能 科技

TiDB 在多点数字化零售场景下的应用

TiDB 社区干货传送门

实践案例 社区活动 TUG 话题探讨

NFT挖矿分红系统开发模式定制

开发微hkkf5566

SeekTiger的Okaleido有大动作,生态通证STI会借此爆发?

鳄鱼视界

一文读懂Elephant Swap的LaaS方案的优势之处

西柚子

黄东旭:TiDB的优势是什么?

TiDB 社区干货传送门

人物访谈

TiCDC 架构和数据同步链路解析

TiDB 社区干货传送门

数据库架构设计 6.x 实践

TiDB之rawkv升级之路v5.0.4-->v6.1.0

TiDB 社区干货传送门

迁移 版本升级 集群管理

阿里JAVA架构师面试136题含答案:JVM+spring+分布式+并发编程!

程序知音

Java 程序员 java面试 后端技术 八股文

JAVA编程规范之日志规约

源字节1号

后端技术

算法题每日一练---第5天:星系炸弹

知心宝贝

算法 前端 后端 7月月更

面试突击67:说一下 TCP/IP 协议?以及每层的作用?

王磊

Java 面试

SENSORO 付刘伟:创新技术服务为基层政府筑造数字底座

SENSORO

人工智能 大数据 物联网 城市大脑 数字政府

开幕在即 | “万物互联,使能千行百业”2022开放原子全球开源峰会OpenAtom OpenHarmony分论坛

OpenHarmony开发者

OpenHarmony

多商户系统的直播功能用过吗?用过的朋友扣个 666!

CRMEB

Spring Cloud 与 K8s 的微服务设计

Damon

7月月更

万物皆可柯里化的 Ramda.js

掘金安东尼

前端 函数式编程 7月月更

C# 窗体应用DataGridView,使用数据库(Sql和MySQl)对DataGridView绑定数据源,获取数据

IC00

C# 7月月更

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