【转】建立公用程序库,提升软件开发生产力

   当我们谈及软件开发的生产力时,其实有相当多的因素在影响着。举凡程序人本身的素质、所使用的程序语言、应用程序框架(Application Framework)的选择、是否具备好的开发工具(例如IDE、程序代码产生器)、对开发环境的熟悉程度、开发方法论、甚至到更无形的团队士气,都会影响到软件开发的生产力。

有些因素影响生产力甚巨,例如程序人的素质、程序语言、应用程序框架的好坏等等。好的程序人和不好的程序人,生产力相差个几十倍也不令人意外;而像C/C++之类的程序语言,与Java这种新兴程序语言相较起来,使用起来,生产力也会有数倍的差距。至于像RoRRuby on Rails)这样的应用程序框架,近来更是以快速开发著称而广为流行。

以更少的时间达成相同功能的开发
想要提高程序开发生产力,有几个可能的途径:一、精要、高阶的抽象表述力;二、避免犯错或者容易找出错误;三、自动化规则性的动作;四、避免做重复的事;五、打字速度快。

高生产力的程序语言、应用程序框架,之所以能带来帮助,无非是因为它们往往提供了更精要且高阶的表述方式,使得程序人可以用更短的程序行来描述一件相对复杂的事情。

同样地,高生产力的程序语言及应用程序框架,也能够避免程序人犯下一些隐晦难解的错误。程序人们往往过于在意用于撰写程序代码的时间,却忽略了耗费在解决错误的时间。但是,事实上,当你在程序中埋下了隐晦难解的错误时,往往需要付出数十倍于撰写程序代码的时间,或甚至更多时间,才有办法加以解决。

对于下面的这件事也许你经验丰富:只花了些许的时间,便完成了程序代码,但却花了极为漫长的时间,才找到一时大意所埋下的地雷。预先的错误防范,或者事后的加速追踪,都对开发生产力有极大的帮助。

倘若你既选用了生产力高的程序语言及应用程序框架,也尽可能地善用程序代码产生器,那么想要显著提升生产力的重责大任,大概就会落到如何避免做重复的事上头。

厘清重复使用程序代码的各种可行性
面向对象的设计方法之所以大行其道,正是因为这个方法观察到程序代码重复运用(Code Reuse)对生产力所带来的好处。可是,大多数的程序人因为拘泥于面向对象,一想到程序代码的重复运用,往往直接联想到透过继承方式取得的重复运用。

然而,大多数情况下,除非我们设计的是应用程序的框架,或者是某种特殊应用的类别库,否则设计的类别之间并不会存在太多或太复杂的继承阶层关系。

这自然意谓着,透过继承而得到的重用程序代码数量,不致于太多,因此不太可能透过它提升非常多生产力。

可是,当你跳脱出「用继承取得可重复使用的程序代码」的想法后,或许会发现到,重复运用许多在开发过程中会需要的公用程序,也是提高生产力的主要来源。

我留意到一个现象:现在的程序人多半都会利用现成的链接库来协助自己加快开发的脚步,但程序人们鲜少建立自己的链接库。这很奇特,因为在日积月累、诸多项目的开发经验中,总是会查觉到,有一些代码段,总是会一而再、再而三的重复发生。

你的系统中所会运用到的程序代码,依据来源大致上可以区分为三类:一、应用程序所专用,必须重新开发;二、现成的链接库;三、并非前二者,却又很频繁地出现在各项目中。

在你的各个项目中,倘若有那种出现得很频繁、又不存在于现成链接库中的程序代码,却未加以捕捉、整理,那么,对你来说,这些程序代码等于是在每个项目中,都必须重新一一写过。

