曾經(jīng)聽一位前Leader(曾任ebay中間件團(tuán)隊(duì)負(fù)責(zé)人)講過,國外的程序員相對更有g(shù)eek精神踢星,在技術(shù)選型上也更有自由度晃酒,比如開發(fā)語言之類的残制。當(dāng)時(shí)聽后甚是羨慕∫创可隨著工作年限的增長初茶,回過頭想這件事情,至少在目前國內(nèi)環(huán)境下是適用的嗎?
從軍事角度分析為什么正規(guī)軍都是用制式武器? 首先浊闪,在戰(zhàn)場上當(dāng)戰(zhàn)友倒下時(shí)恼布,其他人前仆后繼可以拿起戰(zhàn)友的武器和彈藥繼續(xù)前進(jìn)而不存在學(xué)習(xí)成本。其次搁宾,武器裝備零部件統(tǒng)一折汞,維修成本較低。再者盖腿,人員培訓(xùn)成本較低爽待,可以快速投入戰(zhàn)斗。
因此大多時(shí)候翩腐,一種武器裝備從研發(fā)到服役可能需要經(jīng)過很長一段時(shí)間鸟款。其中不僅僅是武器本身的研發(fā)周期,還有與武器裝備相關(guān)配套的建設(shè)等茂卦。只有裝備何什、后勤、人員共同發(fā)力等龙,才能充分發(fā)揮一種新式裝備的最大威力处渣。
以印度空軍為例伶贰。目前三哥空軍匯集了全世界各種名牌戰(zhàn)機(jī),如美國F-16罐栈、蘇-30系列黍衙、法國幻影2000等。這哪是去打仗荠诬,整個(gè)一萬國空博會们豌。首先,這些裝備之間如何協(xié)同配合就是一個(gè)大問題浅妆。其次,各機(jī)型零部件沒有統(tǒng)一標(biāo)準(zhǔn)障癌,后勤如何保障凌外?最后,飛行員培養(yǎng)成本太高涛浙。飛機(jī)和汽車不一樣康辑,會開夏利的可以直接去開奔馳,會開F-16的能直接去開蘇-30? 這不找“摔”嗎轿亮。拋開單一機(jī)種的格斗能力疮薇,綜合作戰(zhàn)實(shí)力別說與我國最新三代機(jī)、四代機(jī)PK我注,就拿早期山寨米格21(蘇)系列的改良版殲-7按咒、殲-8都不一定打的過。
回到本文討論的主題但骨。在一家互聯(lián)網(wǎng)公司中励七,工程師技術(shù)選型的自由度該如何界定? 經(jīng)常聽到,“我對這項(xiàng)技術(shù)比較熟悉奔缠,我建議用XXX“掠抬,更有甚者,“最近出了一項(xiàng)新的技術(shù)校哎,我們用XXX吧”两波。
本質(zhì)上講,上述兩種做法都在追求“個(gè)人效率”的最優(yōu)化闷哆,但忽略了整體效率的最優(yōu)化腰奋。在公司初創(chuàng)階段這并不是問題,因?yàn)榇藭r(shí)組織架構(gòu)較簡單更偏重于"個(gè)人英雄"主義抱怔。而在組織架構(gòu)復(fù)雜的大型互聯(lián)網(wǎng)公司氛堕,更強(qiáng)調(diào)組織協(xié)同,組織間的協(xié)同效率大于一切野蝇。以開發(fā)語言選型為例讼稚,眾所周知互聯(lián)網(wǎng)領(lǐng)域常用的開發(fā)語言有Java括儒、Go、C/C++锐想、Python帮寻、PHP等,如果不同團(tuán)隊(duì)或組織可以任意選擇開發(fā)語言而缺少集團(tuán)層面的整體規(guī)劃的話赠摇,那很容易遭遇如下問題:
假如有一個(gè)服務(wù)為了不同語言的應(yīng)用接入固逗,需要針對各類語言提供客戶端。開發(fā)成本以及維護(hù)成本等都會成為系統(tǒng)迭代效率的瓶頸藕帜。尤其是在微服務(wù)化大趨勢的今天烫罩,系統(tǒng)拆分的越來越細(xì),系統(tǒng)間的調(diào)用鏈路錯綜復(fù)雜洽故。在各類語言交錯的情況下服務(wù)治理該如何去做贝攒?如果沒有成熟的服務(wù)治理,能力如何復(fù)用? 能力不能復(fù)用时甚,怎么中臺化?
舉一個(gè)Web開發(fā)框架選型的例子隘弊。曾經(jīng)問過師兄一個(gè)問題,為什么公司(前東家)還在用Webx這樣的有十幾年歷史的老古董框架而不用現(xiàn)在流行spring mvc? Webx雖然歷史久遠(yuǎn)荒适,但其核心思想是"約定勝于配置"梨熙。也就是說框架把基本的事情都規(guī)定好了,比如文件放在什么位置刀诬、代碼基本邏輯該怎么寫咽扇。留給工程師可自由發(fā)揮的空間較小,若是不按照規(guī)定來應(yīng)用根本啟動不起來陕壹。所以絕大多數(shù)的應(yīng)用都是一樣的肌割,學(xué)會了一個(gè)其他的只需要了解一下業(yè)務(wù)邏輯即可快速上手,學(xué)習(xí)成本接近0帐要。
舉個(gè)例子說下這樣做的好處把敞,比如同學(xué)A休假了,同學(xué)B臨時(shí)補(bǔ)位榨惠。趕巧這一天線上異常了奋早,同學(xué)B在不了解應(yīng)用的情況下,根據(jù)出問題的URL就可以很快定位到出問題的代碼赠橙。
相反耽装,spring mvc提供給工程師可自由發(fā)揮的余地就太靈活了。在工程師個(gè)人效率最大的情況下期揪,團(tuán)隊(duì)整體效率反而是最低的掉奄。
讀下來,好像本文的觀點(diǎn)是“扼殺工程師的選擇空間和創(chuàng)造力”凤薛。我覺得最終還是要在“個(gè)人效率最大化”和“團(tuán)隊(duì)效率最大化”之間做好trade off!