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

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"软件开发长期以来一直是一个雷区。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"普通人会发现,用传统的编程语言(如C和JAVA)闯入软件领域是很可怕的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但一旦Python加入游戏,这种情况很快就改变了。Python以其革命性的编程方法在软件开发方面是一个巨大的飞跃。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"人们爱上Python,是因为其简洁性、广泛的库支持和表达能力。因此,像C和Java这样的语言的统治结束了。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"没有什么是完美的。等等,真的吗?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你是一个软件开发者,你可能熟悉**权衡(trade-off)**这个词。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"每当一个关于编程语言的问题突然出现时,人们通常会得到一个传统的答案:“视情况而定”。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"普遍认为没有一种完美的编程语言。等等, 是真的吗?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"对我来说,不是这样。我认为Python是编程语言中的银弹。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"到目前为止,我用过Python、C、C++、MATLAB、JAVA。Python是我接触最晚的,但却是最好的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"为了测试Python,我做了一个实验,并将大多数非Python程序转换为Python。最终的Python版本要好得多。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"目前,据我所知,Python在两个问题上一直受到严重批评:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"动态类型"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"速度"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"虽然我同意这些问题在某种程度上对软件开发有重大影响,但我可以确认,这些大部分是Python诞生初期存在的问题。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"然而,多亏了rock-solid社区,Python已经演变到几乎与每一种编程语言相当。动态类型和速度不再对编码实践产生重大影响。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python可以用来处理任何问题。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果是这样的话,为什么Python还没有被大规模采用呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因此,有必要解释为什么动态类型和性能问题是容易被忽略的小问题。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"动态类型"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"为了理解动态类型,最好先理解其反面——静态类型。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"静态类型语言有C、JAVA等。这些语言与它们的动态类型对应语言之间的主要区别在于类型检查。静态类型是在编译时进行类型检查,而动态类型是在运行时进行类型检查。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"注:这是对动态类型和静态类型的平淡定义。其中具体的技术细节超出了本文要讨论的范畴。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"由于Python的调试问题,以及Python语言如何使跟踪bug的过程变得比现在更复杂,一些开发人员对Python大发牢骚。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"这种抱怨源于这样一个事实:作为一种动态类型语言,Python在运行时标记错误,这使得它比Java等静态类型语言更容易出错。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"理论上,这是一个威胁,毕竟考虑到一个著名的谚语——是人都会犯错。但是在实践中,我怀疑类型错误有没有他们声称的那样严重。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"说真的,现在谁还犯类型错误?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"静态类型语言远不是一个无障碍的调试避风港。除了类型错误之外,大多数静态类型语言都无法捕获到你可能认为应该检测到的细微错误。这些错误同样发生在静态类型和动态类型中。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此外,几乎没有代码会不经过单元测试就部署。单元测试可以很好地防范类型错误。只有极少数情况下,类型错误会绕过单元测试来搞乱代码。在调试方面,编程语言的另一个特性是安全类型和不安全类型。允许用户重写系统类型的语言被认为具有不安全的类型——例如C。虽然不安全的类型给了用户对类型的控制,但它的误用会导致程序任意崩溃。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"大多数静态类型语言都是不安全的类型系统。然而,JAVA是一种安全类型语言。Python和我所知道的其它动态类型编程语言也是如此。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最后,我更愿意使用像Python这样方便和高级的语言编写一百万次代码,而不是陷入JAVA等语言的低级细节中。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"速度"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"可怜的Python总是笑着接受性能批评。如果你是在一场编程语言辩论中,我几乎可以保证,一旦你开始赞美Python,你就会受到性能打击。这是真的。嗯,在某种程度上。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"对于原始或标准Python比C或JAVA慢这一事实,我不会争论。但正如我之前所说,有一个像Python一样勤奋和创新的社区,不要害怕。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python与其静态类型的竞争对手之间的性能差距在过去几年中急剧缩小。JIT编译和并行计算方面的进步使Python赶上了它的竞争对手。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"许多变通方法都是为了解决Python的性能问题而开发的。例如:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"将实现从"},{"type":"link","attrs":{"href":"https:\/\/github.com\/python\/cpython","title":"","type":null},"content":[{"type":"text","text":"CPython"}]},{"type":"text","text":"更改为"},{"type":"link","attrs":{"href":"https:\/\/doc.pypy.org\/en\/latest\/release-1.2.0.html","title":"","type":null},"content":[{"type":"text","text":"PyPy"}]},{"type":"text","text":"可以显著提高执行速度。有时候,PyPy甚至能超越C。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"注意:CPython是你从"},{"type":"link","attrs":{"href":"https:\/\/www.python.org\/","title":"","type":null},"content":[{"type":"text","text":"Python.org"}]},{"type":"text","text":"下载的实现。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"抑制"},{"type":"link","attrs":{"href":"https:\/\/cython.readthedocs.io\/en\/latest\/src\/userguide\/parallelism.html?highlight=gil#cython.parallel.parallel","title":"","type":null},"content":[{"type":"text","text":"GIL"}]},{"type":"text","text":"使得Python能够并行执行序列,从而提高计算速度。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"JIT编译器"},{"type":"link","attrs":{"href":"http:\/\/numba.pydata.org\/","title":"","type":null},"content":[{"type":"text","text":"Numba"}]},{"type":"text","text":"。只要把Numba装饰器放在你的函数上,就可以看着它以光速运行了。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"许多Python库(例如Numpy和Scipy)是用C\/C++编写的。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如您所见,性能是一个反对Python的过时论据。有了这些解决方案,除了赞叹Python充满活力的社区之外,别无选择。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是,为什么有些人仍然不喜欢Python,而喜欢使用老式的JAVA之类的东西呢?"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"为什么不向Python“投降”?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先,这有一篇让我咯咯笑的quora帖子。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/aa\/0e\/aa973yy420c82ae3056f4fb88ba7210e.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"来源:"},{"type":"link","attrs":{"href":"https:\/\/www.quora.com\/Is-it-just-me-or-is-Python-actually-a-more-difficult-language-than-Java","title":"","type":null},"content":[{"type":"text","text":"Quora"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"显然,有些人没有也不会认真对待Python。真有趣!"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"无论如何,我个人认为阻止Python大规模采用的是人们对待编程的心态。换句话说,问题不在于编程语言,而在于人。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"你看,Python的出现是为了让编程更容易,更重要的是,为了"},{"type":"text","marks":[{"type":"strong"}],"text":"节省时间"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"你可能在想,“我用JAVA写代码,好好的。我为什么要用Python?”好吧,你当然不需要,但是要知道,如果你投资Python,你将能够充分发挥你的编码潜力,而不是陷入JAVA的低级混乱中。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python是开源的、干净的、对用户友好的。用一个好的文本编辑器,你甚至可以让你的代码比英文文本还漂亮。Python并不期望有什么回报,只是一点儿欣赏。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python可能太好了。我个人认为是这样。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"人们仍然使用C和JAVA的原因是一个古老的信念——努力工作是有回报的。我不会撒谎说这个信念是错误的。但是,我想表达的是“努力工作会有回报”只是放在了错误的属性上。相反,这句话应该放在Python上。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"事实上,JAVA和类似的语言是跳转到Python之前的一个"},{"type":"link","attrs":{"href":"https:\/\/betterprogramming.pub\/dont-start-coding-with-python-begin-with-c-8567ae65948d","title":"","type":null},"content":[{"type":"text","text":"很好的热身"}]},{"type":"text","text":"。他们会让你更成功地使用Python。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此外,在死板的程序员眼中,向Python的转换并不是一个选项,例如,曾协助C启动,并从那时起就一直被困在C中。一个真正随着语言成长并在其起伏中支持它的开发人员不太可能放弃这门语言。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我敢肯定,这些值得尊敬的开发人员不会改变他们的想法,即使在极端情况下——例如,发布一种自己写代码的编程语言。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"事实是,“"},{"type":"text","marks":[{"type":"strong"}],"text":"适应"},{"type":"text","text":"”说起来容易做起来难。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"最后的一些想法"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"软件开发是一个令人入胜的领域。它总是让你保持警觉。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因此,你应该随时准备好武器来反击任何对你最亲爱的编程语言的批评。否则,你就要看着它中弹。知识和经验是你的最好的武器。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"编程曾经是一个非常困难的领域,但现在由于Python的出现,它对每一个人来说都是一个开放的世界。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“Python可以教给孩子们” — Guido Van Rossum"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我个人认为Python是一种完美的编程语言。Python在可读性方面胜过所有编程语言。当然,一个糟糕的Python程序员会产出糟糕的代码。但是,我觉得那些糟糕的代码会比这些人用另一种语言编写同样的代码的糟糕程度好得多。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"坦白地说,我从未遇到过Python与另一种编程语言相比黯然失色的情况。也许将来我会。如果我做了,我会重新忏悔。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果Python不是开源的,人们会指责我为Python打广告。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":" 参考"},{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"文章的灵感来源于《计算机的进步》一书和作者的经历。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"作者介绍"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Mohammed Ayar,科技爱好者。区块链倡导者。撰写编程、数据科学与加密货币相关的文章。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"原文链接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"https:\/\/towardsdatascience.com\/python-is-perfect-why-anti-python-developers-wont-give-up-326ae1a09e7f"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章