本文集說(shuō)的都是些平凡的小事偎谁,但往往是這些小事區(qū)分了產(chǎn)品的偉大與平庸筑辨。
開(kāi)源世界里有很多英雄式的程序猿俺驶,無(wú)私的提供這些三方件,不斷提升軟件開(kāi)發(fā)的效能棍辕。向開(kāi)源致敬暮现。
1.雜談三方件
(1)三方件對(duì)產(chǎn)品的影響
廣義上說(shuō)三方件可以很大,例如:編譯器楚昭、數(shù)據(jù)庫(kù)栖袋、操作系統(tǒng)、芯片抚太,本文僅談狹義的三方件塘幅,例如:apache common。
產(chǎn)品選擇三方件等效于選擇供應(yīng)商尿贫,談到供應(yīng)商就涉及很多商務(wù)問(wèn)題电媳,談到供應(yīng)商就很容易理解他們對(duì)產(chǎn)品的深遠(yuǎn)影響。
在建筑工程領(lǐng)域庆亡,對(duì)于供應(yīng)商的選擇有一個(gè)“Q.C.D.S”原則匾乓,大致就是“質(zhì)量,成本又谋,交付與服務(wù)并重”——參考《柳和玲主編.采購(gòu)管理.人民交通出版社,2007.7.》
軟件領(lǐng)域中拼缝,三方件就好像水泥娱局、沙這種基礎(chǔ)材料,三方件的選擇差不多也是一個(gè)意思咧七,一個(gè)套路衰齐。
(2)三方件的套路
開(kāi)源世界很像小區(qū)物業(yè)組織的小區(qū)市集,這種市集的參與者有三種:
玩票性質(zhì):個(gè)體程序猿居多继阻,將自己的代碼作品共享出來(lái)供全世界程序猿免費(fèi)使用娇斩。好像小區(qū)業(yè)主帶著娃搬個(gè)小板凳擺個(gè)小攤,象征性的半賣(mài)半送自己做的小手工穴翩。
營(yíng)銷(xiāo)性質(zhì):商業(yè)公司居多犬第,能夠免費(fèi)使用的代碼一般是基礎(chǔ)功能,高級(jí)功能就要收費(fèi)了芒帕。好比小區(qū)新開(kāi)的水果店擺個(gè)攤搞免費(fèi)試吃歉嗓,大媽們吃的不錯(cuò)就再買(mǎi)兩斤帶走。
公益性質(zhì):一般是有錢(qián)多金的富豪企業(yè)背蟆,錢(qián)掙夠了鉴分,搞個(gè)基金會(huì)共享比較大型的軟件組件,讓全世界程序猿免費(fèi)使用带膀。和現(xiàn)實(shí)世界的富豪們做公益一摸一樣志珍。
對(duì)于玩票性質(zhì)的開(kāi)源項(xiàng)目,請(qǐng)懷揣著敬意垛叨,千萬(wàn)不要挑三揀四——站在玩票者的角度伦糯,筆者曾經(jīng)開(kāi)源了一個(gè)組件,我廠某產(chǎn)品的處理方式就是把筆者拉進(jìn)各種評(píng)審會(huì)議嗽元,不勝其擾敛纲,所以很多玩票項(xiàng)目都標(biāo)上“Open source,No support剂癌!”淤翔。
對(duì)于營(yíng)銷(xiāo)性質(zhì)的開(kāi)源項(xiàng)目,就要小心了佩谷,看清楚License說(shuō)明——哪怕是最寬松的開(kāi)源協(xié)議旁壮,也要多留心眼。關(guān)于各種開(kāi)源協(xié)議介紹的文章很多谐檀,請(qǐng)猛戳這里抡谐。
對(duì)于公益性質(zhì)的開(kāi)源項(xiàng)目,請(qǐng)胸懷全人類(lèi)稚补,因?yàn)檫@類(lèi)項(xiàng)目一般也希望您也能公開(kāi)您的產(chǎn)品源代碼童叠。
PS:GitHub近期響應(yīng)特朗普同學(xué)的那一紙聲明,令筆者有些失望,不管是上述哪種性質(zhì)的開(kāi)源社區(qū)成員厦坛,摻和政治因素五垮,很無(wú)恥。
(3)正確姿勢(shì)與正確的人
很多公司會(huì)把三方件選擇流程化杜秸,業(yè)務(wù)部門(mén)提三方件需求由專(zhuān)人評(píng)審放仗,流程化是好事,是正確的姿勢(shì)撬碟,但問(wèn)題卻出在提需求的人和評(píng)審需求的人诞挨。
提需求的人容易短視,而忽略了必要性和可獲得性(比如:是否真的需要這個(gè)三方件呢蛤?有沒(méi)有可替代的三方件惶傻?三方件會(huì)帶來(lái)未來(lái)多少成本?)其障,而評(píng)審需求的人容易僵化银室,而無(wú)法做出客觀評(píng)估,錯(cuò)過(guò)了很多優(yōu)秀的三方件励翼。
那么怎么才能避免上述問(wèn)題呢蜈敢?
提需求的人和評(píng)審的人要選擇真正的一線程序猿,所謂一線程序猿就是“既對(duì)產(chǎn)品本身很熟悉汽抚,又對(duì)業(yè)界的三方件很熟悉”抓狭。
所以說(shuō),姿勢(shì)很重要造烁,人更重要否过。
2.企業(yè)應(yīng)用中常用的三方件
下面,筆者參考awesome-java膨蛮,將常用三方件的大類(lèi)摘抄出來(lái)叠纹,試圖讓各位讀者形成一個(gè)三方件的全景圖
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.總結(jié)
三方件要總結(jié)的東西太多了,以后慢慢更新吧敞葛。最后,我們用魯迅先生的話結(jié)束本文:“規(guī)范千萬(wàn)條与涡,三方件第一條惹谐。三方件不規(guī)范,親人兩行淚”