本部落格原文Five Key Mindsets that Separate Successful Programmers from Everyone Else
The Effective Engineer作者Edmond Lau授權翻譯。

Dave Cutler,在 74的年齡仍然每天到微軟辦公室去寫程式。

我第一次聽說 Cutler 是因他於電腦產業50年的貢獻獲得電腦歷史博物館研究員獎(Computer History Museum Fellow)。 1 光根據他幾乎一輩子奉獻在軟體程式, 許多人會認為他是「強悍」的程式設計師。

比他終身職位更令人振奮的是, 他的工作已經影響20億的電腦使用者的經驗。  在他許多貢獻中, Cutler 建置了Windows NT很重要的部分 — 過去20年來所有主要Windows版本的基礎, 讓微軟在早期於市場上有很大的優勢, 能回溯之前的作業系統, 讓作業系統與前面的版本相容。 他被稱為   “微軟Windows作業系統背後的關鍵技術頭腦 ”。 2

是什麼讓Cutler這樣的人成為如此成功的程式設計師?  我們要如何立志才能達到可能只到他的幾分之幾的影響力呢?  什麼因素讓這些最強的程式設計師以他們的軟體創造出如此傑出的正向影響?

以上最後一個問題是我在寫The Effective Engineer這本書時特別投入研究的主題。  雖然程式設計不是工程師唯一的活動, 但是這仍是最主要的一項。  在訪談許多矽谷頂尖公司的工程部門主管後, 我發現最有效率的工程師, 確實完成任務而且擁有很大影響力者, 都至少有以下五個程式設計的思維:

1. 對於陌生的代碼會毫不畏懼地下去了解


跳進一個不熟悉的程式碼基底(codebase)讓人不舒服甚至感到害怕 — 很多人可能連試都沒試就放棄了。  這種嚴苛的技巧在你多次嘗試後將不再困難, 且經過這種歷練, 你將會有顯著的成長。  如果一個開源library或另一團隊給的library不如你的預期, 這剛好給你了彈性跳入, 抓出為何你覺得不好的原因。

對陌生感到害怕不會只侷限於程式碼。 每次你換工作, 你可能會遲疑是否有辦法複製前一角色一樣強的工作表現。  很少人不公開談「冒名頂替綜合症」( imposter syndrome), 但我曾聽過CTO職位的人告訴我他們有覺得自己是冒牌的感覺。

事實上每個人的起步都不一樣。 Culter的學歷是一間小型的人文科學大學, 且不曾受過正式的電腦科學教育。 從很多方面來說, 他的起步落後於同儕, 且需要透過嘗試和錯誤學習很多事務。

為了與時俱進,我們必須採用成長的思維與 最佳化學習 。  任何技術, 不管是程式設計、溝通、 聯網、小型演說或任何其他事務, 都是學得來的, 只要你願意花時間。 就你想學的項目找書來讀、尋求幫助。  相信隨著時間, 處理不熟悉的事務會越來越容易。

2. 精通解Bug


“為什麼我寫出來的程式碼跑不出我要的效果?” ,這是身為軟體工程師每天會問自己的問題。   解決bug的能力對於工程師完成工作的效能有不成比例的高度影響, 然而在大學的教學裡以及技術的面試都還沒受到應有的重視。

你如何有效率的 debug ? 由其核心濾出的科學方法:

  • 猜猜到底發生了什麼事。
  • 假設猜測正確, 辨識此猜測將會有哪些結果?
  • 試著觀察與結果抵觸的事實。
  • 如果有任何牴觸,你的猜測就不正確, 所以請做另外的猜測。 如果沒找到任何牴觸, 那已找到其中一個原由。

要能更快些除錯,你必須要學會做更好的猜測, 且你要精通那些能讓你更有效觀察的工具與技術。

是否能做更好的猜測取決於你解決更多的問題也因此經歷了更多的練習。

是否能有更好的觀察能力在於你是否建立了技術竅門。 先從每件事都有辦法觀察到的假設開始, 然後找出可以讓你做到某種觀察或更快辨識出來的工具和機制。 別以為你只能從你熟悉的有限工具來做觀察。  經常有可能某人已經發展出某個工具, 它已經知道你想要找的。

3. 投資可省時的工具


當電腦剛剛問世,計算資源很有限且昂貴, 所以程式設計師在使用電腦時要很注意資源佔用。  而現在, 亞馬遜雲端的一小時運算花費不到一毛錢。3

