读书笔记第五讲:《卓有成效的工程师》
本文是讀書筆記第五講:《卓有成效的工程師》
文章目錄
- 一、聚焦高杠桿率工作:
- 1、使用杠桿率衡量工作成效:
- 2、提高杠桿率的三種方式:
- 3、將精力投入杠桿點,而非易于完成的工作:
- 二、優化學習方式:
- 1、掌握自己的經歷,培養成長型思維模式:
- 2、提升學習效率,學習存在復利效應:
- 3、尋求利于學習的工作環境:
- 4、將時間投到培養新技能的任務上:
- 三、定期調整優先級:
- 1、待辦事項清單:
- 2、工作任務清單的優先級:
- 3、關注直接創造價值的工作:
- 4、關注重要但不緊急的工作:
- 5、守護創造者日程,限制同時進行的任務數量:
- 四、投資迭代速度:
- 1、持續部署:
- 2、投資節省時間的工具:
- 3、縮短調試驗證周期:
- 4、提升使用工具的技能:
- 5、從整體上考慮迭代周期,不要忽視工程以外的瓶頸:
- 五、正確度量改進目標
- 1、用指標推動進展:
- 2、選擇正確的度量指標來激勵團隊:
- 3、建立監控體系:
- 4、了解有用的數字:
- 5、質疑數據的完整性、正確性:
- 六、盡早且頻繁驗證想法:
- 1、尋找驗證工作成果的低成本方法:
- 2、使用ABTest持續驗證產品變化
- 3、當心“一人團隊”:
- 4、建立決策反饋循環:
- 七、提升項目的估算能力:
- 1、使用準確的估算推動項目規劃:
- 2、為意外情況留出預算:
- 3、設立具體的項目目標和可度量的里程碑:
- 4、及早降低風險:
- 5、極為謹慎地對待重寫項目:
- 6、不要在馬拉松比賽的半程沖刺:
- 八、權衡質量與務實:
- 1、軟件質量的價值:
- 2、建立代碼審查氛圍:
- 3、自動化測試:
- 4、償還技術債:
- 九、最小化運營負擔:
- 1、最大限度地減少運營成本,擁抱運營的簡單性:
- 2、構建可以快速試錯的系統:
- 3、機械任務自動化:積極將手動任務自動化執行以節省時間。
- 4、提升快速響應及恢復的能力:
- 十、為團隊成長投資:
- 1、幫助周圍的人獲得成功:
- 2、設計好的入職流程:
- 3、事后復盤匯聚集體智慧:
- 4、建設卓越的工程師文化
一、聚焦高杠桿率工作:
1、使用杠桿率衡量工作成效:
- 杠桿率 = 產生的影響/投入的時間,即時間投資回報率ROI。
- 不要通過更長的時間去完成更多工作,要將有限的時間投入到最有價值的工作上。
- 對大多數工作而言,80%的產出源于20%的工作,這20%工作就是高杠桿率的工作
2、提高杠桿率的三種方式:
(1)減少完成工作所需的時間
(2)增加該工作的產出
(3)轉向杠桿率更高的工作
3、將精力投入杠桿點,而非易于完成的工作:
- 不要將高杠桿率的工作與易于完成的工作混為一談,許多高杠桿率的工作也需要持續很長時間才能有較大成效。
比爾及梅琳達·蓋茨基金會管理的資金達到了402億美元的規模,也仍遠遠不足以解決世界上所有的問題。蓋茨在2013年11月《連線》的一篇文章寫道:“在價值數十萬億美元的全球經濟體系中,任何慈善事業都顯得微不足道。如果想要產生巨大的影響,你需要一個杠桿——投人1美元的資金或1小時的時間,就能產生百倍或千倍的社會效益。"對蓋茨來說,這些杠桿點包括為麻疹和瘧疾疫苗提供資金,每一劑疫苗的成本不到25美分,但這項工作卻拯救了數百萬人的生命。
二、優化學習方式:
1、掌握自己的經歷,培養成長型思維模式:
- 關注自己影響范圍之內的變化,不要浪費時間去指責無法控制的部分,以成長型思維模式看待失敗和挑戰,并將其視為學習的機會:
(1)固定型思維:能力是先天注定的,后天無法改變
(2)成長型思維:能力可以通過后天努力培養、提升自己的智力和技能,把挑戰和失敗視為學習的機會,在通向成功的道路上不輕言放棄
鍛煉與陌生人對話技能的例子:
作者是個內向的人,盡管很樂意擴大社交圈,但確實不善于結識新朋友以及和他們寒暄聊天,所以拒絕與不認識的人一起喝咖啡,遠離大型聚會,不參加社交活動,因為這些都讓作者感到不自在。后來作者意識到,回避社交活動對于結識新朋友非常不利,而且這種狀況不能自行改善。因此作者下定決心參加被邀請的或是碰巧遇上的所有社交活動,比如出現在全是陌生人的聚會上,和網上認識的人一起喝咖啡。雖然最初的好幾次活動都以尷尬的沉默和難以持續的聊天告終,有時也花好幾個小時去參加一些社交活動,離開時卻沒有與人建立起任何有意義的聯系。但最終作者還是堅持了下來,如果搞砸一次談話,就反思如何做出更機智的回應,并在下一次談話中改進。努力練習講更好的故事,因為成為有魅力的健談者是一項可以習得的技能,并且隨著時間的推移會越來你越熟練。最終重塑自我,結識新朋友,擴展人脈,擴展自己的舒適區
2、提升學習效率,學習存在復利效應:
- 學得越多,就越容易運用學過的知識和經驗來學習新事物。把時間花在缺乏挑戰的工作上,不僅錯過了學習的機會,更是為未來的成長和學習付出了巨大的機會成本,等認識到智力投資會產生復利效應時,已經為錯失長期復利付出了巨大的代價。當公司為一份輕松的、毫無挑戰的工作向你支付薪水時,他們實際上是在付錢讓你接受更低的智力增長率。
3、尋求利于學習的工作環境:
- 好的工作環境更有利于個人和職業的高速發展,選擇新工作或新團隊時可以考慮的6個因素:
(1)快速增長:在快速發展的團隊和公司中,需要解決的問題往往超過可用的資源,這就提供了大量的產生巨大影響和增加責任的機會,這種增長也更容易吸引優秀人才加入以及組建強大的團隊,從而創造出更大的增長,形成一個正向循環。另一方面,缺乏增長會導致公司或團隊發展停滯和辦公室政治,員工可能會因為沒機會有限而惡性競爭,因此很難找到并留住人才
(2)培訓:
(3)開放:不斷從過去的錯誤中學習和調整,追求一種充滿好奇心的組織文化,鼓勵每個人提出問題,再結合開放的文化,讓人們積極反饋和分享信息。
(4)節奏:快速迭代的工作環境提供了更短的反饋周期,也促使我們以更快的速度去學習,冗長的發布周期、復雜的產品發布審批和優容寡斷的主管都會拖慢迭代效率;雖然激進的冒險精神和時常加班有助于提高學習速率,但不要讓自己身心俱疲,要找到一種可持續的長期工作節奏
(5)人員:與更聰明、更有才華、更有創造力的人共事,意味著在身邊有很多潛在的導師。和誰一起工作要比實際做什么工作對職業成長更為重要。
(6)自治:選擇工作內容和工作方式的自由驅動著我們的學習能力,只要我們能夠有效的利用這種自由。
4、將時間投到培養新技能的任務上:
- 每天抽出20%的時間對自己的成長投資(每天抽一兩個小時要比每周抽出一整天更有效,因為可以培養每天學習的習慣),培養能夠幫助自己有效工作的技能,比如鉆研專業領域和專業工具,也可以是相鄰學科,而不是把所有精力在花在追趕進度上。
(1)參加專業技能培訓課程
(2)主動參與感興趣項目的設計討論,不要被動等待
(3)在不同項目類型的項目上工作
(4)確保團隊中有更資深、可以請教的工程師
三、定期調整優先級:
1、待辦事項清單:
- 人類大腦擅長處理信息,而不是存儲信息,將大腦當做處理器,而不是存儲器
2、工作任務清單的優先級:
-
估算會由于數據優先而導致出現很多偏差,加上每處理一項任務都會產生新的任務,這就意味著永遠無法完成清單中的大部分積壓事項,最終的結果就是,為了建立優先級排序列表而做的大量估算工作都被浪費了。
-
對工作任務清單的優先級排序的目標不是要對所有工作事項的優先級建立一張排序總表,因為排序所依據的信息都是不完整的;而是要根據當前所掌握的信息,不斷將杠桿率最高的任務的優先級調至最高,因為估算出第100項任務比第101項任務的杠桿率更高,并沒有實際上的作用。更簡單高效的做法是,先確定一小部分重要目標,并挑選出實現這些目標所需要完成的初始任務,然后將當前正在進行的任務與待辦事項清單上的其他任務進行兩兩比較。
3、關注直接創造價值的工作:
4、關注重要但不緊急的工作:
| 重要 | 第一象限 危機 緊急問題 臨近截止日期 | 第二象限 計劃和補救 建立合作關系 新機遇(求值) 個人發展 |
| 不重要 | 第三象限 中斷手頭工作 大部分會議 大部分郵件和電話 | 第四象限 上網 忙碌的工作 浪費時間的不良習慣 |
- 調高可以提升效率的長期投資的優先級,即使它們沒有截止日期所以不緊急,第二象限的工作包括:規劃職業目標、建立更牢靠的合作關系,閱讀書籍和文章以提升專業能力,培養提升生產力和工作效率的學習習慣,構建新工具改進工作流程,提升基礎設施的伸縮性等等。
5、守護創造者日程,限制同時進行的任務數量:
- 保留較大的連續的專注時間塊,確保自己更容易進入“心流” 的專注狀態,從而提升工作效率,將必要的會議安排在連續的時間而不是分散安排在一天中。并限制同時進行的任務數量,減少上下文的切換。
四、投資迭代速度:
1、持續部署:
- 迭代的速度越快,學到的東西就越多,如果為了避免錯誤而行動太慢,反而會錯失很多機會
2、投資節省時間的工具:
-
如果某項任務必須需手動做兩次以上,那么第三次就去編寫一個工具
例如運營導入工具
3、縮短調試驗證周期:
4、提升使用工具的技能:
- 在日常使用的開發環境中保持高效,比如熟練使用快捷鍵,安裝有利于增效的插件
5、從整體上考慮迭代周期,不要忽視工程以外的瓶頸:
(1)對他人工作的依賴,比如各自工作優先級錯位,處理與人有關的瓶頸時,溝通至關重要
(2)關鍵決策者的批準
(3)審查流程
五、正確度量改進目標
1、用指標推動進展:
(1)幫助專注于正確的事情
(2)防止問題復現
(3)推動進步,例如,使用應用的延遲作為指標
(4)衡量一段時間的成效
2、選擇正確的度量指標來激勵團隊:
- 不同的指標會激勵不同的行為,所以它是一個強大的杠桿
3、建立監控體系:
- 系統的復雜性越高,就越需要通過監控來確保不會盲目運行
4、了解有用的數字:
- 可以作為評估進度的基準,也可以幫助我們進行大概的推算
5、質疑數據的完整性、正確性:
- 正確的數據可以有力支持自己的論點,但所有的數據都有可能出現錯誤,或者被濫用、曲解,導致得出錯誤的結論,從而帶來災難性的后果。擁有糟糕的數據比沒有數據更糟糕,因為我們會任務自己是對的,并作出錯誤的決定
六、盡早且頻繁驗證想法:
1、尋找驗證工作成果的低成本方法:
(1)迭代地處理問題以減少浪費。每一次迭代都提供驗證新想法的機會,快速迭代才能快速學習
(2)通過小型實驗驗證想法,降低大型實現的風險。投入少許額外精力,確認計劃中的其余部分是否值得做
2、使用ABTest持續驗證產品變化
3、當心“一人團隊”:
- 一人團隊增加了獲得反饋過程中的阻力,而我們需要借助反饋來驗證自己所做的事情是否可行。所以在單人項目工作時,要想辦法定期征求反饋,避免最后推倒重做
4、建立決策反饋循環:
- 養成及時驗證決策的習慣,不要做出決定后就繼續前進,而應該建立反饋循環,以便收集數據并評估工作的價值和有效性
七、提升項目的估算能力:
1、使用準確的估算推動項目規劃:
(1)將項目分解為細粒度的任務
(2)根據任務需要時間估算,而不是自己或者別人期望時間
(3)將估算結果視為概率分布,而不是最佳情況
(4)讓實際執行人來估算
(5)謹防錨定偏差:在實際列出任務前,避免給出初步時間,會影響之后的估算
(6)使用多種方法估算同一任務
(7)當心“人月神話”
(8)根據歷史數據驗證估算結果
(9)使用時間盒限制任務范圍:與其承諾一個項目研究需要三天,不如承諾3天后給出最大努力結果
(10)允許他人質疑估算結果
2、為意外情況留出預算:
3、設立具體的項目目標和可度量的里程碑:
(1)設定項目目標的作用:重要的篩選器,可以區分任務列表中的必選項和可選項,防止功能蠕變;也能讓利益相關者認清目標,便于大家達成一致
(2)可度量的里程碑的作用:評估項目進度的檢查點,跟蹤進度,從而降低風險,有效地分配時間。使得我們能夠達成一致,推遲一些不重要的任務,并減少在項目中無意識擴大項目范圍的可能性,判斷項目是否偏離正軌
4、及早降低風險:
- 越晚發現問題,失敗的成本就越高。優先處理風險最大的領域,盡早發現未知因素,有助于減少估算結果與實際情況的差異以及項目中的風險。不要專注于做容易的事情,這會給自己帶來能夠按期交付的錯覺
5、極為謹慎地對待重寫項目:
- 增量式或分階段重寫系統是一項高杠桿率的活動,它在每一步都提供了額外的靈活性,雖然這種方式可能會增加額外的工作量,但能夠顯著降低風險。
6、不要在馬拉松比賽的半程沖刺:
- 了解加班的限度,不要過早加班,導致最后團隊精疲力盡;不要因為進度落后就不知所措的加班,只有確信加班能使我們按時完成項目,才需要加班
八、權衡質量與務實:
1、軟件質量的價值:
- 軟件的質量高,就能加快軟件工程師創造價值的速度,如果在質量方面投資不足,則會阻礙我們快速行動
2、建立代碼審查氛圍:
- 建立可持續的代碼審查流程,但需要權衡代碼質量和開發速度
3、自動化測試:
-
自動化測試不適合在功能開發完成時,覆蓋率就達到100%,最佳實踐是在功能經過兩到三個版本,且趨向于穩定時,自動化測試覆蓋逐漸完善,且不作為硬性指標,由開發人員自行評估該功能是否需要作自動化測試。
-
專注于高杠桿率的測試,能有效幫助養成測試的習慣,因為相對于編寫它們所花的時間,這些測試可以節省大量時間,這種投入產出的差異有利于編寫更多的測試,創建良性的反饋循環,節省更多的開發時間,所以,從最有價值、最節省時間的自動化測試開始,然后逐步推進
4、償還技術債:
- 不要盲目地償還技術債,并非所有的技術債都值得償還,要將有限的時間花在杠桿率最高的技術債上,用最少的時間,修復代碼庫中被調用最頻繁的代碼。如果將所有資源都用于償還技術債的,就無法進行其他創造價值的工作。
九、最小化運營負擔:
1、最大限度地減少運營成本,擁抱運營的簡單性:
- 每一個額外的功能和新系統都代表著一棟額外的建筑,團隊需要對其進行維護,甚至是滅火。開發成本并不會在產品發布時停止累積,事實上,這些成本正是從發布之時開始累積的。維持系統正常運行,擴展功能以支持更多用戶,修復出現的錯誤,所有這些成本都會持續耗費團隊的資源,即使在功能或系統發布之后也是如此。當團隊規模較小的時候,最大限度地減輕這些負擔是至關重要的。
2、構建可以快速試錯的系統:
- 不要掩蓋錯誤,不要將故障推遲到以后才發生,否則會使程序更難調試
3、機械任務自動化:積極將手動任務自動化執行以節省時間。
4、提升快速響應及恢復的能力:
- 為故障制定預案并演習,培養快速恢復的能力,無論什么事情,總會有出錯的時候;當我們遇到問題時,在最急迫情況下試圖找出問題的原因,最終的效果往往是不太理想的。建立對系統恢復的能力信心,就可以更大膽地前進
十、為團隊成長投資:
1、幫助周圍的人獲得成功:
- 對于軟件工程師職業,級別越高,公司越不會以個人貢獻來衡量你的工作效率,而是以你對周圍人的影響作為衡量標準。在職業生涯的早期就開始思考如何幫助同事取得成功,將幫你養成正確的習慣,反過來又會幫我們自己成功
2、設計好的入職流程:
-
在新工程師入職的第一個月,對他們每天進行一兩個小時的培訓,比在產品上花同樣的時間所產生的組織影響要大得多。此外,最初為創建入職流程而投資的時間,會在每一個新加人的團隊成員身上持續得到回報。入職培訓對團隊和公司都有好處,為團隊的成功投資意味著你也更有可能成功。用心地培養新的團隊成員,最終會使你能夠更靈活地選擇杠桿率更高的活動。團隊的規模越大,成員的能力越強,意味著做代碼審查就越容易,可以修復bug的人越多,能參與響應系統告警和提供支持的人越多,完成更大型項目的機會也就越多。 好的入職流程需要實現以下幾個目標:
-
(1)助新人盡快度過適應期
-
(2)傳授團隊的文化和價值觀
-
(3)讓新員工了解成功所需的廣泛基礎知識
-
(4)通過社交方式讓新員工融入團隊
3、事后復盤匯聚集體智慧:
- 我們從每一次經歷中學到的越多,能帶入下一個項目中的經驗就越多,成功的機會就越大
4、建設卓越的工程師文化
總結
以上是生活随笔為你收集整理的读书笔记第五讲:《卓有成效的工程师》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Notes] 2018 ALAD:Ad
- 下一篇: 已知三点求圆心和半径