再短的程序代码,重新实作都需要时间
以我的经验来说吧,时常要在表示日期的字符串与表示日期的对象(例如Javajava.util.Date)之间进行转换。虽然像java.text.SimpleDateFormat已经提供了大部分所需的功能,但实际上的需求又多过于它所能提供的。例如,我希望可以自动猜测要转换成Data对象的格式,究竟是yyyy-MM-ddyyyy/MM/ddyyyyMMdd,甚至要能允许可选择性的提供时间部分(HH:mm:ss)或是不提供时间部分(注:yyyyMMddHH:mm:ss,为约定成俗的一种日期与时间表示方式,例如JavaC#)。虽然,这只是一个很小的功能,但是倘若没有捕捉到这段程序代码重复发生的特性,因而未加以整理,那么我就会在接下来的每个项目中,反复地重新撰写。

又好比,利用Java开发基于Swing的应用程序,我们时常需要将窗口、对话窗之类的组件置于画面的正中央。这也许只需要十行左右的程序代码就能完成,但是同样的道理,如果没有留意到它的重复性,并加以整理,仍然得在大大小小的项目里重新加以实作。

又好比,我们时常要把一个整数值,表示成中文的数字写法(零、一、二、……)、把一个浮点数表示成百分比的字符串呈现(例如:把0.75表示成75%)、将HTML中的所有Tag都去除,只留下文字……等等。

这些程序代码因为功能小,所以现成的链接库大多没有涵盖,因为这些链接库多半着墨在较完整的主题,例如像log4j乃是针对日志记录的主题而设计的链接库。对于零零散散的重复需求,很少能够找到现成的链接库。

虽然重新实作的程序代码看似不多,但是因为它们都是需求重复性高的程序代码,因此重复实作的次数就多,对生产力造成的伤害当然就大。而且,对生产力造成的伤害还不仅于此,因为每次程序人都得重复写下类似的程序代码,这些重新写过的程序代码同样可能出错,同样都需要被测试甚至耗费除错的时间。两项时间加总起来,许多宝贵的开发时间便因此暗自流失。

汇整常用的代码段,建立个人或团体的公用程序库
因此,我想给许多程序人一个建议:开始累积自己的公用程序库(Utility Library)。

你不用追求一次到位,立即整理出一个好用的公用程序库,只需要在开发的过程中,逐步观察是否发生了重复性的代码段。倘若有,便利用「重构(Refactoring)」中提炼函式或提炼类别的技巧,将它们从应用程序的程序代码中萃取出来,放到你自己的公用程序库中。

如果是在一个开发团队中,这个公用的链接库应该是采取团队共享的模式,相关的议题就会更多,包括:应该要制定一个维护公用程序库的简单流程,例如通知那一位协调者,如何撰写说明文件、如何测试那些即将加入链接库的公用程序以维护质量、如何确保不会对公用程序库的其他程序产生副作用、如何管控公用程序库的版本,以及管理已开发、开发中的应用系统之间的组态等。

善用公用程序库是一门积小成大、聚少成多的学问。像是许多项目累积、沉淀后的公用程序码,它们并不是程序人单凭想象写下「疑似」会被重复使用的程序代码,而是真正通过实战考虑的可重用程序代码。打造自己专属的利器,使用起来也更顺手,不是吗?

作者简介:
王建兴
清华大学资讯工程系的博士研究生,研究兴趣包括计算机网络、点对点网络、分布式网络管理、以及行动式代理人,专长则是Internet应用系统的开发。曾参与过的开发项目性质十分广泛而且不同,从ERPPC GameP2P网络电话都在他的涉猎范围之内

转载于:https://www.cnblogs.com/phcis/archive/2008/01/10/1033086.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vim使用指南

1 删除 https://www.jianshu.com/p/ab7936af747c 转载于:https://www.cnblogs.com/zhaoyz/p/8341231.html

C语言编程规范 clean code

目的规则并不是完美的,通过禁止在特定情况下有用的特性,可能会对代码实现造成影响。但是我们制定规则的目的“为了大多数程序员可以得到更多的好处”, 如果在团队运作中认为某个规则无法遵循,希望可以共同改进该规则。参考该规范之…

DataWhale组队-Pandas(下)缺失数据(打卡)

1.缺失值概要 数据的缺失主要包括记录的缺失和记录中某个字段信息的缺失,两者都会造成分析结果的不准确,以下从缺失值产生的原因及影响扥方面展开分析。 (1)缺失值产生的原因 1)有些信息暂时无法获取,或…

状态机——protothreads

状态机——Protothreads 宗旨:技术的学习是有限的,分享的精神是无限的。 一、prothreads的优缺点 优点: 1. 以纯C语言实现,无硬件依靠性;因此不存在移植的困难。 2. 极少的资源需求,每个Protothread仅需要…

南橘北枳

春秋战国时期,智者晏子曾经说过一句话:“桔生淮南为橘,生于淮北为枳”,说的是淮南香甜的橘子移植到淮北就变成苦涩难吃的枳。因为事物的条件和环境等变了,所以才会这样。这句话现在大多是针对人品说的,大概…

CentOS经常使用文件操作命令[百度博客搬家]

