Julia设计模式
上QQ阅读APP看书,第一时间看更新

2.2 程序开发中不断增长的痛点

“从现在开始,用你所拥有的,尽你所能去做。”

——Arthur Ashe

每个人的经历都不一样。Julia是一种通用的动态编程语言,可以在许多有趣的用例中使用。更具体地说,你可以使用它轻松地编码和解决问题,而无须过多地考虑系统架构和设计。对于小型研究项目,这通常就足够了。但是,当项目的业务逐渐变得复杂且重要时,或者当你必须将概念验证实施到生产环境中时,它就需要更好的组织、架构和设计,使项目或应用程序可以生存更长的时间,并且更具可维护性。

我们通常处理哪些项目?让我们来看几个例子。

2.2.1 数据科学项目

一个典型的数据科学项目始于从一组数据中学习并做出预测的想法。许多前期工作涉及数据收集、数据清理、数据分析和可视化,然后将数据进一步提炼,作为机器学习模型的输入。这样的过程称为数据工程。数据科学家选择一个或多个机器学习模型,并继续完善和调整模型,以达到预测模型的良好准确性。这个过程称为模型开发。当模型准备好用于生产时,将对其进行部署,有时会为最终用户创建一个前端。最后的这个过程称为模型部署。

通常数据工程和模型开发过程在一开始时可以是交互式的,但是最终会变得自动化。那是因为该过程必须是可重复的,并且结果必须是一致的。数据科学家在开发过程中可能会使用多种工具,从Jupyter Notebook到一系列相关的库和程序。

当预测模型准备投入生产时,可以将其部署为Web服务,以便可以将其用于实时预测。在这一点上,这个模型将具有生命周期并且还需要维护,就像其他生产软件一样。

2.2.2 企业应用程序

与数据科学项目不同,开发企业应用程序的人有不同的心态。软件工程师通常预先了解应用程序的需求。他们还知道是否必须遵守某些假设和规则。例如,项目启动时可能已经知道技术栈。可能已经熟悉将要使用的系统架构,将利用哪个云供应商,应用程序必须与哪个数据库集成等。

企业应用程序通常需要丰富的业务领域对象模型。数据对象被创建、操纵并转移到应用程序的不同层。该系统架构可以包括用户界面、中间层和数据库后端。

企业应用程序还倾向于要求与其他系统的高度集成。例如,投资公司使用的交易系统通常与会计系统、交易结算系统、报告系统等挂钩。这些应用程序通常被设计为处理静态数据(如存储在数据库中的数据)或动态数据(如将数据流传输到另一个系统)。此外,数据移动可能会实时发生,也可能会在一整夜的批处理过程中发生。

2.2.3 适应增长

无论你开发哪种应用程序,都应该不难发现不断增长的痛点。

对于数据科学项目,以下信号通常表示与增长有关的问题:

·“我的Notebook记得太长了。我经常需要上下滚动才能了解以前做过的事情以及现在正在做的事情。在两者之间创建了太多的变量,我无法理解它们的含义以及如何使用它们。”

·“数据结构太复杂。我正在研究一个数据帧,并以十种不同方式对其进行转换。我现在已经不知道哪个转换版本表示什么以及为什么它们在刚开始的时候需要转换。”

·“我已经在硬盘上保存了一堆机器学习模型,而我已经不知道每个模型的训练方式以及对每个模型进行了哪些假设。”

·“我在许多Notebook上散布了太多代码。某些代码被复制或调整是出于稍微不同的目的。我现在无法得到一致的结果了。”

对于企业应用程序,可能会出现类似的症状:

·“应用程序逻辑太复杂,并且其中有个巨大的组件拥有许多函数。”

·“在不破坏现有功能的情况下添加新功能变得越来越困难。”

·“一个新人要花很多时间才能理解该模块中的代码,而且同一个人也需要时不时地重新去学习它。”

处理没有组织的代码和数据没有什么意思。如果你发现自己说了一些前面的短语,那么现在可能是个重新考虑策略并开始正确组织程序的好时机。

现在,让我们通过与Julia更好地组织代码来开始我们的学习之旅。在进行高级开发工作之前,我们将介绍命名空间的概念,并介绍如何创建模块和包。