人人都在說(shuō)工程師文化,90%的同學(xué)們向往工程師文化,然而95%的同學(xué)們覺得自己的部門沒有工程師文化。但關(guān)于工程師文化,事實(shí)告訴我們兩件事:
事實(shí)1是:我們定義工程師文化的標(biāo)準(zhǔn)不一樣。這就跟美女一樣,每個(gè)人心中的美女都不一樣, 但我們都愛美女。
事實(shí)2是:工程師文化還是可以客觀感覺出來(lái)的。如果你真是個(gè)美女,大家還是都會(huì)認(rèn)為你漂亮的。標(biāo)準(zhǔn)再不一樣,敢說(shuō)奧黛麗赫本丑的人還是需要莫大并且不要臉的勇氣。
基于這個(gè)不恰當(dāng)?shù)谋扔饕约笆聦?shí)1得出:90%同學(xué)們都愛美女;基于這個(gè)不恰當(dāng)?shù)谋扔饕约笆聦?shí)2得出:95%同學(xué)們部門真的都沒有美女!
基于以上事實(shí)我們做一個(gè)假設(shè):如果同學(xué)們部門里都是美女,大家一定都很開心!
基于這個(gè)假設(shè)得到事實(shí)3:都是美女的部門業(yè)績(jī)肯定完蛋了(這個(gè)推導(dǎo)過(guò)程只可意會(huì)不可言傳)。
根據(jù)以上一個(gè)假設(shè)和三個(gè)事實(shí),我們得到結(jié)論:一個(gè)部門要有美女,但不能多!極端的工程師文化產(chǎn)生少數(shù)幾個(gè)極端成功的公司以及大多數(shù)死得很慘的公司。
工程師文化 vs KPI文化
工程師文化是由內(nèi)而外的引導(dǎo)和自然發(fā)生, KPI文化是由外而內(nèi)的信仰和強(qiáng)行注入。
工程師文化著眼未來(lái), KPI文化活在當(dāng)下。
工程師文化痛恨KPI,我不愛的我不做,我愛的我瘋狂。 KPI文化唯KPI說(shuō)話,愛不愛都要像戰(zhàn)士一樣完成。
淺談工程師文化
工程師文化的前提條件
信任:leader和產(chǎn)品對(duì)工程師絕對(duì)的信任是工程師文化的最基本條件。如果他說(shuō)要用一個(gè)更優(yōu)雅的方法解決一個(gè)問題,但要花更多的時(shí)間,請(qǐng)你選擇相信他。好的工程師非常懶惰,他這么做一定是為未來(lái)的工作提高效率。
卓越的技術(shù)領(lǐng)袖存在:領(lǐng)導(dǎo)如果對(duì)技術(shù)沒有信仰,只把技術(shù)當(dāng)成工具,就很難說(shuō)這個(gè)團(tuán)隊(duì)會(huì)有工程師文化。說(shuō)白了不是每個(gè)不懂技術(shù)的領(lǐng)導(dǎo)都懂得欣賞優(yōu)雅代碼產(chǎn)生的美和對(duì)未來(lái)產(chǎn)生的深遠(yuǎn)影響。
技術(shù)列為KPI:在我參加晉升面試的時(shí)候,50%以上的技術(shù)人員講的都是產(chǎn)品(what),而不是技術(shù)(how),并且他們都晉升了。..。.這源于業(yè)務(wù)BU總是把業(yè)務(wù)當(dāng)成KPI的唯一衡量手段:技術(shù)好不好有什么關(guān)系?今年不出事,明年我已晉升。如果沒有技術(shù)KPI,技術(shù)就會(huì)總被放在次優(yōu)先級(jí)。
工程師文化的特征
小團(tuán)隊(duì):7-12人的團(tuán)隊(duì)是比較適合的團(tuán)隊(duì)大小。有人用pizza團(tuán)隊(duì)來(lái)形容一個(gè)團(tuán)隊(duì)的大小,就是一兩張pizza可以喂飽這支團(tuán)隊(duì)。facebook和google經(jīng)常有2-3個(gè)人的團(tuán)隊(duì),小團(tuán)隊(duì)有如下特征(中文為個(gè)人即興翻譯,可以選擇忽略):
Move Fast and Break Things(不破不立);
Huge Impact with Small Teams(以少為多,精準(zhǔn)打擊);
Be Bold and Innovative(勇敢追求卓越);
技術(shù)創(chuàng)新:團(tuán)隊(duì)必須堅(jiān)信技術(shù)可以為業(yè)務(wù)帶來(lái)不同于現(xiàn)在的可能性,現(xiàn)在沒看見不代表它不存在。技術(shù)挑戰(zhàn)產(chǎn)品是因?yàn)橐苍S你不知道還有更好的技術(shù)和架構(gòu)可以更簡(jiǎn)單更有效地完成一個(gè)業(yè)務(wù)任務(wù)。團(tuán)隊(duì)激勵(lì)不單純以業(yè)績(jī)?yōu)橹鞯募夹g(shù)的創(chuàng)新,比如:Google每個(gè)工程師都有20%的時(shí)間可以用于研究自己喜歡的技術(shù),而不是跟Google相關(guān)的業(yè)務(wù)。
技術(shù)決策權(quán)大:尊重技術(shù)決策的前提就是信任技術(shù)決策,而不是簡(jiǎn)單粗暴地說(shuō):“為什么完不成?隨便叫一個(gè)程序員就可以完成。”工程師未必在所有產(chǎn)品特性的定義上有決策的能力,但在優(yōu)先級(jí)和排期上是可以從技術(shù)角度給出決策。所有的業(yè)務(wù)deadline倒排都在一定程度上逼迫技術(shù)做出妥協(xié),并且這些妥協(xié)慢慢變成合法理由:我的代碼不好的原因是業(yè)務(wù)壓力太大。Note:工程師們不要為自己邋遢的代碼找理由,代碼對(duì)于一個(gè)軟件工程師就是尊嚴(yán)。
技術(shù)數(shù)據(jù)可視化:可視化技術(shù)相關(guān)數(shù)據(jù)包含圈復(fù)雜度、測(cè)試覆蓋率、重復(fù)率等等,對(duì)數(shù)據(jù)好的工程師給予掌聲。但是,好數(shù)據(jù)給予的是掌聲而不是獎(jiǎng)金,所有數(shù)據(jù)都可以被造出來(lái),這是個(gè)充分但不必要條件——好的代碼數(shù)據(jù)肯定好,數(shù)據(jù)好的代碼不一定是好代碼。
分享多會(huì)議少:寧愿少開會(huì)掰扯這個(gè)應(yīng)該誰(shuí)做,這個(gè)P1應(yīng)該誰(shuí)來(lái)背,也要多聽技術(shù)高手講一個(gè)技術(shù)細(xì)節(jié),大家都應(yīng)該沉下心來(lái)沉淀一下自己的專業(yè)知識(shí)。
敏捷
敏捷——一個(gè)飽受非議,飽受爭(zhēng)議的名詞。今天我提它不是想為它正名,其實(shí)是想說(shuō)大個(gè)子女孩的故事:我有個(gè)大個(gè)子女孩同學(xué),身材非常好,178cm,人到中年堅(jiān)持鍛煉,身材高挑,穿啥都是給啥做廣告。她告訴我,她外婆小時(shí)候走路只敢走在路坎的下面,鄰居朋友走在路坎上面,這樣可以顯得她外婆矮點(diǎn)。那時(shí),高個(gè)的女孩是被嘲笑的:150cm的姑娘指著她外婆的背影說(shuō):“看這傻大個(gè)!”可今天我想對(duì)我同學(xué)說(shuō):“你女兒最好也像你這么高,我兒子去看看能不能追上,優(yōu)化一下我家族的身高基因?!?/p>
很多人一聽到敏捷就說(shuō):“還說(shuō)敏捷,早過(guò)時(shí)了!” 雖然今年流行網(wǎng)紅臉,不流行高個(gè)姑娘,可她就是比你高。那些聽到敏捷就嗤之以鼻的人,你們?cè)趫?jiān)持什么?至少堅(jiān)持敏捷實(shí)踐的人心中有信仰,這是他們作為工程師的信仰,他們還在堅(jiān)持為減少一個(gè)if else修煉每一行代碼,堅(jiān)持為一個(gè)完整的自動(dòng)化測(cè)試不停思考,堅(jiān)持為了兩個(gè)模塊的解耦絞盡腦汁。
即便如此,今天不談敏捷,就像今天不談”身高“,我們談”身材修長(zhǎng)“?;谶@個(gè)前提,敏捷還是不敏捷就不重要了:是不是敏捷,是不是所謂的工程師文化都不重要,重要的是找到適合團(tuán)隊(duì)的開發(fā)方式,讓團(tuán)隊(duì)開發(fā)效率更好,系統(tǒng)更健壯,特性更易擴(kuò)展。
盒馬基礎(chǔ)技術(shù)團(tuán)隊(duì)實(shí)踐
Note:本文,我僅對(duì)自己的個(gè)別兩個(gè)小分隊(duì)進(jìn)行描述。
設(shè)計(jì)
一個(gè)軟件技術(shù)團(tuán)隊(duì)的最終產(chǎn)出物是可交付的軟件本身,所以不管什么花里胡哨的管理方式都沒有一份安全和穩(wěn)定運(yùn)行的代碼來(lái)的給力。好的代碼應(yīng)該要有設(shè)計(jì)的痕跡:簡(jiǎn)單粗暴地還原業(yè)務(wù)或多或少給未來(lái)埋坑。在我們團(tuán)隊(duì),大部分微觀代碼設(shè)計(jì)源自我們自己定制的一套領(lǐng)域模型設(shè)計(jì)套路。套路里要有每個(gè)工程師對(duì)每個(gè)特性的精心設(shè)計(jì),同學(xué)們的設(shè)計(jì)原則是:可以設(shè)計(jì)得不完美,但不能不思考設(shè)計(jì);即使已經(jīng)上線了的系統(tǒng),只要有問題,代碼永遠(yuǎn)可以修改,但前提是有完善的自動(dòng)化測(cè)試保護(hù)。
自動(dòng)化測(cè)試
不要低估了自動(dòng)化測(cè)試可以給軟件質(zhì)量帶來(lái)的深遠(yuǎn)影響:不管是當(dāng)下質(zhì)量,還是未來(lái)加特性,或是單純的重構(gòu)代碼。
不要低估了編寫自動(dòng)化測(cè)試的難度:檢驗(yàn)代碼好壞的一條標(biāo)準(zhǔn)就是——是否很容易對(duì)這塊代碼添加有效的自動(dòng)化測(cè)試。
測(cè)試的一些原則:
代碼提交前通過(guò)所有測(cè)試:測(cè)試就是驗(yàn)收標(biāo)準(zhǔn),是需求驗(yàn)收的代碼轉(zhuǎn)換。原則上一條驗(yàn)收標(biāo)準(zhǔn)可以對(duì)應(yīng)至少一個(gè)斷言(assert),沒有斷言的測(cè)試被視為無(wú)效測(cè)試;
用given/when/then語(yǔ)態(tài)寫單元測(cè)試;
要讓測(cè)試代碼更容易寫必須分離代碼邏輯與數(shù)據(jù)庫(kù)讀寫;
合理使用mock/stub技術(shù),測(cè)你要測(cè)的,讓你的測(cè)試更有效;
異步測(cè)試不要用sleep;
最好的debug手段就是測(cè)試;
單元測(cè)試耗時(shí)最短,多用單元測(cè)試覆蓋代碼邏輯;
越是集成測(cè)試數(shù)量應(yīng)該越少,因?yàn)榇鷥r(jià)很大,性價(jià)比不高;
靜態(tài)代碼質(zhì)量分析應(yīng)該伴隨每次持續(xù)集成。
持續(xù)集成/持續(xù)發(fā)布
持續(xù)集成其實(shí)什么都不是,它只是隨時(shí)把大家的代碼編譯、打包、部署、測(cè)試,不停地跑起來(lái),持續(xù)地告訴你代碼質(zhì)量是否滿足你的測(cè)試要求:
測(cè)試應(yīng)按測(cè)試運(yùn)行時(shí)間長(zhǎng)短分級(jí)編排在不同級(jí)別的持續(xù)集成中,時(shí)間短的測(cè)試應(yīng)該跑得更頻繁,比如:代碼的每一次push,時(shí)間長(zhǎng)一點(diǎn)的跑的頻度低點(diǎn),像是每隔3個(gè)小時(shí),每天晚上11點(diǎn)開始。..。..
一次編譯多次部署,在持續(xù)發(fā)布的環(huán)節(jié)中,
-
工程師
+關(guān)注
關(guān)注
59文章
1571瀏覽量
68553
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論