本文集说的都是些平凡的小事,但往往是这些小事区分了产品的伟大与平庸。
开源世界里有很多英雄式的程序猿,无私的提供这些三方件,不断提升软件开发的效能。向开源致敬。
1.杂谈三方件
(1)三方件对产品的影响
广义上说三方件可以很大,例如:编译器、数据库、操作系统、芯片,本文仅谈狭义的三方件,例如:apache common。
产品选择三方件等效于选择供应商,谈到供应商就涉及很多商务问题,谈到供应商就很容易理解他们对产品的深远影响。
在建筑工程领域,对于供应商的选择有一个“Q.C.D.S”原则,大致就是“质量,成本,交付与服务并重”——参考《柳和玲主编.采购管理.人民交通出版社,2007.7.》
软件领域中,三方件就好像水泥、沙这种基础材料,三方件的选择差不多也是一个意思,一个套路。
图1(2)三方件的套路
开源世界很像小区物业组织的小区市集,这种市集的参与者有三种:
玩票性质:个体程序猿居多,将自己的代码作品共享出来供全世界程序猿免费使用。好像小区业主带着娃搬个小板凳摆个小摊,象征性的半卖半送自己做的小手工。
营销性质:商业公司居多,能够免费使用的代码一般是基础功能,高级功能就要收费了。好比小区新开的水果店摆个摊搞免费试吃,大妈们吃的不错就再买两斤带走。
公益性质:一般是有钱多金的富豪企业,钱挣够了,搞个基金会共享比较大型的软件组件,让全世界程序猿免费使用。和现实世界的富豪们做公益一摸一样。
对于玩票性质的开源项目,请怀揣着敬意,千万不要挑三拣四——站在玩票者的角度,笔者曾经开源了一个组件,我厂某产品的处理方式就是把笔者拉进各种评审会议,不胜其扰,所以很多玩票项目都标上“Open source,No support!”。
对于营销性质的开源项目,就要小心了,看清楚License说明——哪怕是最宽松的开源协议,也要多留心眼。关于各种开源协议介绍的文章很多,请猛戳这里。
对于公益性质的开源项目,请胸怀全人类,因为这类项目一般也希望您也能公开您的产品源代码。
PS:GitHub近期响应特朗普同学的那一纸声明,令笔者有些失望,不管是上述哪种性质的开源社区成员,掺和政治因素,很无耻。
图2(3)正确姿势与正确的人
很多公司会把三方件选择流程化,业务部门提三方件需求由专人评审,流程化是好事,是正确的姿势,但问题却出在提需求的人和评审需求的人。
提需求的人容易短视,而忽略了必要性和可获得性(比如:是否真的需要这个三方件?有没有可替代的三方件?三方件会带来未来多少成本?),而评审需求的人容易僵化,而无法做出客观评估,错过了很多优秀的三方件。
那么怎么才能避免上述问题呢?
提需求的人和评审的人要选择真正的一线程序猿,所谓一线程序猿就是“既对产品本身很熟悉,又对业界的三方件很熟悉”。
所以说,姿势很重要,人更重要。
图32.企业应用中常用的三方件
下面,笔者参考awesome-java,将常用三方件的大类摘抄出来,试图让各位读者形成一个三方件的全景图
Bean Mapping:Frameworks that ease bean mapping.
Bytecode Manipulation:Libraries to manipulate bytecode programmatically.
Caching:Libraries that provide caching facilities.
Code Coverage:Frameworks and tools that enable code coverage metrics collection for test suites.
Code Generators:Tools that generate patterns for repetitive code in order to reduce verbosity and error-proneness.
Compiler-compiler:Frameworks that help to create parsers, interpreters or compilers.
CSV:Frameworks and libraries that simplify reading/writing CSV data.
Database:Everything that simplifies interactions with the database.
Date and Time:Libraries related to handling date and time.
Document Processing:Libraries that assist with processing office document formats.
HTTP Clients:Libraries that assist with creating HTTP requests and/or binding responses.
Hypermedia Types:Libraries that handle serialization to hypermedia types.
Imagery:Libraries that assist with the creation, evaluation or manipulation of graphical images.
JSON:Libraries for serializing and deserializing JSON to and from Java objects.
JSON Processing:Libraries for processing data in JSON format.
Logging:Libraries that log the behavior of an application.
Messaging:Tools that help send messages between clients to ensure protocol independency.
PDF:Tools to help with PDF file creation.
3.总结
图4三方件要总结的东西太多了,以后慢慢更新吧。最后,我们用鲁迅先生的话结束本文:“规范千万条,三方件第一条。三方件不规范,亲人两行泪”
网友评论