但反觀來看, 我們仍然一樣一天只有24小時, 一星期只有7天。  這表示任何手動的工作如果可以用電腦替代處理, 將會是高度減輕工作負擔的槓桿。  我們以投資省時的工具以及自動化流程來達到。  只要是能讓我們放大投入相同時間的產出, 或能在我們睡覺時或專心其他問題時幫我們自動做某些事的工具, 都值得考慮投資。

當我在寫The Effective Engineer , 我與前Facebook的工程總監Bobby Johnson(他把6人的架構團隊成長到100人以上)座談時, 他提到一個他觀察到的現象讓我想很久。 「在這些成功的人中, 幾乎所有人都寫了蠻多工具。 」

似乎很明顯的, 對於一些工程師而言工具是很棒的投資, 可是當我們真正的去分解一天的工作時間, 計算要花多少百分比在工具建置上, 我們認為應該不會很高。 而在Johnson團隊中,很多最好的工程師事實上花三分之一的時間在工具上, 用這些工具來做程式碼的部署、監控系統以及更多方面來幫助他們在更短的時間內完成更多事。

不要一直做可以運用機器就能幫你做好的事。

4. 最佳化例行性動作的執行速度


假如說從一個function call找到並導覽到它的定義花你12秒,如果你一天要做類似的導覽60次。 那就是每天要花12分鐘在檔案的導覽。 如果你夠熟悉文字編輯到檔案導航的快捷鍵, 將12秒縮短到2秒, 那麼經過一天, 你節省了10分鐘。  每年加總起來你可省40小時, 相當於一個工作星期。

找出三個類似的最佳化,如此你將節省一個月。 想像你每年多出一個月的時間可以做什麼?

或假設你正在解決一個bug, 這需要你開啟這個app然後瀏覽過五個畫面後以設定好的條件引起那個bug。 你可以花10分鐘來寫個程式幫你從開啟然後直接引到發生bug的畫面嗎? 如此你將因為這小小的起始投資大大的加快迭代速度。

系統性的思考: 「我可以如何加快重複性動作的速度」,  這個收益將會很豐碩而且 隨著時間加倍  。

5. 從系統級高度來思考


當你寫程式時, 你很容易認為所謂「工作完成」就是你已經寫完規格所要求的程式碼。  但這真的只是冰山一角, 任何被閒置在程式碼貯存庫(repository)裡的作品而且沒有拿出來運作的都是毫無價值的產物。

為了建置並交付真的有用的程式碼, 你必須超越寫程式的角度, 以系統級的高度來思考:

  • 你寫的程式碼如何與其他人建立的程式基底和功能配合?
  • 你對自己寫的程式碼已經做夠足夠的測試了嗎?品保團隊(如果有)能夠運作你建立的功能嗎?
  • 為了部署你寫好的程式碼,營運生產環境需要做什麼變動?
  • 你新增的程式碼對於正在運行的其他系統會有不良的作用或影響效能表現?
  • 當使用你所寫的部分, 客戶與使用者的行為如你預期嗎?
  • 你所寫的程式碼有達到你想發揮的事業影響力?

這些都不是簡單的問題,需費點功來回答。 但你需要一個清楚的心智地圖了解你寫的程式碼是否符合大方向,指引你在時間和精力上的分配, 讓自己的工作往更有影響力的方向發展。

這五個程式設計的思維將幫助你起步,但記得要成為成功的程式設計師或工程師一定還有更多條件是超乎寫程式的範圍。 如果你想要更多來自Google、Facebook、Twitter、 LinkedIn、 Airbnb、Reddit和其他頂尖科技公司的最佳工程師給的提示, 訂閱兩個星期免費的email課程 (sign up for the newsletter)或購買The Effective Engineer, 探索如何最大化你的影響力。

享受你的工作!

此部落格內容是原本作者於Quora的 問答 整理出來

也許你會有興趣

關於 Soft & Share

自 2010 年開始經營軟體開發資訊分享粉絲專頁,以分享軟體開發相關資訊為主,目前也經營 Soft & Share 團購 & 特價課程資訊分享 社群,希望提供給軟體開發者更多元的學習資訊與管道以協助工程師可以在職涯持續成長與成功。

覺得這篇文章不錯嗎?  將很感謝您的分享!

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

分類

Career Growth