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

655人阅读 评论(0) 收藏 举报
分类:

原址

● 每周一言

为人处世,分寸很重要。

导语

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

抛砖引玉

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

fig1

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

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

fig2

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

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

fig3

查看评论

程序员修炼之道系列 - 优秀程序员应该具备的基本要素

作为一名职业程序员,需要总结一下程序员职业发展的基本要素,我们不讨论如何学习一门语言,如何实现高效优质的程序,而是从方法论的角度来看待程序员自身的积累与发展。           作为一名职业程序员首...
  • byhankswang
  • byhankswang
  • 2013年06月26日 17:36
  • 822

做一个成功的程序员的七个要素

一、低承诺,高实现:如果你的承诺确实是管理人员想听到的,他就会喜欢你。但是,如果不能按照承诺及时交付软件,他就不会再喜欢你。 二、不要在软件中放入错误:优秀的程序员不在他们的代码中放入错误。 三、充满...
  • chensheng913
  • chensheng913
  • 2005年04月18日 19:43
  • 5549

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

作为码农界的芸芸众生,我们几乎每天都会接触到各式各样的工程项目。一方面,一些工程项目往往具有相似的实现;另一方面,这些工程又存在一个二次开发的问题。为了提高开发效率,避免重复造轮子,工程级别的代码要求...
  • cherrylvlei
  • cherrylvlei
  • 2017年05月07日 14:46
  • 411

作为一个好的程序员,都需要具备哪些基本的素质和能力

上班第一天我的老板让我做的第一件事 看两篇文章: 程序员随想 雷军 我不是天生的程序员,也并非天生就喜欢电脑,上高中时也没有想过将来会当程序员,接触电脑纯属偶然--小时候的一个好朋友上大学时选择了电脑...
  • netpast
  • netpast
  • 2007年07月26日 13:03
  • 760

优秀程序员的两大要素:懒 + 笨

导读:   懒只有懒惰的程序员才会去编写那些可以最终代替自己工作的自动化工具,才不会成天为了实现相似的功能去编写大段大段冗余重复的代码 - 这种代码往往是软件后期维护和重构的天敌。通常来说,由于惰性...
  • qdashichao
  • qdashichao
  • 2007年08月02日 11:42
  • 169

优秀程序员的两大要素:懒 + 笨

优秀程序员的两大要素:懒 + 笨编辑:未知 文章来源:http://blog.csdn.net/it88blog/archive/2007/09/19/1791818.aspx 懒 只有懒惰的程序员才...
  • heimaoxiaozi
  • heimaoxiaozi
  • 2007年09月20日 17:28
  • 508

一个优秀程序员,必须具备的三点!

近期遇到一些问题,一直思考,一个优秀的程序,应该具备哪些,以下是我总结的三点: 一、韧性(坚持); 只要是做系统开发的人,都会有感触,一个项目不可能是一天、二天完成,小的也几个星期,大的有几个月甚...
  • hsl_hxx
  • hsl_hxx
  • 2017年06月03日 09:06
  • 541

一个好的框架要具备三大原则

1.可读性 2.可维护性 3.可扩展性
  • itpinpai
  • itpinpai
  • 2012年12月03日 18:37
  • 1000

做一个成功的程序员的七个要素

一、低承诺,高实现:如果你的承诺确实是管理人员想听到的,他就会喜欢你。但是,如果不能按照承诺及时交付软件,他就不会再喜欢你。 二、不要在软件中放入错误:优秀的程序员不在他们的代码中放入错误。 三、充满...
  • chensheng913
  • chensheng913
  • 2005年04月18日 19:43
  • 5549

程序设计的基本要素

数类型有:八基本 类定义运算符有  :算数值 比大小 判真假 取赋值 位运算流控制有:两选择 三循环 流跳转 函调用  说明:数据类型主要有boolean char byte int short lo...
  • ironcat
  • ironcat
  • 2006年09月13日 09:00
  • 957
    个人资料
    持之以恒
    等级:
    访问量: 78万+
    积分: 1万+
    排名: 1866
    联系方式
    博客专栏
    文章分类
    最新评论