很會寫程式就可以當一個傑出的工程師嗎?矽谷科技公司的資深工程師們認為,還必須具備五項能力。曾任職於 Google 和 Quora 、現任 Quip 軟體工程師的 Edmond Lau,於《The Effective Engineer》一書中,訪問了 Facebook、Instagram 和 Google 等公司的資深軟體工程師,歸納出他們眼中高生產力的傑出軟體工程師都具備的五種能力。
一、不害怕探索陌生程式語言
接觸新專案或是轉換工作跑道時,都有可能需要學習全然陌生的程式語言,許多人對此感到害怕,甚至未嘗試就先放棄。其中,跳脫舒適圈的恐懼往往多於學習程式,會擔心是否無法重現過去工作的好表現,甚至因此懷疑自身能力。
不論是多厲害的工程師,一定都有起點,就像打造 Microsoft Windows 基礎的微軟資深工程師 Dave Cutler 為文組出身,沒受過正式電腦科學教育,比起同輩花更多時間在錯誤中學習。在這之中,最重要的兩個關鍵為具備「成長心態」(growth-mindset)而非「固守心態」(fixed-mindset),以及「樂於學習」(optimize for learning)的態度。
學習陌生程式語言這項關鍵能力會越練越上手,並讓你在學習過程中成為更好的程式設計師。
二、精通 Debug
「為什麼程式跑出來和我預期的不一樣?」是許多工程師會遇到的問題。Debug能力往往是影響工程師是否能順利完成專案的關鍵因素,卻被大部分人低估。Debug的系統性思考如下:
1. 先假設造成bug的可能原因。
2. 若假設為真,界定此假設可能導致的結果。
3. 試著檢視是否有和這些結果衝突的現象。
4. 若有衝突表示假設錯誤,要重複上述思考過程。
由此可知,想加快Debug速度,要提升「提出假設」和「檢視假設」的能力。假設能力可隨著Debug經驗的累積而提升,檢視能力則需加強善用檢測工具的技能。在此過程,必須先假設所有東西都是可檢視的,並找出可用來檢測或加快檢測速度的工具或機制,千萬不要只用自己熟悉的工具。
三、開發節省時間的工具
減少時間做那些電腦就可做的工作,例如開發節省時間的工具和使工作流程自動化。
曾負責 Facebook 軟體基礎建設團隊的軟體工程師 Bobby Johnson,帶領該團隊從 6 人成長至超過 100 人。他觀察到,團隊中表現出色的人多數寫了許多工具,這些看似和績效無直接相關的工具開發時間可能佔三分之一的工作時間,卻因此大大提升工作效率,其中包含用來部署程式、監測系統,以及其他可節省時間的工具。