一个好的算法工程应该具备哪几点要素?

来源:互联网 发布:航天数据股份有限公司 编辑:程序博客网 时间:2024/06/06 12:37

原址

● 每周一言

为人处世,分寸很重要。

导语

作为码农界的芸芸众生,我们几乎每天都会接触到各式各样的工程项目。一方面,一些工程项目往往具有相似的实现;另一方面,这些工程又存在一个二次开发的问题。为了提高开发效率,避免重复造轮子,工程级别的代码要求通常比较高。而作为一名算法从业者,我想在这里谈一谈一个好的算法工程应该具备哪几点要素。

抛砖引玉

项目经验不同、语言熟练程度不同、算法实现能力不同的人,对于一段相同功能的代码实现也会有所不同。毛爷爷说过,凡事就怕认真二字。因此这里我们不妨抛开这些短时间难以改变的差异,谈一谈只需要通过认真就能做到的几点,而这几点也正是一个好的算法工程所应具备的要素。 

fig1

其一,功能模块代码层次分明。 
实现一个数据挖掘的算法工程,从底层数据输入到顶层结果输出,至少需要这四步:数据预处理、特征提取、模型训练、模型预测。这四步就是四个功能模块,而每个功能模块之间的代码只有层次分明才能做到在二次开发的时候,不牵一发而动全身。

其二,抽象功能与具体功能分开实现。 
抽象和具体的区别,面向对象里面已经被说透了。在算法工程中,比如数据预处理模块的输入,有可能是日志、数据库、或者集群数据,如果对每一种数据源的预处理都单独来写,后期代码的修改与扩展将会变得混乱且容易出错。因此,需要剥离抽象功能与具体功能,这里的抽象功能是指结构化的数据字段接口,而具体功能指的则是对接各种具体数据源的接口实现类。 

fig2

其三,逻辑实现有较清晰注释。 
最难懂的代码,并不是别人的代码,而是没有注释的代码,甚至包括自己的代码。在算法工程项目中,由于模型需要升级换代,常常需要阅读前人所写代码,自己的代码也有可能留给后人阅读。由于不同人的思维习惯、语法习惯不尽相同,展现出来的代码有可能大相径庭,因此一定要写注释,尤其是逻辑实现部分,注释越清晰越好。

其四,功能模块输入输出可配置化。 
对于算法工程的复用和交接,可配置化算是一个最直接的诉求了。功能模块的输入输出可配置化,意味着趋近零的学习成本,让项目在新的场景下能很快地实现部署和运行。具体而言,输入输出可配置化的参数包括但不限于数据类型、数据位置、比较条件、处理方式等。 

fig3

原创粉丝点击