7

我是一个有点高级的 C++/Java 开发人员,最近对 Python 产生了兴趣,我非常喜欢它的动态类型和高效的编码风格。我目前使用它来满足我的小型编程需求,例如解决编程谜题和编写脚本,但我很好奇是否有人在企业级项目中成功使用过 Python?(最好使用现代编程概念,例如 OOP 和某种类型的设计模式)

如果是这样,你能否解释一下你为什么选择 Python (特别是),并给我们一些你从这个项目中学到的经验教训?(随意比较在项目中使用 Python 与 Java 等)

4

2 回答 2

17

我正在使用 Python 开发复杂的保险承保应用程序。

我们的应用软件本质上以公司可以订阅的形式重新包装了我们的精算模型。这项业务基于我们的精算师和他们的深刻思考。我们没有打包一个相对固定的聪明算法。我们通过网络服务将我们的精算大脑出租给客户。

  1. 精算师必须能够自由地做出改变,因为他们可以更深入地了解导致索赔的各种因素。

    • 静态语言(Java、C++、C#)会导致早期锁定数据模型。

    • Python 允许我们拥有一个非常灵活的数据模型。他们可以自由地添加、更改或删除因素或信息源,而无需大量开发成本和复杂性。鸭子打字允许我们引入新作品而无需大量返工。

  2. 我们的软件是一种服务(不是一个包),所以我们面临着无穷无尽的集成问题。

    • 静态语言需要复杂的映射组件。通常是某种可配置的、由 XML 驱动的从客户消息到我们不断变化的内部结构的映射。

    • Python 允许我们将映射作为一个简单的 Python 类定义,我们只需对其进行调整、测试并投入生产。这个模块没有任何限制——它是一流的 Python 代码。

  3. 我们必须进行广泛的、长期运行的概念验证。这些涉及许多具有不同数据馈送和定制功能的“假设”场景。

    • 静态语言需要大量仔细的计划和思考才能创建另一个演示,从另一个客户提供的文件到我们精算模型的当前版本的另一个映射。

    • Python 需要的计划要少得多。Duck typing(和 Django)让我们轻松完成一个演示。数据映射是简单的 python 类定义;我们的精算模型处于相当稳定的变化状态。

  4. 我们的商业模式需要经过一定程度的谈判。我们与信息提供者的合同相当复杂;这些不会像精算模型那样经常变化,但这里的变化需要定制。

    • 静态语言绑定了关于合同的假设,并且需要相当复杂的设计(或变通方法)来处理谈判交易的商务人员的大脑屁。

    • 在 Python 中,我们使用了一个广泛的测试套件,并随着各种合同条款和条件的渗透而进行了大量的重构。

    每周我们都会收到一个问题,例如“我们可以处理像 X 这样的规定吗?” 我们的标准答案是“绝对”。接下来是一个小时的重构,以确保如果交易以这种形式达成,我们可以处理它。

  5. 我们主要是一个 RESTful Web 服务。Django 做了很多开箱即用的工作。我们不得不编写一些扩展,因为我们的安全模型比 Django 提供的更严格。

    • 静态语言不必提供源代码。不喜欢安全模型?向供应商支付 $$$。

    • 动态语言必须作为源发布。在我们的例子中,我们花时间仔细阅读 Django 的源代码,以确保我们的安全模型完全适合 Django 的其余部分。我们不需要HIPAA 合规性,但无论如何我们都在构建它。

  6. 我们使用来自信息提供商的网络服务。urllib2 很好地为我们做到了这一点。我们可以快速地对接口进行原型设计。

    • 使用静态语言,您拥有 API,您编写、运行并希望它有效。开发周期是编辑、编译、构建、运行、崩溃、查看日志;这只是为了增加接口并确保我们拥有正确的协议、凭据和配置。

    • 我们在交互式 Python 中练习界面。由于我们以交互方式执行它,我们可以立即检查响应。开发周期缩短为运行、编辑。我们可以在一个下午完成一个 Web 服务 API。

于 2009-03-23T11:11:11.120 回答
3

我一直在世界上最大的银行之一中使用 Python 作为分布式计算框架。之所以选择它,是因为:

  • 开发和部署新功能的速度必须非常快;
  • 它必须易于与 C 和 C++ 集成;
  • 代码的某些部分将由专业领域是数学建模而不是软件开发的人编写。
于 2009-03-23T10:06:25.017 回答