10 個角度分析軟件工程師應該知道的 100 件事

{"type":"doc","content":[{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"構建軟件"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"numberedlist","attrs":{"start":null,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"過早優化是萬惡之源。不要低估了這個說法的有效性。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你很少需要自己從頭開始去開發一些東西,幾乎每一種應用場景都已經有了相應的庫和依賴項。所以,不要重複發明輪子。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"搞清楚問題域是找到解決方案之前的第一步,但我們卻經常會跳過第一步,直接去尋找解決方案。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":4,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"不要太過於追求完美。首先,讓它能夠正常運行,然後再去優化。優先級最高的事情應該是先保證交付。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":5,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"糟糕的程序員操心代碼,優秀的程序員操心數據結構以及它們之間的關係。--Linus Torvalds"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":6,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在代碼註釋中解釋你爲什麼要寫這些代碼,而不是解釋你在做什麼。但不要過度描述,不要把註釋當成小說寫。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":7,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"有意義的錯誤日誌可以節省大量的調試時間。在錯誤日誌中提供所有相關信息,而不僅僅是“error occurred in Function X!”另外不要記錄任何敏感信息或個人信息。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":8,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"100% 的代碼行或分支覆蓋率並不意味着你的代碼就沒有 bug。測試用例要覆蓋所有的功能需求,而不是覆蓋代碼行或分支。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":9,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果你在修復 bug,請編寫相應的測試用例,那麼這個 bug 就不會在未來某個時刻出現。bug 的出現通常是因爲錯誤的假設,爲所有這些錯誤的假設編寫測試用例將會讓應用程序變得更加健壯。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":10,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在人們閱讀你的代碼時,讓他們能夠在不記住超過 7 樣東西的情況下理解你的代碼。因爲人類大腦的短期記憶無法同時記住 "},{"type":"link","attrs":{"href":"https:\/\/psycnet.apa.org\/doiLanding?doi=10.1037%2F0033-295X.101.2.343","title":null,"type":null},"content":[{"type":"text","text":"7 樣以上"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"的東西。這也是爲什麼很多代碼檢查器在遇到包含超過 7 個參數的函數時就會發出警告。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":11,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"不要因爲別人告訴你要怎樣去做一件事情,你就照做。你要明白爲什麼要這麼做,如果你不信服,可以挑戰一下。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":12,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"解決問題應該是每個工程師都最擅長的技能。你所在的組織有很多問題需要解決,所以請開始解決問題吧。雖然不是所有問題都能夠得到解決,但在嘗試解決問題的過程中你會學到很多。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"系統設計"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"numberedlist","attrs":{"start":"13","normalizeStart":"13"},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":13,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"最好的系統設計通常是最簡單的。"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"Keep it simple, stupid!"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"("},{"type":"link","attrs":{"href":"https:\/\/en.wikipedia.org\/wiki\/KISS_principle","title":null,"type":null},"content":[{"type":"text","text":"KISS"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" 原則)。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":14,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"設計模式和最佳實踐並非銀彈。一個好的工程師遵循最佳實踐,但一個優秀的工程師知道什麼時候打破最佳實踐。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":15,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"理解抽象。代碼中引入的不必要的複雜性通常是由於糟糕的抽象導致的。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":16,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"一個系統的健壯程度取決於它最薄弱的地方。所以,請關注系統的瓶頸部分。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":17,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"偏離主要源頭越遠,事情就越糟糕。所以,儘量減少跳躍,這個原則適用於技術和非技術方面。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":18,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"不存在完美的解決方案,一切都是權衡的結果。列出解決方案的優點和缺點,以及你的真正要求。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":19,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你在項目中引入的每一項技術都有相應的風險。衡量風險並制定降低風險的計劃,不穿救生衣就不要往海里跳。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":20,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"避免過早抽象。解決你現在的問題,這樣就夠了。當你看到類似的問題或者模式出現時,這個時候應該考慮對其進行抽象。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":21,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"“軟件設計有兩種方法:一種是保持簡單,簡單到沒有明顯的缺陷,另一種是讓它變得複雜,複雜到沒有明顯的缺陷。第一種方法要困難得多,因爲要保持簡單是很難的”。——Tony Hoare。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":22,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"不要對編程語言或框架有太多偏見。如果你喜歡某種編程語言,不要過於崇拜它,也不要到處用它。如果你討厭它,也不要一直抱怨它。每種編程語言或框架都是爲特定的場景而設計的。作爲工程師,你的工作是爲特定場景選擇正確的工具。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":23,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"當你弄清楚代碼是怎樣運行,卻忘記了爲什麼要這麼做,那麼代碼中就有很多不必要的抽象和複雜性需要清理。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":24,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"一旦複雜性累積起來,就很難消除。不要認爲你當下做出的變更所帶來的一點點複雜性沒什麼大不了的,如果每個開發人員都這麼做,複雜性就會成倍地增加。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":25,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果你決定要重寫某個組件或服務,請三思而後行。讀代碼比寫代碼難,這就是爲什麼“重寫軟件”的想法在軟件開發中非常常見。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":26,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"不要猶豫,去挑戰高級工程師或架構師提出的設計,有時候你的設計比他們的更好。提出有說服力的觀點並進行客觀比較,但不要做一個盲目自信的混蛋。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":27,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"大多數時候,靜態類型語言比動態類型語言要好,儘管靜態類型系統帶來了一些額外的開銷。這也是爲什麼 TypeScript 會是最受歡迎的編程語言之一。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"一些其他貼士"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"numberedlist","attrs":{"start":"28","normalizeStart":"28"},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":28,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"優化代碼,讓它們更容易被讀懂。冗長乏味的20行代碼總比晦澀難懂的1行代碼要好。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":29,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"新手容易與自己編寫的代碼建立情感聯繫,但在敏捷開發環境中,需求和代碼會不斷髮生變化,所以你要習慣於不斷修改和刪除舊代碼。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":30,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"對於任何一個問題都要想出不止一種解決方法。試圖找到多個解決方案會迫使你以不同的方式思考問題,在有了不同的解決方案之後,你就可以做出權衡。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":31,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你負責的模塊越多,獲得的領域知識就越多。你擁有的領域知識越多,需要參加的會議就越多。你參加的會議越多,寫的代碼就越少。通過記錄和分享領域知識來打破這個鏈條,這樣你就不會成爲唯一的瓶頸點。當然,我也知道這說起來容易做起來難。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":32,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"當你在某個問題上困了很長一段時間而沒有任何進展時,重新描述這個問題或向別人解釋這個問題,大多數情況下這樣做都會有神奇的效果。爲什麼小黃鴨調試法會如此受歡迎,現在你應該知道答案了。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":33,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你不需要在理解了整個代碼庫之後纔開始工作。在瞭解了系統架構和生命週期之後,就可以開始開發你的模塊,不要浪費時間去了解每一類是幹什麼的。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":34,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"代碼是負債而不是資產。代碼越多,需要閱讀、理解、測試和維護的代碼就越多。最好的代碼是沒有代碼。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":35,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"學習如何在StackOverflow上提問題。你可能很少需要在這類平臺上提問題,但是當你使用的庫或框架只有很有限的文檔或用戶時,這就成了一項有用的技能。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":36,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果你發現了其他模塊出現了bug,請通知相應的開發人員,或者在Scrum中提及,不要因爲這些模塊不是你負責的就置之不理。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":37,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你編寫的函數應該沒有副作用,這樣易於進行獨立的測試。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":38,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"看在上帝的份上,請不要自己編寫日期格式化或日期解析函數。每種編程語言都有很多流行的庫,使用它們就可以了,日期和時區問題比你想象的要複雜得多。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"關於安全"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"numberedlist","attrs":{"start":"39","normalizeStart":"39"},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":39,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"每個開發人員都應該知道如何編寫安全的代碼。基於糟糕的設計或抽象寫代碼是可以的,但有安全漏洞的代碼絕對不行。寫代碼前先了解一下OWASP項目("},{"type":"link","attrs":{"href":"https:\/\/owasp.org\/www-project-top-ten\/","title":null,"type":null},"content":[{"type":"text","text":"https:\/\/owasp.org\/www-project-top-ten\/"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":")。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":40,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"當你想要快速格式化或驗證JSON \/ XML \/ YAML數據時,不要使用在線格式化器或驗證器,特別是如果你處理的是一些機密的生產數據。這個時候請使用本地編輯器或命令行工具,不要冒着把公司數據泄露出去的風險。(推薦工具CyberChef,"},{"type":"link","attrs":{"href":"https:\/\/gchq.github.io\/CyberChef\/","title":null,"type":null},"content":[{"type":"text","text":"https:\/\/gchq.github.io\/CyberChef\/"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":",請下載離線使用)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":41,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"永遠不要向代碼庫中推送敏感信息。在提交和推送代碼之前,一定要仔細檢查代碼中是否包含了電子郵件地址、電話號碼、密碼、認證令牌、私鑰等信息。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":42,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"總是對用戶輸入進行驗證和清理。永遠不要假設或期望用戶按照指定的格式輸入數據。在驗證用戶輸入時,首選白名單而不是黑名單。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"關於拉取請求"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"numberedlist","attrs":{"start":"43","normalizeStart":"43"},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":43,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你可以在拉取請求的評論中加入讚美之詞。當我們在代碼評審時,總是專注於不好的部分,而一個小小的讚美可以給你的同事帶來微笑。下次可以試一試這樣做。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":44,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"每天查看拉取請求,閱讀其他開發人員的評論,以獲得關於特性和編碼標準的不同觀點。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":45,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"代碼格式和其他標準應該被自動化。使用代碼格式化器和檢查器來構建項目開發管道,讓整個代碼庫保持一致和整潔。請停止在評論中進行有關tab好還是空格好的爭論!"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":46,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"創建小而美的拉取請求。如果你正在處理多個功能,請將它們分成多個拉取請求。給評審人員留有足夠的評審時間,不要在部署前1小時創建拉取請求。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"關於學習"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"numberedlist","attrs":{"start":"47","normalizeStart":"47"},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":47,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"作爲一個程序員,你應該喜歡學習和探索。如果你不喜歡這些,需要考慮其他職業選擇。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":48,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你不需要去學習每一項技術,你只需要緊跟潮流,在需要的時候學習和使用它們。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":49,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"從一個剛畢業的實習生身上也可以學到很多東西。永遠不要把你的學習對象侷限於更高職位的人。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":50,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"閱讀你所使用的開源項目的源代碼,理解和學習乾淨的代碼實踐和代碼組織方式。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":51,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"一種學習技術的方法是自己嘗試爲某個開源項目構建一個高度簡化的版本(https:\/\/github.com\/danistefanovic\/build-your-own-x)。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":52,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你可以在幾天內學會一門編程語言,但要了解它的生態系統需要幾個月甚至幾年的時間。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":53,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"探索不同的編程語言,瞭解不同的編程範式。瞭解了不同的編程範式,當你在爲不同的應用場景選擇正確的編程語言時,就會有所裨益。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":54,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"學習git,不僅僅是git pull和git commit,要理解git所有的高級概念。不管你使用的是什麼技術,都不能沒有git。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":55,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"大多數開發人員的工作都集中在Web\/網絡編程方面,所以瞭解網絡系統的底層協議是很有必要的:HTTP、HTTPS、SSL\/TLS、DNS、SMTP、IPv4、IPv6等。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":56,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"擁有良好的CSS專業知識會讓你看起來像一個大神!如果你是一個Web全棧開發者,請花幾天時間學習CSS,這將爲你避免“不知道自己做什麼”的尷尬。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":57,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"一個有吸引力的UI設計比一個健壯的系統架構更容易給人們(顯然不是指領域專家)留下深刻的印象。所以,當你在進行概念驗證時,擁有良好的設計技能是非常有用的(但不要把所有東西都硬編碼成HTML)。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"關於效率"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"numberedlist","attrs":{"start":"58","normalizeStart":"58"},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":58,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"創建細粒度的子任務來跟蹤任務進度,尤其是當你在處理一項巨大的任務時。檢查某件事是否已經完成,這會給人一種難以言表的愉悅感,這反過來會激勵你堅持下去。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":59,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"不要試圖同時做多個任務,專注於一個任務,儘量減少上下文切換,上下文切換的成本比你預想的要高。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":60,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"改進和定製你的工作流(IDE、調試工具、生產力工具、CI\/CD),幫你進行更快的迭代。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"迭代得越快,失敗得越快。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"失敗得越快,學習得就越快。"}]},{"type":"numberedlist","attrs":{"start":"61","normalizeStart":"61"},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":61,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"把你的時間花在自動化常規任務上。如果你做某件事超過兩次,那就開發一個工具,讓它在第三次時可以自動完成。但不要浪費太多時間去自動化一個只需要幾分鐘時間就可以完成的簡單任務。你應該找到一個正確的平衡點!"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":62,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"用文件夾和標籤來整理工作郵件(包括私人郵件)。每天稍微整理一下郵件,可以幫助你在需要的時候快速找到重要的文件或聊天記錄。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":63,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"學習基本的"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#4d5156","name":"user"}}],"text":"vi"},{"type":"text","text":"綁定,即使"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#4d5156","name":"user"}}],"text":"vi"},{"type":"text","text":"不是你的默認編輯器。你可以在幾乎所有的文本編輯器中使用"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#4d5156","name":"user"}}],"text":"vi"},{"type":"text","text":"綁定,相信我,在這之後你的效率將得到大幅提升。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":64,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在這個行業中,文檔技能被嚴重低估了。學習如何撰寫設計文檔、變更建議等。開始使用筆記工具來組織和記錄幾乎所有的事情——備忘錄、個人目標、職業目標、隨機出現的想法、書籍摘要,等等。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":65,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在評估任務時,一定要預留一些緩衝時間,你永遠不知道在一個未知的洞穴裏會遇到什麼怪物。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":66,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果你要邊聽音樂邊幹活,最好聽器樂或低保真節拍或平靜的音樂,而不要聽帶有歌詞的音樂。我個人覺得在聽演奏器樂時更有效率,這並不奇怪,科學方面已經爲此提供了證據支持。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"關於自己"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"numberedlist","attrs":{"start":"67","normalizeStart":"67"},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":67,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"馬上調整好你的身體姿勢!"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":68,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"工作之外最好有其他業餘愛好。雖然你是一名開發人員,但也沒必要全天候在寫代碼。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":69,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"善待每一個人!保持冷靜!最重要的是,要謙虛!"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":70,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"記住要經常休息,不要把自己弄得筋疲力盡。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":71,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"購買一套好的工作站,因爲你大部分時間都在辦公桌前度過(尤其是在遠程工作的日子裏),在高質量的產品上多花點錢是值得的。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":72,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"去了解不同的認知偏見,這樣不僅能幫助你做出更好的個人決定,還能幫助你做出更好的技術決策。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":73,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在職業生涯早期就開始投資,瞭解複利的力量,相信我,它很神奇。同時,不要過度儲蓄,如果你無法享受當下,就算存了很多錢又有什麼意義呢?"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"關於人際關係"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"numberedlist","attrs":{"start":"74","normalizeStart":"74"},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":74,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"人際交往能力和你的技術能力一樣重要。有意識地鍛鍊指導他人、公共演講、領導項目等方面的能力。開發者可以打破給人留下的“社交無能”的刻板印象。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":75,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"並不是每個人都有和你一樣的動機。不要因爲你對某個話題感興趣,就指望別人也會感興趣。不同的人對不同的動機有不同的反應。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":76,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"不要用你的同事(事實上是任何人)不懂的東西來評判他們。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":77,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"學習如何推銷自己。你可能對很多東西都很熟練,但如果你沒有在正確的平臺上展示這些技能,沒有人會欣賞你。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":78,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"幫助你周圍的人,讓他們變得更好。傳授或分享你所學到的東西。教授或寫一些你學過的東西,這樣會讓你更好地理解它們。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":79,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"勇敢地說出“我不知道”。你可能很擅長撒謊,但我們的大腦很善於識別某人是否在撒謊或假裝。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":80,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你的團隊中始終會有一個頂級的開發人員,他幾乎可以解決任何問題。不要被他們的技術能力嚇倒,看看他們提交的PR,跟他們聊技術方面的東西,並定期從他們那裏獲得反饋來提高自己。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":81,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你很有可能會在工作中遇到你最好的朋友,不要因此無法向他們敞開心扉(要不要接受這個建議取決於你自己的判斷)。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"關於溝通"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"numberedlist","attrs":{"start":"82","normalizeStart":"82"},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":82,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"傾聽,不疲於傾聽!"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":83,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果你在會議上沒有什麼想說的,也沒關係,不要東拉西扯,浪費別人的時間。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":84,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在給別人發消息時不要只是發“你好”或“早上好”之類的問候,然後等着他們回話。你要告訴他們你找他們有什麼事,沒有人喜歡你這種毫無意義的問候或祝福。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":85,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"在向別人介紹你的設計時,儘可能使用圖表,一圖勝千言。在文檔裏使用圖表也很有意義(推薦工具draw.io)。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":86,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"向別人介紹某些設計或概念時,少用行話。不是每個人都很熟悉技術術語,在使用術語時要恰到好處。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":87,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"不要羞於去問一些你認爲瑣碎或愚蠢的問題。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":88,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果你想在幾分鐘內完成工作,那就打電話。如果你想在幾個小時內完成工作,那就使用即時通訊工具。如果你不想完成工作,那就發郵件(2021年人們還在使用郵件嗎?)。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":89,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"當你向別人尋求幫助時,不要只說“嘿,這個有問題,你能幫我嗎”,你要說“嘿,我在運行程序X時出現了錯誤Y,我研究並嘗試瞭解決方案Z,但它似乎也不行,你能幫我解決這個問題嗎”。在向別人尋求幫助之前先自己做一些調查,不要因爲代碼中小小的拼寫錯誤而浪費別人的時間,說真的!"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":90,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"不要成爲"},{"type":"link","attrs":{"href":"https:\/\/zh.wikipedia.org\/wiki\/%E5%B8%95%E9%87%91%E6%A3%AE%E7%91%A3%E7%A2%8E%E5%AE%9A%E7%90%86","title":null,"type":null},"content":[{"type":"text","text":"自行車棚效應"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"(避重就輕)的犧牲品。在會議或討論中,重視複雜或關鍵的事項,而不是瑣碎的事項。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"關於職業生涯"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"numberedlist","attrs":{"start":"91","normalizeStart":"91"},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":91,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果你不喜歡自己做的事情,沒關係,但如果你討厭自己做的事情,那就不能接受了。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":92,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"當你剛進入職場時,優先考慮的是學習和發展的機會,而不是薪水、福利等。在學習效率高的活動或工作上投入更多的時間。發展綜合能力,你必須及早開始。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":93,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你工作的動力應該是爲團隊和項目增加價值,而不是爲了給別人留下好印象,進而獲得更高的薪水或晉升。如果前者做好了,後者自然會光顧。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":94,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"花點時間寫簡歷,並讓它保持最新。建議爲自己做一個可以描述你的項目和經驗的作品集網站。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":95,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"你的職位越高,你要解決的問題就越抽象模糊。所以,你要學會適應不確定性。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":96,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"每六個月問自己以下這些問題:"}]}]}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我是否在學習新的技能、拓寬自己的專業領域?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我是否對組織產生了影響?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"從我的技能和經驗來看,我的薪水是否足夠高?"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果你的答案都是否定的,那麼你必須考慮換公司或團隊了。如果你在現在的公司已經工作了2至3年以上,並且你的答案都是肯定的,那麼你應該考慮換公司,或者至少要對換公司持開放態度。"}]},{"type":"numberedlist","attrs":{"start":"97","normalizeStart":"97"},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":97,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果你仔細觀察,你會發現編程和寫作非常相似。編程語言類似於人類語言,程序員類似於作家和詩人。任何人都可以成爲作家,但要成爲一名優秀的作家需要付出大量時間和努力。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":98,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"定期與經理進行一對一面談,並尋求反饋,不要等到年終總結時才發現“驚喜”。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":99,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"如果你的經理沒有爲你的失敗負責,並責怪你,那麼在他們手下工作就是在拿你的個人和職業發展冒險。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":100,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"經驗年限只是一個數字。有時候你會發現初級工程師比高級工程師對某些事情更熟悉。但請不要誤解了我的意思,經驗教會你的不僅僅是技能。工作經驗固然重要,但這並不是評判一個工程師的唯一因素。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"額外的建議"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"numberedlist","attrs":{"start":"101","normalizeStart":"101"},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":101,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"記住"},{"type":"link","attrs":{"href":"https:\/\/zh.wikipedia.org\/zh-hans\/%E5%B8%95%E7%B4%AF%E6%89%98%E6%B3%95%E5%88%99","title":null,"type":null},"content":[{"type":"text","text":"帕累托法則"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"(80\/20法則),它幾乎適用於軟件工程的方方面面:"}]}]}]},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"80%的工作是由20%的工程師完成的;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"80%的影響是由20%的工作所帶來的;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"80%的錯誤是由20%的代碼造成的;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"80%的慢性能是由20%的代碼造成的。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我可以舉出無數個例子。"}]},{"type":"numberedlist","attrs":{"start":"102","normalizeStart":"102"},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":102,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"對於那些在StackOverflow出現之前就開始寫代碼的開發人員,我們是否應該給他們一點掌聲?StackOverflow可以解決你95%的問題(但千萬別在上面問你的個人問題)。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":103,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Git的提交消息應該具備足夠好的描述,這樣你就可以從成千上萬的代碼提交中輕鬆搜索到你想要的。停止使用諸如“修復了一個bug”、“改進了性能”、“修改了X模塊”之類的描述。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"原文鏈接:"},{"type":"link","attrs":{"href":"https:\/\/hkandala.dev\/100-things-you-should-know","title":null,"type":null},"content":[{"type":"text","text":"https:\/\/hkandala.dev\/100-things-you-should-know"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章