Software Engineer-the Soft Part

這是一本很務實的書,厚度也很薄,作者為 google chrome 項目負責人 Addy Osmani,內容是他過往的經驗整理出來的軟技能指引

這裡記錄一下書中個人覺得很有感的部分

Notes

  1. 技術精通意味著交付價值與工時比高,這表示你可以辨識出哪些任務可以帶來價值,並協助團隊專注在這些任務上,同時也表示你知道如何避免不帶來價值的工作,最好的工程師甚至可以引導整個團隊避免不帶來價值的工作
  2. 批判性思考是帶有目的地思考形成自己的結論,可以讓你更加專注根本原因,避免未來可能出現的問題
  3. 避免落入假設性相關等於因果相關的思維陷阱,具有批判性思維的人可能對這樣的假設提出質疑,詢問我們為什麼相信他是真的
  4. 學習基礎的長期價值在於他有可轉移性,短期價值在於能幫助你做出更好的決策。可轉移技能有宏觀與微觀層面,宏觀來看程式語言的基本原理都差不多,經常使用基本原理可以產生很巨大的價值,微觀角度來看語法雖熟悉但技能無法轉移,同時你也不該過於關注基礎知識,學以致用才是重點
  5. 具有充足的基礎知識才能做出更好的決策且走得更長遠,比如考量框架或是避免選擇錯誤的技術
  6. 只有在你明白何時不該使用一個工具之前,你才算是真正掌握了它 - @kelseyhightower
  7. 專注在使用者/開發者體驗,不要做出基於特定解決方案導致的結果(比如因為 laravel 好用就一定要用 laravel)
  8. 使用無聊(被驗證過)的技術,然後有意識地選擇最適合解決問題的工具,在技術領域 FOMO 可能並不是一個有效選擇,雖然了解如何用是重要的,但是最終還是以交付價值為主,除非這些技術可以增加你產出的價值
  9. 學習新技術最好的時機就是利用新項目來學習:利用費曼學習法來加速學習
  10. 要讓項目可以持續發展,就應該成為項目的照顧者而非擁有者,好好地撰寫文件讓項目在你不在時也能夠持續發展
  11. 軟體的價值在於產生程式的人所累積的知識而非程式碼本身:不要沒事就重寫程式碼,你等於在拋棄過往的群體知識
  12. YAGNI(You aren’t gonna need it) 表示在不必要時不該添加功能,專注在真正能交付價值的事情上,但也須保持適度的抽象,避免草率地抽象(AHA),專門針對特定問題進行解耦同時試圖找出稍微可以通用的部分是更好的做法
  13. 最好的模組是那些效益最大、成本最低的模組。介面要窄、功能要深
  14. 處理 legacy code 的良好心態是不要假設每一行代碼都是相關的,充分理解後移除不需要的部分
  15. 處理問題時,好好地定義「完成」是重要的,可以避免未來不需要的修訂。這些定義可能包含滿足驗收標準、通過測試與否、是否有撰寫文件等等
  16. debug 訊息才是真實情境,不要一直進行小的修改企圖嘗試修正問題
  17. 設計文檔是軟體工程的一部分,不該是事後的問題,協調設計文件的審查,並隨著演變與原始文件進行比較,已驗證是否解決相關問題
  18. 溝通時應將更多精力用於善良之上,雖然可能會花更多時間,但會讓他人更願意與你溝通進而達成有效地溝通,不要用太專業的術語,要依照溝通對象決定使用的詞彙
  19. 拒絕好過 over promised
  20. 一位資深工程師應該擅長設計軟體系統和人力系統或團隊。你可以領導一個多元 化的工程師團隊,將任務分派給他們,指導他們關注程式碼品質、效能和簡潔 性。在需要時給予反饋,必要時為他們辯護。同時,你應該能夠行銷自己、你的 工作以及解決具有挑戰性問題的能力,以在組織中獲得曝光度。總體而言,你應 該管理好與團隊內部和管理層的人際關係。
  21. 透過引導的方式讓 jr. 工程師能夠問出正確的問題,當回答問題時讓對方知道你很高興你提出這個問題
  22. 堅決捍衛你的觀點,但當有新的證據時也需要重新審視觀點的假設
  23. 教團隊捕魚,進行內外協調,致力於提升團隊產出,越資深越應專注在管理層與團隊的人際關係
  24. 團隊的效率才是效率,接受冒名者綜合症:認為自己總是不足以勝任某個職位,但他可以激勵你學習
  25. 了解商業模式,你寫的程式碼會對業務邏輯造成的影響很巨大,對商業軟體的洞察力與敏銳度會成為提升工作影響力的關鍵,因為你更能貼近市場,自然做出的會是有影響力的事情
  26. 從使用者體驗出發,逆向思考需要的技術
  27. 指導是引導,提出想法讓被指導者嘗試,如果有人無法解決問題就提出實際的作法,以及思考方式提供參考,比如 debug 中做了哪些事情,而不是直接給出答案
  28. 不要一次試圖完成太多事情,深度工作的時間非常重要
  29. 估時可以隨時更新,因為軟體估時本來就很複雜,在理解更深入的需求後才能越來越準確,比較好的方式是粗估、細估、分階段上線
  30. 領導者能夠承認自己不懂某事是一種強大的表現。 擁有這種自信可以降低高級工程師必須懂得一切的期望。你絕對不需要擁有所有 答案,但能夠承認自己是人類,並致力於與團隊一起解決問題是最重要的部分。
  31. 技術債的償還應為技術負責人定期花時間清理,預防勝於治療
  32. 專注在問題,其他專案的問題也有可能是你專案的問題
  33. 讓自己置身於卓越之中,與那些在自己所做之事上最優秀的人一同工作 - Brian Staufenbiel
cmd + /