路径操作的CentOS经常使用命令 如今整理例如以下(百度博客搬家) cd pwd NO1. 显示当前路径 [rootrehat root]# pwd NO2. 返回用户主文件夹 [rootrehat root]# cd NO3. 改变到其他路径 [rootrehat root]# cd /etc NO4. 返回到上一级文件夹 [rootrehat root]…

Apache配置SSL证书服务器傻瓜步骤

在LinuxApacheOpenSSL中配置SSL安全证书认证是不难的,我的另一篇工作随记中曾提到[url]http://www.host01.com/article/server/00070002/0621409075193649.htm[/url]中有所有步骤,不过其中的一些描述有点复杂,并且依赖关系也没有这些严格。这…

用C语言字符画圆

用C语言画圆,这是一是算法的问题,我们知道,程序是由数据结构加算法组成的,研究这类东西,其实也是研究算法的问题,是比较有意思的。圆心为0的时候,圆的公式公式:那我们要如何写代码呢…

Datawhale组队-pandas(上)基础(自学)

Pandas是Python的核心数据分析支持库,提供了快速灵活、明确的数据节后,旨在简单、直观地处理关系型、标记型数据。Pandas的目标是称为Python数据分析时间与实战的必备高级工具,其长远目标是称为最强大、最灵活,可以支持任何语言的…

Linux C目标文件

LinuxC目标文件 宗旨:技术的学习是有限的,分享的精神是无限的。 一、目标文件格式(ELF格式) 编译器编译源代码后生成的文件叫做目标文件。目标文件是已经编译后的可执行文件,只是还没有经过链接的过程。 PC平台流行…

Win2003下Exchange2003部署图解之七

Exchange 2003 基本配置在邮件服务器SERVERVM下打开“第一个存储组”,(这里我们只看到一个缺省的存储组,在Exchange2003标准版中我们只能建立一个存储组,而企业版中我们可以建立4个存储组)选择“邮箱存储”&#xff0c…

嵌入式Linux操作UART实例

1引言串口是我们实际工作中经常使用的一个接口,比如我们在Linux下使用的debug串口,它用来登录Linux系统,输出log。另外我们也会使用串口和外部的一些模块通信,比如GPS模块、RS485等。这里对Linux下串口使用做个总结,希…

Datawhale组队-Pandas(下)文本数据(打卡)

一、string类型的性质 1.string和object的区别 string类型和object不同之处有三: 字符存取方法(string accessor methods,如str.count)会返回相应数据的Nullable类型,而object会随缺失值的存在而改变返回类型某些Se…

sql语句遇到的问题

分别统计所有男同学的平均分,所有女同学的平均分及总平均分 //SELECT AVG(score),name,(SELECT AVG(score) FROM student) as 总平均分 from student GROUP BY sex; 按照分数从小到大的顺序打印分数大于总平均分的学员信息(id-name-sex-score),并将分数大于总平均分…

新唐单片机代码评审总结

昨晚上,我们一个同事组织了一个小会议,大家一起讨论了一个项目的单片机代码,这个单片机用的是新唐单片机,期间大家也讨论了一些问题,总结一下,希望对写单片机的同学们有帮助。我这个同事写的代码非常优秀&a…

Linux直接与编译安装Vsftpd服务器

1、VSFTPD简述如果试问哪种FTP服务器最安全?那么在UNIX和Linux中,首推的就是VSFTP(Very Secure FTP Daemon,非常安全的FTP服务器)。顾名思义,VSFTPD设计的出发点就是安全性。同时随着版本的不断升级&#x…

main函数

main函数 宗旨:技术的学习是有限的,分享的精神是无限的。 Linux下运行的程序多数是带参数的,例如ls –l等。一般来说,所有程序代码都是从main函数开始执行的。 main函数 (1)函数原型 int main(int argc,…

Datawhale组队-Pandas(下)分类数据(打卡)

Categoricals是pandas的一种数据类型,对应于统计学中的Categorical variables(分类变量),分类变量是有限且固定的可能值,例如:gender(性别)、血型、国籍等,与统计学的Cat…

【分享】一个集成tracert和ping的网络监测工具

最近接到一个需求,需求背景是这样的:目前Windows平台下本身都有tracert和ping的实现,而且可以直接在cmd下使用。 需求中有两个要求: 1. Windows平台中的tracert执行速度太慢,一次tracert可能要花十几分钟。所以&#x…

秀操作 | 函数宏的三种封装方式

作者:☆星轨★ 链接:https://blog.csdn.net/qq_35692077/article/details/1029949591. 函数宏介绍函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压…