什么是工程師文化?
為什么要工程師文化
看看最近二十年來社會的發展,計算機和互聯網已經滲透到了這個社會的每一個角落,各式各樣的計算機技術成為了整個世界發展的強大引擎,各式各樣的創新,無論是業務創新還是技術創新,都是依托于技術的快速演進,技術成了解放生產力提高社會運作的效率的中堅力量。以美帝為首的技術創新公司著著實實的改變著這個世界和人類的生活和生產習慣。
今天,每個從事計算機行業的技術人員都應該感到幸運,因為,我們不但選對了行業,也出生在了正確的時代,可以感受到***的刺激和變化,相比起我們的父輩,我們的人生,能經歷這樣的時代,實在是一種幸運。所以,選對了職業并出生在了正確的年代的我們,此時只需要思考的一個問題,那就是,我是否呆在了正確的地方用正確的方式做事?
在我看來,這個世界上有三種商業公司,
運營或銷售驅動型的公司。這類的公司以運營和營銷見長,技術對于他們來說,更多的只是為了支持大規模的營銷活動,以及成本上的控制,所以,基本上來說不太需要技術創新。這種公司***的問題就是缺乏安全感。
產品驅動型的公司。這類公司以產品見長,通過創造能提升用戶生活體驗的產品見長,技術對于他們來說,除了支持大規模的在線用戶之外,他們會更多的去尋找那些為了增強用戶體驗,提高整個業務流程效率的技術創新。比如:UI的交互方面的,整個業務流程方面的。這種公司***的問題,就是容易被別人模仿和抄襲。
技術驅動型的公司。這類的公司相信技術能改變世界,他們更多的是用強大的工程技術來創造有顛覆性的東西,更多的是用各種自動化的技術取代人類。比如:近代的蒸汽機技術取代了大量的人工,數字技術取代了大量信息傳遞的人工,現代,這類公司還希望通過人工智能來取代愚蠢的人類來做決定。這種公司***的問題就是可能做出叫好不叫座的東西。
這三種公司都可能成功,也都有問題,但是,無一例外,他們都需要強大的技術支撐,只不過,他們把技術所放在的位置不一樣。
無論你有多么的看不起技術人員,你都無法否認,你今天的生活相當的依賴這幫工程師,沒有他們,你恐怕都不知道怎么生活了。鄧爺爺幾十年前就說過——“科學技術是***生產力” ,無論什么樣的科學技術的理論要落地都會依賴于工程技術有多先進。
所以,在今天,作為一個IT或互聯網公司,“工程師文化”不是一個問題,而是一個常識!
工程師文化的特征
我下面羅列的這些特征,來源于:Google的《重新定義公司》,我在Amazon的工作經歷,37Signals的《Rework》,Quora上的 What Makes Good Engineering Culture? Slideshare上的 What Makes Good Engineering Culture,以及我最近這半年來的一些實踐。
簡單說來,我可以簡單的把這多的工程師文化的總結成兩大類:“自由” 和 “效率”。
本來還應該有個“創新”,但我個人認為,創新的前提是——在自由的環境下對提高效率的癡迷,就一定會發生創新。
創新不是憑空出現新的東西,其實,觀察一下人類的發展史,不難發現,幾乎所有的創新基本上跳出原來的思維模式用新的思維模式對原有問題的效率進行質的提升。比如:通信、交通、醫療、教育、生活……幾乎全都是在優化效率。
所以,如果你的精神不自由,你很難跳出老的思維模式,你用老的思維模式你一定不會想到新的方法和方式,如果不是對效率的提升,這個創新可能會不接地氣。
因此,我認為,工程師文化就是自由加效率!
自由
首先,工程師文化意味的創新文化,工程師都是有創新沖動的人,因為手里有創造技能的人通常都會有想創造點什么的沖動。而創新的源泉水來源于精神的解放,精神自由才會引發各式各樣的奇思怪想,才會有常人覺得不可能的瘋狂想法和想像力,而這些想法和想像力導致了創新。
精神上的自由具體表現在:
自我驅動。自己管理自己是***的管理。最失敗的管理就是家長和保姆式的管理。興趣出發的工作才可能迸發出真正的動力。
靈活的工作時間和地點。工程師們更多的是腦力工作,而不是體力工作,工作上時間和地點的自由安排可以讓工程師們的腦力工作更有效。Remote是一個很不錯的工作方式,開源社區基本上都是這鐘方式。和Remote有關的話題可參看37Signals的這本書《Remote》
信息平等。這意味著,全體員工得到的是原始信息,而不是被管理者們層層加工消化后的信息,信息的屏蔽很容易造成誤解和完全錯誤的行為。信息的平等,大的包括戰略、方向、目標、財務,小的包括文檔、代碼、和知識的共享等。同樣,也表現在意見表達上,任何人都有可能表達自己的意見和建議的平等機會,這樣才會激發出更多的思路和思辯,從而有不同的更好的思路出現。而不是,大家都看到了問題,而沒有人敢說。在 Google除了代碼全員共享,還有Thanks God, It’s Friday的文化,每周五,高管們會出來,任員工提各種尖銳的問題,在Amazon,代碼和文檔基本上全員開放,包括財務報表也對員工開放,另外,除了所有的NB的Principle SDE隔三岔五都會有一個Principle Talk(有很多Talk相當令人開腦洞),還有Amazon內部的Up the River文化,每年會選出一批公司最聰明最有想法的人集思會,討公司下一步的和戰略,并可以把相應的KPI直接按給Senior VP。
不害怕錯誤。處理錯誤的正確的姿勢是分析總結教訓,而不是懲罰故障人。前者讓人改善進步,后者讓人萎縮不前。***的錯誤就是不敢犯錯,***的問題就是不敢直面問題。
寬松的審批系統甚至沒有審批系統。審批通常暗示著三件事,1)對人的不完全信任,2)繁瑣的流程,3)思維上的束縛。這些都是創新和想像力的天敵。一個公司的監管、審批、流程越重,這個公司的活力也就越差。
20%的自由時間。這是Google公司提出來的,員工有20%自由的時間做自己想做的項目,Gmail就是這么出來的。
效率
工程師天生是追求效率的。有人說認為程序員花大量的時間做自動化的工具,還不如人肉的效率高,比如,寫自動化的腳本花5個小時,而重復做這件事200次只花3個小時。有這樣的理解的人根本不懂工程。
一方面,這個工具可以共享重用,更多的人可以從中受益,這次我花5個小時開發這個工具,下次只用1小時改一下就可以用在別的地方,這是著眼于未來而不是眼下的成本。更重要的是,這是一種文化,一種提高效率的文化,他會鼓勵和激發出更多的這樣的事情發生。如果你因為一個程序員花大量的時間開發自動化的工具,而認為這個程序員沒有效率,對之批評甚至懲罰的話,那么你就扼殺了提高效率的文化(關于效率,大家可以看看我的另一篇文章《關于加班和效率》,你會真正了解什么是效率)
人類之所以比別的動物聰明就是會使用和發明工具,而古語也有云:“工欲善其事,必先利其器”,看看美軍的裝備你就知道戰爭工具的好壞有多重要了,一個公司的強大之處在執行力,而執行力的強大之處在于你有什么樣的支持工具。這些,已經不是工程師文化,而是人類發展的文化。
針對于工程師文化來說,尤其是軟件工程,提升工程效率的具體表現如下:
簡化。簡化不是簡陋,簡單的東西通常意味著用戶更好理解,也意味著更容易的維護和運維。就像阿里推行的“小而美”,就像喬布期推崇的“沒有產品手冊簡單易用的產品”,就像Amazon推行的Working Backwards里說的那樣,一個新的產品或功能,產品經理需要寫三個文檔:媒體公關文、用戶手冊、常見問題,三個文檔總共加起來不超過兩頁A4紙,且不準用任何圖片說明,目的就是為了讓產品簡化和容易使用。
殘酷無情的推行自動化。編寫程序的最本質的目的就是自動化,看看人類發展史上自動化了多少東西。對于自動化來說,不僅僅只是消除人肉的重復勞動,更重要的是,很多事情人完全干不過機器。比如:加一臺機器,程序在秒級就可以完成,而人是永遠不可能達到這樣的速度的,再比如:電商中用程序管理數量巨大的訂單的自動化系統,加再多的人都完成的不可能像機器那樣完成的又好又快。自動化需要大力開發提高生產力的工具,比如:持續集成,持續部署,自動化運維,基礎自動化運維,甚至自動化的運營工具。(Amazon的軟件工程中對自動化和簡代相當迷戀)
避免無效率的組織架構和無效率的管理。這體現在這些方面:1)扁平化的組織架構,2)努力用自動化工具取代支持型的工作,3)不超過10個人的全棧小團隊,4)不按人員的技能分工而是按其負責的產品或功能分工(關于分工,請參看《讓我們來談談分工》),5)開會不是解決問題,開會是表決提案,6)通過產品的目標或信條Tenets來減少溝通和決策過程(Amazon里的每個部門,每個團隊,每個產品都有自己的Tenets,這個Tenets標明了要什么不要什么,這樣可以避免很多扯皮和難纏的trade-off的決擇,比如:AWS的幾個信條:運維是***優級的——這意味著只要是會讓運維變得復雜的需求都可能會工程團隊被拒掉,Throughput & Latency不能更差——這意味著,功能要為性能讓路,因為性能變差了,用戶就要買更多的資源)
正確的組件抽象。抽象是簡化的一部份,一方面,抽象意味著重用和通用,另一方面抽象意味著強大的擴展性,以適配各種可能性。最重要的是,抽象意味著技術能力的輸出,無論是內部的其它團隊還外部的團隊。比如:Google的MapReduce/BigTable /ProtoBuffer,FaceBook的Thrift,還有Amazon內部的WebService框架Coral Service、處理日志監控的Timber,以及全線AWS產品都用到的Amazon Lock Framework(一個分布式鎖框架)……
開發高質量的產品。因為高質量的代碼,不但可以容易的修改和維護,還可以因為少處理線上故障,從而有更多的時間去為未來做更多創造性的工作。這意味著需要有非常嚴謹的Design Review,Code Review,以及測試,關于Code Review,可以參看這篇文章《從Code Review 談如何做技術》,關于嚴謹的測試,可以參看這篇文章《如何做性能測試》
不斷的提高標準以及招聘***的人。取法其上,得乎其中,取法其中,得乎其下,取法其下,法不得也。如果一個公司或一個團隊想變得越來越好,越來越強大的話,就必需要不斷的提高自己的工作標準,提高工作標準意味著要不斷地培養和招聘更好的人。在Amazon和 Google的招聘官中都有一個叫Bar Rasier的人,這個人就是為了提高招聘標準而設立的。
創建一個持續改善的文化。一個好的組織,一個好的團隊,是需要不斷反思前進的,這需要全體員工一起來的。微觀層面上,在項目做完后需要有一個總結會分析項目中的得失,在故障出現后,需要有故障分析會,反思得失,在Amazon,嚴重的故障,需要寫一個 COE(Correction of Errors)的文檔,其中有一節叫“Ask 5 Whys”,讓你自己問自己至少5個為什么。在宏觀層面,一個公司每年都應該做一定的工作數據分析或是員工調查,比如,是否招聘到了不錯的人、工作的投入產出比,員工在哪些地方花時間了,等等,然后不斷的用技術手段來改善。(Amazon每年的工程師員工調查表是我活那么大見過的最細最細的調查表了, 問題除了對公司、經理、文化的,還有從,日常工作、開發環境、持結集成,測試自動化、產品質量、軟件架構、軟件維護、線上問題處理、年度計劃、數據倉庫建設、通用工具投票……這個員工調查直接導致公司的對工程的投資方向)
工程師文化如何落地
如果你要讓任何文化在公司內得到執行,你有下面幾個手段可以選擇:
通過政治手段:你需要把住三個地方——招聘、績效考核 & 升職。比如,你要落地工程師文化中的簡化和自動化,那你你在招聘的時候,你需要把懂簡化和喜歡自動化的人招進來,然后在績效考核和升職的地方設置上一條硬性指標——你今年簡化了什么?自動化了什么?如果沒有,對不起不但不能升職,績效可能還不達標。
通過經濟手段:讓不做這事的成本 > 要做這個的成本。然后,正常的人類都會選擇成本低的方案。比如,如果你要推行Design/Code Review/UT以提高質量,你就把QA和OPS團隊全挪到一邊去,讓Dev團隊自己測試,自己負責,這樣等這些Dev重復多次手動測試,處理多次線上的***故障,他們就會自然而然的寫自動化測試和做Code Review了,而QA和OPS團隊只是幫Dev你做工具罷了,而測試和運維的事全是你DEV的Ownership,出了故障也是Dev自己負責,于是,他們就會發現,不做Code Review和UT的成本遠遠大于做C Code Review/UT的成本,他們就會去做成本低的事的。
***,工程師文化要落地,還有幾個小條件,
***,團隊要小,Ownership很重要,Eat Your Own Dog Food。 沒有人幫你擦屁股,自己的屎自己吃,沒有痛苦,不會產生想進步的動力。
第二,熱愛學習和嘗試,學習嘗試新的技術,開拓眼界,學習嘗試新的思維方式,否則,呆在原地,原有的思維方式只會讓你在原地打轉轉。
第三,老板更多的相信技術而不是管理。相信技術會用技術來解決問題,相信管理,那就只會有制度、流程和價值觀來解決問題。
其它
說了這么多,時代還在發展,不過,這是我這么多年經歷或看到的工程師文化的東西了。***吐幾個槽——
對于996和加班這個事,對于工程師來說從來都不是問題,在解決技術問題或是創造的時候,工程師是個很自覺的群體,基本不需要有別人驅動,工程師是最樂意Work Hard的人了。我相信幾乎所有走上編程這個職業的人來說,基本上都是興趣所至,覺得編程很有趣,但卻被各個公司996搞得對編程毫無興趣。為什么,你們這些公司要向中國的教育學習呢?人家本來對這事有比較高的興趣的,但就是要通過考試/KPI/996這些東西把人家的興趣一點一點的磨滅掉,把人變成機器、奴隸、牲口,讓人對學習和工作產生了厭倦和討厭,會是你們這些管理者們所希望的?是不是只有把人變得不思進取了,你們才會管理?就像《軟件開發中的兩種管理方式》中說的***種人一樣?
另外,我不知道,為什么我一說這些東西,就會有很多人(包括程序員自己)來和我說我是個理想主義者,這些已經不是什么理想了,已被很多成功的公司用了很多很多年了。只是你沒有見到過罷了。還有的人說,因為中國的國情不同。這更讓我費解了。這讓我想到了當年大清朝派了一堆人出國考察后回來后,說外國的那套共和的東西不符合中國國情,最終也在歷史的潮流中被淹沒掉了。另外,什么叫“中國的國情不同”?中國有全世界數一數二的互聯網用戶,也有全世界數一數二的市場,不再是以前那個一窮二白的年代了,中國的國情到底有哪些不同呢?
我不知道各位工程師是為什么活的?但我覺得,我們選擇了一個刺激的職業,也趕上了這個行業大發展的時代,我們不妨捫心自問一下,你是否愿意讓自己的能力、青春和熱情就這樣被磨滅了?