工程師文化落地的幾點思考

{"type":"doc","content":[{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"什麼是工程師文化?","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1、自我驅動,學習型團隊;","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2、講團隊合作,彼此信任;","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"3、注重效率,自動化;","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"4、熱衷開源技術,着眼未來;","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"常見的工程師文化落地","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"1、CodeReview","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 如果還在猶豫是否應該CR,不確定CR是否應該推廣,先看是否要做 Code Review?閱讀 >>> ","attrs":{}},{"type":"link","attrs":{"href":"https://mp.weixin.qq.com/s/OSB4jbb0_NCXARLudGsBKw","title":"","type":null},"content":[{"type":"text","text":"與BAT資深架構師爭論之後的思考","attrs":{}}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 以往的經歷中,CodeReview 是每週一次,以小組爲單位,每個成員輪流彙報一下上週進度、遇到的問題、寫的代碼、和思考。也有別的團隊把 Code Review 放在每天,因爲當天的代碼量不多,每天的CodeReview 其實也不會耗費太多。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 剛開始大家對這個制度沒太大感知,可以每週或者每兩週一次,或者有代表能主動CodeReview 一下,讓大家熟悉這個流程,特別是日常對《代碼整潔之道》和《重構》的學習實踐,能夠 從命名風格、職責劃分、文件目錄、設計模式等不同層面進行 CodeReview。但是目前最重要的還是命名規範、編碼風格。比如換行、空格、註釋,刪除無用代碼等,用 IDE 工具強制統一,每次提交代碼前必須格式化。實行一段時間後,CodeReview 時間就相對比較少,甚至在提交代碼的時候就可以利用 gitlab 等工具進行 CodeReview。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 更多詳細的 CodeReview 方法,可以參考","attrs":{}},{"type":"link","attrs":{"href":"https://mp.weixin.qq.com/s/n1B0wLicwQByYslz6hYwnw","title":"","type":null},"content":[{"type":"text","text":"你真的會Code Review嗎","attrs":{}}]},{"type":"text","text":"?裏邊列舉了最佳實踐,要點如下:","attrs":{}}]},{"type":"numberedlist","attrs":{"start":1,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","text":"每次 Review 的代碼量不要太多,控制在 400 行以內","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","text":"最好的建議是將一次 Review 的時間控制在 60 分鐘以內","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"text","text":"確定 Code Style,亦可藉助靜態檢查工具","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":4,"align":null,"origin":null},"content":[{"type":"text","text":"提交 Review 之前,工程師需要做嚴格的自我檢查,根據 Checklist","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":5,"align":null,"origin":null},"content":[{"type":"text","text":"完善 CI/CD,(持續發佈、持續部署,實踐起來相對難度比較大)","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":6,"align":null,"origin":null},"content":[{"type":"text","text":"激勵制度 通過統計對團隊中 Review 次數,Comments 次數多的員工進行一定的物質激勵,比如杯子,充電寶,書籍等簡單的小物品。提升團隊內 Code Review 氣氛。","attrs":{}}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"2、站會制度(彙報工作進度)","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 以往經歷主要做app版本迭代,有比較固定的發佈週期,提倡敏捷開發,在兩週一個版本的節奏下,每個人分配的任務進行小時爲單位的估時,最後統計總時間,對開發任務進行取捨,因爲一週時間有限,比如有效開發時間一週按40個小時算,開發量多肯定會加班(加班肯定是溝通不足、或者估時過少造成),開發量比較的情況不存在。一般 站會制度是想讓一個小團隊,負責某個項目開發的每個成員(包括產品、測試、設計)都能 站成一個圈,輪流講一下“昨天做了什麼、遇到了什麼問題、打算怎麼解決、今天做什麼、需要誰的幫助” 簡短的發言,目標是最及時的反饋,信息同步,讓大家對每個環節能心裏有數,提高團隊效率和彼此信任。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 這個制度的目的還是信息同步,及時跟進,推動項目進行。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 更詳細的實施可以參考 ","attrs":{}},{"type":"link","attrs":{"href":"https://developer.aliyun.com/article/682948","title":"","type":null},"content":[{"type":"text","text":"每日站會怎麼開纔好?——你的站會姿勢正確嗎?","attrs":{}}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"3、週會制度","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 這個是以周爲週期,以職能上的分組爲單位進行的一次內部交流。可以視情況而定。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"4、總結回顧","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 覆盤,這是一個團隊習慣,一般比較重大的項目開發結束後肯定會暴露一些問題 或者 溝通 或者 代碼設計 或者別的,最重要的是 能夠階段性的回顧一下:我們這個項目的目標是什麼?我們做的效果怎麼樣,舉例指標或者運營效果?有那些自我感覺做的比較好點?有那些做的不好需要自我批評?做的好的可以形成經驗進行推廣或提倡。做的不好的要反思形成改進意見做一個TODOLIST","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" CaseStudy,是針對日常出現的比較重大的責任事故,需要追責,不一定懲罰,但一定要明確責任,爲什麼會發生?怎麼解決的?有什麼總結反思?要吸取什麼教訓? ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 覆盤和 CaseStudy 都要做成 書面文檔維護在團隊文檔裏。 Confluence 團隊文檔是不同於 禪道的項目管理、不同於接口文檔的 技術文檔,是自我沉澱和反思的一個空間。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"5、技術架構演進","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 沒有完美的架構,但至少可以追求更好的設計,更好的抽象化,有利於後期維護和解耦,也提高系統穩定性和健壯性。架構設計肯定是漸進式的,慢慢優化摸索出來的。","attrs":{}}]},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們要重構腐化的架構及不符合軟件工程規範和質量要求的歷史代碼。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"面對腐化了的架構,要毫不猶豫地去重構它。 任正非","attrs":{}}]}],"attrs":{}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"6、技術分享會","attrs":{}}]},{"type":"numberedlist","attrs":{"start":1,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","text":"內部分享 結合工作討論一下最近感興趣的技術是什麼,怎麼能夠利用到工作中,等等。以一個話題一個人或者多個人進行分享,分享完可以討論。","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","text":"邀請業內大咖 過來分享。","attrs":{}}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"7、一對一導師制和結對編程","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 讓新人來了能快速適應團隊,有一個人指導,規範下入職流程,開什麼賬號、需要什麼權限、一步步瞭解什麼代碼,哪個同事對哪個功能比較熟悉,需要特別注意瞭解什麼技術點,能夠完整的走下來。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 提倡結對編程,互相學習取長補短,傳幫帶,幫助員工一起成長。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":" 8、閱讀(小型圖書館,推薦書籍)","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 持續學習","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":" 9、技術委員會","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 專門負責工程師文化建設,團隊技術氛圍等等。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"10、團隊博客","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" writing is thinking, 多總結,有產出,提高團隊知名度和吸引力","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"11、自動化測試、 持續集成","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 規範代碼上線流程,降低手動上代碼的風險,讓每個人專注於業務開發,能夠自動化的儘量讓代碼或者機器來做,這個可能會更遠一點,因爲整個架構都要做調整。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 儘早提交代碼去集成。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"12、開源文化","attrs":{}}]},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不要把時間浪費在已解決的問題上。","attrs":{}}]}],"attrs":{}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"13、佈道師","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" 應該有人能充當技術領袖或者一個團隊靈魂人物,在技術方向把控,有威信力、說服力。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"14、一切的重點,都是提高效率,儘早交付更高質量的軟件","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"能滿足這個目標的工具、方法、流程,都可以說是最佳實踐,都屬於敏捷開發。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"如果不注意這些會怎麼樣?","attrs":{}}]},{"type":"numberedlist","attrs":{"start":1,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","text":"要招更多人來維護爛代碼,帶來更大的經濟成本。","attrs":{}}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","text":"技術債遲早要還的。","attrs":{}}]}]}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"最後","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"一個概念","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"敏捷開發","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"兩個提倡","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1、需求文檔:做什麼?爲什麼?怎麼做?邊界怎麼處理?在文檔寫清楚功能驗收標準,降低邊界問題對開發時間的消耗;","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2、寫代碼前先做好 UML 圖,評審後再寫代碼;","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"三本書","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https://book.douban.com/subject/4262627/","title":"","type":null},"content":[{"type":"text","text":"重構-改善既有代碼","attrs":{}}]},{"type":"text","text":"(或 ","attrs":{}},{"type":"link","attrs":{"href":"https://book.douban.com/subject/4199741/","title":"","type":null},"content":[{"type":"text","text":"代碼整潔之道","attrs":{}}]},{"type":"text","text":")","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https://book.douban.com/subject/26819666/","title":"","type":null},"content":[{"type":"text","text":"領域驅動設計-軟件核心複雜性應對之道","attrs":{}}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https://book.douban.com/subject/30333919/","title":"","type":null},"content":[{"type":"text","text":"架構整潔之道","attrs":{}}]}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"節選任正非的公開信","attrs":{}}]},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們要改變只重視功能結果、不重視代碼質量的行爲習慣,要嚴格遵守軟件工程規範;改變被動的修修補補;改變碎片化知識獲取,主動去學習提升並貢獻經驗、代碼,形成共享知識庫。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們將全面強化以 Committer 角色爲核心的代碼審覈和提交機制,代碼經過更加嚴格和系統的審覈才能合入版本。爲此我們將建立一支更高水平的 Committer 角色羣體,負責軟件架構的看護、代碼的審覈和提交,整體保障合入代碼的高質量。我們要變革考覈機制,要讓架構設計好、代碼寫得好的人脫穎而出,對編程能力不滿足要求的人給予幫助和培訓。但任何人如果編寫的代碼長時間不能合入版本,將會被團隊拋棄。","attrs":{}}]}],"attrs":{}},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"參考","attrs":{}}]},{"type":"numberedlist","attrs":{"start":1,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https://mp.weixin.qq.com/s/Oo14Qisj2T1IGl-BfCsCrQ","title":"","type":null},"content":[{"type":"text","text":"如何在團隊建設工程師文化?阿里資深技術專家這麼做","attrs":{}}]}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https://mp.weixin.qq.com/s/Tl9Q2mXMhPL-yIHztDNPnA","title":"","type":null},"content":[{"type":"text","text":"如何提高團隊編程水平?","attrs":{}}]}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https://www.infoq.cn/article/HYdojNNP0eU_Xfma5CHR?from=timeline&isappinstalled=0","title":"","type":null},"content":[{"type":"text","text":"任正非:全面提升軟件工程能力與實踐,打造可信的高質量產品(華爲2019年第一份公開信,值得反覆閱讀)","attrs":{}}]}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":4,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https://www.yuque.com/yubo/morning/headstream-of-vaules","title":"","type":null},"content":[{"type":"text","text":"玉伯:團隊的文化根源","attrs":{}}]}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":5,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https://mp.weixin.qq.com/s/M0S0sxJy3oxhgsyqTcLpaQ","title":"","type":null},"content":[{"type":"text","text":"如何在2周內交付85%以上需求?阿里工程師這麼做","attrs":{}}]}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":6,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https://abseil.io/resources/swe_at_google.2.pdf","title":"","type":null},"content":[{"type":"text","text":"Software Engineering at Google","attrs":{}}]}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":7,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https://mp.weixin.qq.com/s/LPH8Ffabo_-miaMIVQ0RyQ","title":"","type":null},"content":[{"type":"text","text":"都996了,需求還是沒法按時交付,研發效能提升的關鍵在這裏","attrs":{}}]}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":8,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https://mp.weixin.qq.com/s/BFAuohxtT1Xp6_y-QLdX8Q","title":"","type":null},"content":[{"type":"text","text":"騰訊正式宣佈成立技術委員會!要對組織架構下狠手","attrs":{}}]}]}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章