技術(shù)牛人告訴你,什么是真正的工程師文化
工程師,世界上最偉大卻也最辛苦的職業(yè)。在外界看來,工程師是一個(gè)神秘的群體......
毋庸置疑,工程師在互聯(lián)網(wǎng)科技的歷史上扮演著極其重要的角色,如創(chuàng)立微軟的程序員比爾·蓋茨、依靠搜索算法創(chuàng)建 Google 的佩奇和布林、構(gòu)建 Facebook 社交網(wǎng)絡(luò)的黑客馬克·扎克伯格,無數(shù)大名鼎鼎互聯(lián)網(wǎng)公司都是由工程師所創(chuàng)立。
對(duì)于技術(shù)人員來說,到底有沒有自己特定的文化?什么才是真正的工程師文化?
今天,我想在這里再談一下工程師文化,一方面是因?yàn)槲矣钟辛艘恍┫敕ê腕w會(huì);另一方面,因?yàn)槲乙舱咴趧?chuàng)業(yè)的路上。
我認(rèn)為,建立一個(gè)有濃重的工程師文化的團(tuán)隊(duì)或公司,有必要把自己的想法形成白底黑字的“字據(jù)”,以供以后打自己的臉:
“要是未來沒有做到,這篇文章就打我未來的臉” 或者 “這篇文章太幼稚了,未來的我會(huì)打我現(xiàn)在的臉”。當(dāng)然,如果非要打臉,我希望是前者。
為什么要工程師文化?
看看最近二十年來社會(huì)的發(fā)展,計(jì)算機(jī)和互聯(lián)網(wǎng)已經(jīng)滲透到了這個(gè)社會(huì)的每一個(gè)角落,各式各樣的計(jì)算機(jī)技術(shù)成為了整個(gè)世界發(fā)展的強(qiáng)大引擎。
無論是業(yè)務(wù)創(chuàng)新還是技術(shù)創(chuàng)新,都依托于技術(shù)的快速演進(jìn),技術(shù)成了解放生產(chǎn)力、提高社會(huì)運(yùn)作效率的中堅(jiān)力量。
今天,每個(gè)從事計(jì)算機(jī)行業(yè)的技術(shù)人員都應(yīng)該感到幸運(yùn),因?yàn)椋覀儾坏x對(duì)了行業(yè),也出生在了正確的時(shí)代,可以感受到前所未有的刺激和變化。
此時(shí)我們只需要思考一個(gè)問題,那就是,我們是否處在正確的地方并用正確的方式做事?
在我看來,這個(gè)世界上有三種類型的商業(yè)公司:
運(yùn)營或銷售驅(qū)動(dòng)型公司
這類的公司以運(yùn)營和營銷見長,技術(shù)對(duì)于它們來說更多的只是為了支持大規(guī)模的營銷活動(dòng),以及成本上的控制,所以,基本上來說不太需要技術(shù)創(chuàng)新。這類公司非常缺乏安全感。
產(chǎn)品驅(qū)動(dòng)型公司
這類公司以產(chǎn)品見長,創(chuàng)造能提升用戶生活體驗(yàn)的產(chǎn)品,技術(shù)對(duì)于它們來說,除了支持大規(guī)模的在線用戶之外,更重要的是增強(qiáng)用戶體驗(yàn),提高整個(gè)業(yè)務(wù)流程效率的技術(shù)創(chuàng)新,比如在 UI 交互和業(yè)務(wù)流程方面。
這類公司最大的問題,就是容易被別人模仿和抄襲。
技術(shù)驅(qū)動(dòng)型公司
這類的公司相信技術(shù)能改變世界,它們更多的是用強(qiáng)大的工程技術(shù)來創(chuàng)造顛覆性的產(chǎn)品,用各種自動(dòng)化的技術(shù)取代人類工作。
比如:近代蒸汽機(jī)技術(shù)取代了大量的人工勞動(dòng),數(shù)字技術(shù)取代了大量信息傳遞的人工勞動(dòng),未來它們還希望通過人工智能來代替人類做更多的決定。這類公司最大的問題就是可能做出叫好不叫座的產(chǎn)品。
這三種公司都可能成功,也都有問題,但是,無一例外,他們都需要強(qiáng)大的技術(shù)支撐,只不過,他們把技術(shù)所放在的位置不一樣。
無論你有多么的看不起技術(shù)人員,你都無法否認(rèn),你今天的生活相當(dāng)?shù)囊蕾囘@幫工程師,沒有他們,你恐怕都不知道怎么生活了。
鄧爺爺幾十年前就說過——“科學(xué)技術(shù)是第一生產(chǎn)力” ,無論什么樣的科學(xué)技術(shù)的理論要落地都會(huì)依賴于工程技術(shù)有多先進(jìn)。
所以,在今天,作為一個(gè) IT 或互聯(lián)網(wǎng)公司,“工程師文化”不是一個(gè)問題,而是一個(gè)常識(shí)!
工程師文化的“兩大法寶”
簡單來說,我把這么多的工程師文化總結(jié)成兩大類:“自由” 和 “效率”。
本來還應(yīng)該有個(gè)“創(chuàng)新”,但我個(gè)人認(rèn)為,創(chuàng)新的前提是——在自由的環(huán)境下對(duì)提高效率的癡迷,就一定會(huì)發(fā)生創(chuàng)新。
創(chuàng)新不是憑空出現(xiàn)新的東西,其實(shí),觀察一下人類的發(fā)展史不難發(fā)現(xiàn),幾乎所有的創(chuàng)新基本上是“跳出原來的思維模式用新的思維模式對(duì)原有問題的效率進(jìn)行質(zhì)的提升”。
比如:通信、交通、醫(yī)療、教育、生活……幾乎全都是在優(yōu)化效率。
所以,如果精神不自由,就很難跳出老的思維模式,如果不是對(duì)效率的提升,這個(gè)創(chuàng)新可能會(huì)不接地氣。因此,我認(rèn)為,工程師文化就是自由加效率!
以上列舉的這些特征,來源于:Google 的《重新定義公司》(How Google Works)、我在 Amazon 的工作經(jīng)歷、37Signals 的"Rework"、Quora 上的" What Makes Good Engineering Culture? "、 Slideshare 上的 “What Makes Good Engineering Culture”,以及我最近這半年來的一些實(shí)踐。
由前 Google CEO 施密特編寫的《重新定義公司》(How Google Works)一書
自由
工程師文化首先意味著創(chuàng)新文化。因?yàn)楣こ處煻际怯袆?chuàng)新沖動(dòng)的人,而創(chuàng)新的源泉來源于精神的解放,精神自由才會(huì)引發(fā)各式各樣的奇思怪想。
因此他們才會(huì)有常人覺得不可能的瘋狂想法和想象力,而這些想法和想象力導(dǎo)致了創(chuàng)新。
精神上的自由具體表現(xiàn)在以下六個(gè)方面:
1. 自我驅(qū)動(dòng)。自己管理自己是最好的管理,最失敗的管理是家長和保姆式的管理,從興趣出發(fā)的工作才可能迸發(fā)出真正的動(dòng)力。
2. 靈活的工作時(shí)間和地點(diǎn)。工程師們的工作更多的是腦力工作,而不是體力工作,工作上時(shí)間和地點(diǎn)的自由安排可以讓工程師們的腦力工作更有效。
Remote(遠(yuǎn)程辦公)是一個(gè)很不錯(cuò)的工作方式,開源社區(qū)基本上都是使用這鐘方式。
3. 信息平等。這意味著,全體員工得到的是原始信息,而不是被管理者們層層加工消化后的信息,信息的屏蔽很容易造成誤解和完全錯(cuò)誤的行為。
信息的平等,既包括戰(zhàn)略、方向、目標(biāo)、財(cái)務(wù)等大信息,也包括文檔、代碼和知識(shí)的共享等小信息。
同樣,平等也表現(xiàn)在意見表達(dá)上,任何人都有表達(dá)自己的意見和建議的平等機(jī)會(huì),這樣才會(huì)激發(fā)出更多的思路和思辯,從而才會(huì)有更多更好的思路出現(xiàn)。
在 Google,除了代碼全員共享,還有 Thanks God, It’s Friday 的文化,每周五高管們會(huì)和員工在一起,面對(duì)面回答員工提出的各種尖銳問題;在 Amazon,代碼和文檔基本上對(duì)全員開放,包括財(cái)務(wù)報(bào)表也對(duì)員工開放。
另外,亞馬遜所有最牛的 Principle SDE(資深技術(shù)專家)隔三岔五都會(huì)有一個(gè) Principle Talk(有很多 Talk 相當(dāng)令人開腦洞)。
還有 Amazon 內(nèi)部每年會(huì)選出一批公司最聰明最有想法的人開會(huì),討論公司下一步的發(fā)展戰(zhàn)略,并可以把相應(yīng)的 KPI 直接傳遞給 Senior VP。
4. 不害怕錯(cuò)誤。處理錯(cuò)誤的正確姿勢是分析和總結(jié)教訓(xùn),而不是懲罰犯錯(cuò)人。前者讓人改善進(jìn)步,后者讓人萎縮不前。工程師最大的錯(cuò)誤就是不敢犯錯(cuò),最大的問題就是不敢直面問題。
5. 寬松的審批系統(tǒng)甚至沒有審批系統(tǒng)。
審批通常暗示著三件事:
- 對(duì)人的不完全信任
- 繁瑣的流程
- 思維上的束縛
這些都是創(chuàng)新和想象力的天敵。一個(gè)公司的監(jiān)管、審批、流程越重,這個(gè)公司的活力也就越差。
6. 20% 的自由時(shí)間。這是 Google 提出來的,員工有 20% 自由的時(shí)間做自己想做的項(xiàng)目,Gmail 就是這么誕生的。
效率
工程師天生是追求效率的。有人說認(rèn)為程序員花大量的時(shí)間做自動(dòng)化的工具,還不如人肉的效率高。
比如寫自動(dòng)化的腳本花 5 個(gè)小時(shí),而重復(fù)做這件事 200 次只花 3 個(gè)小時(shí)。有這樣的理解的人根本不懂工程師和工程。
一方面,這個(gè)工具可以共享重復(fù)使用,更多的人可以從中受益。更重要的是,這是一種提高效率的文化,它會(huì)鼓勵(lì)和激發(fā)出更多這樣的事情發(fā)生。
如果公司管理者因?yàn)橐粋€(gè)程序員花大量的時(shí)間開發(fā)自動(dòng)化的工具,而認(rèn)為這個(gè)程序員沒有效率,并且對(duì)他批評(píng)甚至懲罰的話,那么這個(gè)管理者就完全扼殺了提高效率的文化。
人類之所以比別的動(dòng)物聰明就是會(huì)使用和發(fā)明工具,而古語也有云:“工欲善其事,必先利其器”。
看看美軍的裝備你就知道戰(zhàn)爭工具的好壞有多重要了,一個(gè)公司的強(qiáng)大之處在執(zhí)行力,而執(zhí)行力的強(qiáng)大之處在于你有什么樣的支持工具。這些,已經(jīng)不是工程師文化,而是人類發(fā)展的文化。
對(duì)于工程師文化來說,尤其是在軟件工程領(lǐng)域,提升工程效率具體表現(xiàn)在如下七個(gè)方面:
1. 簡化。簡化不是簡陋,簡單的東西通常意味著用戶更好理解,也意味著更容易的維護(hù)和運(yùn)維。
就像阿里推行的“小而美”、喬布期推崇的“沒有產(chǎn)品手冊簡單易用的產(chǎn)品”、Amazon 推行的 Working Backwards 里說的那樣。
一個(gè)新的產(chǎn)品或功能,產(chǎn)品經(jīng)理需要寫三個(gè)文檔:媒體公關(guān)文、用戶手冊、常見問題,三個(gè)文檔總共加起來不超過兩頁 A4 紙,且不準(zhǔn)用任何圖片說明,目的就是為了讓產(chǎn)品簡化和容易使用。
2. 殘酷無情的推行自動(dòng)化。編寫程序的最本質(zhì)的目的就是自動(dòng)化,對(duì)于自動(dòng)化來說,不僅僅只是消除人肉的重復(fù)勞動(dòng),更重要的是,很多事情人的力量完全比不上機(jī)器。
比如:增加一臺(tái)機(jī)器,程序運(yùn)算在秒級(jí)就可以完成,而人是永遠(yuǎn)不可能達(dá)到這樣的速度。
再比如:電商中用程序管理數(shù)量巨大的訂單自動(dòng)化系統(tǒng),增加再多的人都不可能像機(jī)器那樣完成的又好又快。
自動(dòng)化需要大力開發(fā)提高生產(chǎn)力的工具,比如:持續(xù)集成,持續(xù)部署,自動(dòng)化運(yùn)維,基礎(chǔ)自動(dòng)化運(yùn)維,甚至自動(dòng)化的運(yùn)營工具。
3.避免無效率的組織架構(gòu)和無效率的管理。
這體現(xiàn)在以下這些方面:
- 扁平化的組織架構(gòu)。
- 努力用自動(dòng)化工具取代支持型的工作。
- 不超過 10 個(gè)人的全棧小團(tuán)隊(duì)。
- 不按人員的技能分工而是按其負(fù)責(zé)的產(chǎn)品或功能分工。
- 開會(huì)不是解決問題,開會(huì)是表決提案。
- 通過產(chǎn)品的目標(biāo)或信條來減少溝通和決策過程。
比如,Amazon 里的每個(gè)部門、每個(gè)團(tuán)隊(duì)、每個(gè)產(chǎn)品都有自己的信條,這個(gè)信條標(biāo)明了要什么不要什么,這樣可以避免很多扯皮和難纏的選擇。
我們來看看 AWS 的幾個(gè)信條:運(yùn)維是最高優(yōu)級(jí)的——這意味著只要是會(huì)讓運(yùn)維變得復(fù)雜的需求都可能被工程團(tuán)隊(duì)拒掉。
Throughput & Latency(吞吐量和延遲)不能更差——這意味著功能要為性能讓路,因?yàn)樾阅茏儾盍耍脩艟鸵徺I更多的資源。
4.正確的組件抽象。抽象是簡化的一部份,最重要的是,抽象意味著技術(shù)能力的輸出,無論是內(nèi)部的其他團(tuán)隊(duì)還是外部的團(tuán)隊(duì)。
比如:Google 的 MapReduce/BigTable/ProtoBuffer,F(xiàn)aceBook 的 Thrift,還有 Amazon 內(nèi)部的 Web Service 框架 Coral Service、處理日志監(jiān)控的 Timber,以及全線 AWS 產(chǎn)品都用到的 Amazon Lock Framework(一個(gè)分布式鎖框架)……
5.開發(fā)高質(zhì)量的產(chǎn)品。因?yàn)楦哔|(zhì)量的代碼,不但可以易于修改和維護(hù),還可以因?yàn)檩^少處理線上故障,從而有更多的時(shí)間去為未來做更多創(chuàng)造性的工作。
這意味著需要有非常嚴(yán)謹(jǐn)?shù)?Design Review,Code Review,以及測試。
6.不斷的提高標(biāo)準(zhǔn)以及招聘最好的人。如果一個(gè)公司或一個(gè)團(tuán)隊(duì)想變得越來越好、越來越強(qiáng)大的話,就必須要不斷提高自己的工作標(biāo)準(zhǔn)。
提高工作標(biāo)準(zhǔn)意味著要不斷地培養(yǎng)和招聘更好的人才。在 Amazon 和 Google 的招聘系統(tǒng)中都有一個(gè)叫 Bar Rasier 的職位,這個(gè)職位就是為了提高招聘標(biāo)準(zhǔn)而設(shè)立的。
7.創(chuàng)建一個(gè)持續(xù)改善的文化。一個(gè)好的組織和團(tuán)隊(duì),需要全體員工一起不斷反思前進(jìn)。
在微觀層面上,在項(xiàng)目做完后需要有一個(gè)總結(jié)會(huì)分析項(xiàng)目中的得失,在故障出現(xiàn)后,需要有故障分析會(huì)。
在 Amazon,嚴(yán)重的故障需要寫一個(gè) COE(Correction of Errors)的文檔,其中有一節(jié)叫“Ask 5 Whys”,讓你問自己關(guān)于這個(gè)故障至少 5 個(gè)為什么。
在宏觀層面上,一家公司每年都應(yīng)該做一定的工作數(shù)據(jù)分析或是員工調(diào)查。比如,是否招聘到了不錯(cuò)的人、工作的投入產(chǎn)出比、員工在哪些地方花費(fèi)時(shí)間等等,然后不斷的用技術(shù)手段來改善。
Amazon 每年的工程師員工調(diào)查表是我見過的最細(xì)的調(diào)查表了, 表中的問題除了針對(duì)公司、管理層、文化等方面。
還包括日常工作、開發(fā)環(huán)境、持續(xù)集成、測試自動(dòng)化、產(chǎn)品質(zhì)量、軟件架構(gòu)、軟件維護(hù)、線上問題處理、年度計(jì)劃、數(shù)據(jù)倉庫建設(shè)、通用工具投票……這個(gè)員工調(diào)查直接導(dǎo)致公司對(duì)工程的投資方向。
工程師文化如何落地?
如果你要讓一種企業(yè)文化在公司內(nèi)得到執(zhí)行,有下面幾個(gè)手段可以選擇:
“政治”手段
招聘、績效考核和升職。比如,你要落地工程師文化中的簡化和自動(dòng)化,那你在招聘的時(shí)候,需要把懂簡化和喜歡自動(dòng)化的人招進(jìn)來。
然后在績效考核和升職的地方設(shè)置上一條硬性指標(biāo)——你今年簡化了什么?自動(dòng)化了什么?如果沒有,不但不能升職,績效還可能不達(dá)標(biāo)。
“經(jīng)濟(jì)”手段
讓不做這件事的成本 > 要做這件事的成本。然后,正常的人類都會(huì)選擇成本低的方案。
比如,如果你要推行 Design/Code Review/UT 以提高質(zhì)量,你就把 QA 和 Ops 團(tuán)隊(duì)全挪到一邊去,讓 Dev 團(tuán)隊(duì)自己測試,自己負(fù)責(zé)。
這樣等這些 Dev 重復(fù)多次手動(dòng)測試,處理多次線上的弱智故障,他們就會(huì)自然而然的寫自動(dòng)化測試和做 Code Review 了。
而 QA 和 Ops 團(tuán)隊(duì)只是幫 Dev 你做工具罷了,而測試和運(yùn)維的事全是你 Dev 的 Ownership,出了故障也是 Dev 自己負(fù)責(zé)。
于是,他們就會(huì)發(fā)現(xiàn),不做 Code Review 和 UT 的成本遠(yuǎn)遠(yuǎn)大于做 Code Review/UT 的成本,他們就會(huì)去做成本低的事了。
最后,工程師文化要落地,還有幾個(gè)小條件:
- 團(tuán)隊(duì)要小,Ownership 很重要,Eat Your Own Dog Food。 沒有人幫你擦屁股,自己的屎自己吃,沒有痛苦,不會(huì)產(chǎn)生想進(jìn)步的動(dòng)力。
- 熱愛學(xué)習(xí)和嘗試。學(xué)習(xí)嘗試新的技術(shù),開拓眼界,學(xué)習(xí)嘗試新的思維方式。否則,原有的思維方式只會(huì)讓你在原地打轉(zhuǎn)。
- 老板更多的相信技術(shù)而不是管理。相信技術(shù)會(huì)用技術(shù)來解決問題,而只相信管理,那就只會(huì)用制度、流程和價(jià)值觀來解決問題。
其他
以上這些是我這么多年經(jīng)歷過或看到的工程師文化,最后說說我的幾個(gè)觀點(diǎn)。
996 和加班這件事,對(duì)于工程師來說從來都不是問題。在解決技術(shù)問題或是創(chuàng)造的時(shí)候,工程師是個(gè)很自覺的群體,基本不需要他人驅(qū)動(dòng)。
我相信幾乎對(duì)于所有走上編程這條道路的工程師,基本上都是興趣所至,他們覺得編程很有趣。
但很多工程師卻被一些公司的 996 搞得對(duì)編程毫無興趣,為什么?這些公司就是通過考試/KPI/996這些東西把工程師的興趣一點(diǎn)一點(diǎn)的磨滅掉、對(duì)學(xué)習(xí)和工作產(chǎn)生了厭倦和討厭。
另外,文章中我說的這些文化,并不是什么理想主義,而是已經(jīng)被很多成功的公司使用了很多年。
還有人說,因?yàn)橹袊鴩椴煌赃@些方法并不實(shí)用,這更讓我費(fèi)解。中國有全世界數(shù)一數(shù)二的互聯(lián)網(wǎng)用戶,也有全世界數(shù)一數(shù)二的市場,不再是以前那個(gè)一窮二白的年代,中國的國情到底有哪些不同呢?
我不知道各位工程師為什么而活著?但我覺得,我們選擇了一個(gè)刺激的職業(yè),也趕上了這個(gè)行業(yè)大發(fā)展的時(shí)代。
我們不妨捫心自問一下,你是否愿意讓自己的能力、青春和熱情就這樣被磨滅掉?
陳皓(左耳朵耗子),20 年軟件開發(fā)相關(guān)工作經(jīng)驗(yàn),10 年以上項(xiàng)目和團(tuán)隊(duì)管理經(jīng)驗(yàn)。擅長底層技術(shù)架構(gòu),團(tuán)隊(duì)建設(shè),軟件工程,軟件研發(fā)咨詢,以及全球軟件團(tuán)隊(duì)協(xié)作管理。對(duì)高性能,高可用性,分布式,高并發(fā),以及大規(guī)模數(shù)據(jù)處理系統(tǒng)有一些經(jīng)驗(yàn)和心得。現(xiàn)在創(chuàng)業(yè)中,MegaEase 創(chuàng)始人,致力于為企業(yè)的高并發(fā)高可用架構(gòu)提供一整套的技術(shù)解決方案和產(chǎn)品。
























