溝通創造價值,分享帶來快樂。這裡是程式設計師日報,每天和你分享讀書心得,歡迎您每天和我一起精進。
今天要分享的是前 Netflix 和 Amazon 主管 Michael Lin的心得筆記,我從中學到不少軟技術的能力,它甚至比技術本身更加重要,希望你讀完會有所收穫。
初級工程師常犯 3 個錯誤,你在做嗎?
10x 工程師是事實,最好的工程師比普通工程師好 10 倍。就像一支單人軍隊一樣,他們自己提供的價值比一支初級工程師團隊加起來的速度更快。
在我擔任 Netflix 和 Amazon 的工程主管期間,我曾與兩位剛畢業的實習生一起工作,一直到首席工程師(亞馬遜的 L7 及以上),我可以證明確實存在 10 倍工程師。我也可以自信地說他們並不具備:
- 打字速度快 10 倍
- 工作 10 倍的時間
- 編寫 10 倍以上的程式碼
事實上,10 倍工程師可能會以一半的速度打字,一半的工作量,並花更多的時間刪除程式碼而不是編寫程式碼。
10x 工程師往往也更擅長 LeetCode,但這並不是讓他們與眾不同的地方。
最好的工程師和初級工程師之間的區別歸結為心態問題。他們使用正確的工具,提出正確的問題,並且知道如何確定優先順序。
最好的工程師與普通工程師的區別在於非技術技能。
在本文中,我討論了初級工程師常犯的 3 個常見錯誤,以及高階工程師如何以不同的方式解決相同的問題——從而導致截然不同的結果。
1. 對工具的研究不夠
亞伯拉罕·林肯曾經說過:“如果我有 8 個小時砍樹,我會花 7 個小時磨斧頭。”
初級工程師將花費 8 個小時用鈍斧砍伐。高階工程師花了一個小時挑選合適的電鋸,5分鐘後砍樹。
我看到初級工程師犯的一個常見錯誤就是:他們一頭扎進編碼中。他們只堅持使用他們知道的工具,並嘗試使其適應各種情況。
如果一個普通工程師只知道如何使用錘子,他們也會用它來挖洞。
他們幾乎沒有花時間研究其他替代方案——或者是否有可能完成編寫 0 程式碼的工作!
使用正確的工具是:工作數週與在幾分鐘內完成任務之間的區別。這就是產生 10 倍差異的地方。
- 任務示例:建立網站
最近,我有幸與一位初級工程師打賭:誰可以更快地建立個人網站。
新畢業生用了 2 周時間,寫了 1000 多行程式碼。兩週後她甚至沒有完成!我花了 1 天時間,寫了 0 行程式碼,甚至沒有流汗。
當我請初級工程師解釋她是如何處理這個問題時,很清楚為什麼她花了這麼長時間才完成:
“嗯,我在學校學會了如何製作 React 應用程式,所以我只是用它從頭開始建立了一個網站。但是很難讓影像和 CSS 正確。而且我也不知道如何部署它。所以我想我必須在 AWS 上編寫一個自定義部署指令碼,但對控制檯有點困惑。微型例項和大型例項又有什麼區別?”
請注意這位工程師的方法遺漏了幾個關鍵點。首先,他從未討論過:
- 需求——沒有提及搜尋引擎優化、評論或預建模板是否重要。
- 替代工具——他們只知道 React + AWS 並堅持使用它。
想象一下嘗試從頭開始開發評論,並做SEO,每一塊工作量都無比巨大,難怪他沒有說完!
2.不尋求幫助
這是一個非常簡單的問題,很容易修復,但造成了太多的時間浪費。
一些初級工程師有這樣的誤解,認為高階工程師就像一個孤獨的天才。如果他們堅持解決問題,他們最終會得到解決方案,但這是一種相當幼稚的思維方式。
因此,他們不只是尋求幫助,而是在程式碼庫上苦苦掙扎,一遍又一遍地檢視相同的程式碼行,哪怕向隊友提出 5 分鐘就會立即解決問題!
一個知道如何尋求幫助的初級工程師總是會擊敗一個從不尋求幫助的更有才華的工程師。
有時很明顯,需要額外的上下文資訊才能開展工作。例如,不清楚:
- 為什麼程式碼庫的結構是這樣的?
- 呼叫哪個 API?
- 如何展開部署工作?
在這些情況下,您最好尋求幫助而不是進一步挖掘程式碼庫,不要害怕尋求幫助!
3. 沒有提供商業價值
10x 工程師首先是投資者。
他們明白工作是一項投資——必須講究投資回報比。我們必須瞭解:花費在一個功能上的時間意味著失去開發另一個功能的時間。
工程師必須權衡機會成本——“在所有功能中,這個功能是否最能利用你的時間?”
他們需要明白程式碼是達到目的的一種手段——業務目的。如果他們可以在沒有程式碼的情況下實現他們的目標,那就更好了!編寫的工作量更少,維護的程式碼也更少——這是一個雙贏的局面。
我看到很多新工程師忽略了這些業務目標,我們來舉一些例子:
- “這項新技術真的很酷。讓我們花 5 天時間將其整合到網站中”(與產品不對齊)
- “呃,我不喜歡程式碼的結構方式。讓我們花在下一個 spring 重構上”(機會成本——可以把這段時間花在構建創收功能上)
- “這個平臺太老了——讓我們遷移到一個新平臺吧”(遷移是否可以幫助您顯著加快遷移速度,還是隻是漸進式改進?)
正是這個思維方式導致了10 倍的工程師。
如果一個初級工程師花 2 小時處理一個不會增加收入的複雜功能,但一個高階工程師花 1 小時進行一個簡單的副本更改,收入增加 5 倍,那麼我們的工作效率就會提高 10 倍:
一半的時間花在產生 5 倍收入 = 10 倍交付價值的功能上。
最後
非技術技能(“軟技能”)是高階工程師和初級工程師之間的區別。
工程化比作死要難得多,不要因為你的自我而讓你的努力付諸東流,永遠記住:
工程師必須首先交付價值。
我的閱讀體會:
本文從逆向進行思考,沒有提出方案,但是從逆向提出可能影響程式設計師效率的問題,我個人覺得都是大問題。不注重工具研究,不尋求幫助都是在浪費時間,不能交付商業價值是在做無用功。
我很喜歡作者把工作當做一種投資,工作是一種商業行為,必須要講究投資回報比,否則是非常危險的,當然有時候你不知道這種回報是對的還是錯的,那是另外一個話題了。
以上就是我的翻譯和閱讀體會,如果你有新的想法,歡迎你給我留言,希望對你有所幫助!