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

如果是这样,请解释一下 为什么 你选择了Python (具体来说) 并给我们一些 教训 你从这个项目中学到了什么?(随意比较项目中Python与Java等的使用情况)

有帮助吗?

解决方案

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

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

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

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

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

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

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

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

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

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

    • Python 需要的规划要少得多。鸭子类型(和 Django)让我们可以毫不费力地完成演示。数据映射是简单的Python类定义;我们的精算模型处于相当恒定的变化状态。

  4. 我们的商业模式需要进行一定量的谈判。我们与信息提供商签订了相当复杂的合同;这些变化不像精算模型那么频繁,但这里的变化需要定制。

    • 静态语言绑定了有关合同的假设,并且需要相当复杂的设计(或解决方法)来处理交易谈判中的业务人员的脑筋急转弯。

    • 在 Python 中,我们使用广泛的测试套件,并随着各种合同条款和条件逐渐向我们进行大量重构。

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

  5. 我们主要是一个 RESTful Web 服务。Django 开箱即用地做了很多这样的事情。我们必须编写一些扩展,因为我们的安全模型比 Django 提供的安全模型更严格一些。

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

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

  6. 我们使用信息提供商的网络服务。urllib2 很好地为我们做到了这一点。我们可以快速构建界面原型。

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

    • 我们使用交互式 Python 来练习该界面。由于我们以交互方式执行它,因此我们可以立即检查响应。开发周期缩短为运行、编辑。我们可以在一个下午的时间里搞定一个 Web 服务 API。

其他提示

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

  • 开发和部署新功能必须非常快;
  • 它必须能够轻松地与 C 和 C++ 集成;
  • 代码的某些部分将由专业领域是数学建模而不是软件开发的人员编写。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top