看完后 这个非常有用的(尽管有些争论)问题 我想知道您与Python编程大型项目的经验。随着项目的更大,事情变得不可管理?这种担忧是使我对爪哇依附的一件事。因此,我会对 通知 大型项目的Java和Python可维护性和可扩展性的比较。

有帮助吗?

解决方案

我从事Python制作的大规模商业产品。我给出了5000个文件x 500行的非常粗略的估计。大约是2500万行Python。请注意,该项目的复杂性可能相当于其他语言中的10 mil+代码行。我没有听到一位单个工程师/架构/经理,他们抱怨Python代码是无法实现的。从我从错误跟踪器中看到的内容,我看不到静态类型检查可以避免的任何系统性问题。实际上,根本不正确使用对象类型的错误很少。

我认为这是一个非常好的学术主题,可以从经验上研究为什么基于静态类的语言似乎并不像人们想象的那么关键。

以及有关可扩展性。我们刚刚在我们的产品中的数据库1上方添加了数据库2,它们都非SQL。没有与类型检查有关的问题。首先,我们设计了一个足够灵活的API,以预测不同的基本实现。我认为动态语言在这方面是一种帮助,而不是障碍。当我们继续进行测试和错误修复短语时,我们正在研究任何语言工作的人都必须面对的错误。例如,内存使用问题,一致性和参考完整性问题,错误处理问题。我认为对这些挑战中的任何一个都没有太大帮助。另一方面,我们通过能够在飞行中的代码或简单修补后将代码注入代码,从而从动态语言中受益匪浅。而且我们能够检验我们的假设并迅速证明我们的修复程序。

可以肯定地说,使用Python,我们的100多种工程师中的大多数人都很高兴和富有成效。对于我们来说,在相同的时间内使用静态键入语言构建相同的产品可能是不可想象的,具有相同的质量。

其他提示

根据我的经验,很难维护静态的语言。例如,假设您具有一个实用程序功能,该功能接受自定义类作为参数。如果您采用新的命名约定,则该班级的名称必须更改,然后所有的实用程序功能也必须更改。在像Python这样的语言中,在类上实现相同方法的时间并不重要。

我个人鄙视一种妨碍我的语言。表达您的想法的速度是价值,这是Python比Java所拥有的优势。

Python中没有良好测试覆盖的大型代码基础可能是一个问题。但这只是图像的一部分。这全都与人和合适的方法有关。

没有

  • 源控制
  • 错误跟踪
  • 单位测试
  • 坚定的团队

您可能会失败任何类型的语言。

我记得Intellij Idea创新前后的几天。有很大的差异。之前,静态键入仅用于编译,开发基本上将源代码视为文本文件。之后,源代码是结构化信息,由于静态键入,许多开发任务必须更容易。

但是,这并不像过去的地狱。我们按原样采取了任何必要的操作,请使用迄今为止可用的工具,构建系统,满意度。没有太多不愉快的回忆。这可能就是动态打字程序员现在的感觉。它没有那么坏。

当然,我永远不会回到过去。如果我禁止使用这种IDE,我想我会一起编程。

尝试在一个大型的,动态的框架中追溯到一个明显畸形的对象的来源,该框架具有许多IOC或其他设计模式,在该框架中,该对象无法直接追溯到堆栈上。

现在尝试用静态的语言进行此操作。

除非对象的类型被记录在靠近用途(例如通过类型注释,A-la Python的TypeAfe库)或堆栈上的某个地方进行记录,从而推断出来的地方几乎是不可能的。我从经验中讲话,试图调试BuildBot框架的一部分。它涉及大量的原始文本通过框架搜索,甚至使用诸如Pydev,Komodo和Wingware之类的精美IDE。

我毫不怀疑是否可以对动态语言施加某种类型的约束,但是对此缺乏任何标准化似乎是任何试图调试大型,存在的框架部分的人的障碍。

编辑:自2014年以来,Guido添加了PEP484,MYPY和打字模块。这使我的经验在维护大型项目方面要好得多。

根据我的经验,可维护性取决于低耦合,良好的文档,良好的开发过程和出色的测试。静态键入与任何内容无关。

Java在编译时间捕获的错误只是可能发生错误的一小部分。它们几乎总是通过测试来检测的最微不足道的。如果您正在测试代码会产生正确的答案,则不可能错过在错误类的对象上调用方法!在这方面,您可以说Python实际上是 更好的 确保质量;经过 强迫 您至少要测试一点以确保您的代码没有简单的错别字,它可以确保您实际上 至少测试一点。

实际上,Java甚至不是一个很好的示例,该语言具有强大的静态检查,以捕获很多错误。尝试在Haskell或Mercury中进行编程以了解我的意思,或者更好地尝试在Scala中编程,并与Java库接口;当您使用Scala库与必须处理Java库的代码比较普通的惯用性Scala代码时,编译器能够为您保证的“正确性”的区别在于引人注目(我实际上已经这样做了,因为我编程了A编程A在Android上的Scala中位。

尽管与Scala之类的语言相比,尽管Java的静态错误检测的缺点,但您的许多开发人员在大型代码基础上编写良好的可维护代码的能力依赖于许多开发人员的能力。 完全相同的技术 尽管Python的静态错误检测与Java相比,但Python程序员在其大型代码基础上使用了相同的操作。

我使用Python进行了许多项目,从几百行到数千行。动态打字是一个很好的节省时间,它使诸如多态性的OO概念更容易使用。该类型系统不会使项目无法实现。如果您想象一下,请尝试在Python中写几件事,看看它们的发展。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top