優秀軟體工程師必備的7大特性

2014-10-20    分類:程式設計師人生、首頁精華4人評論發表於2014-10-20

本文由碼農網 – 小峰原創翻譯,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃

不是每一個程式設計師都能成為優秀的軟體工程師。在過去的6年時間裡,我在Ooyala、Quora和now Quip這3個創業公司面試過許許多多挺有發展潛力的“種子選手”,他們都有著5年以上的工作經驗,並且曾為類似於谷歌這樣的頂級技術公司服務過,但是就是搞砸了面試。毫無疑問,這些應聘人員都是不錯的軟體工程師,並且,他們甚至可能很擅長他們目前的工作。我之所以否決他們,只是因為我不認為他們能成為一名優秀的軟體工程師。

我多年的面試、培訓和指導經驗告訴我,具備一些特殊的品質能讓軟體工程師更容易在創業環境中取得成功。並且,這些品質在初創企業比在一個更成熟的公司更為關鍵。因為在一家初創企業:

  • 1.對產品、軟體系統、團隊及其文化有一個更為深刻的認識。
  • 2.成功更依賴於團隊的表現,而非你自己。當然,如果在一家更大更成熟的公司,你的出色表現可能會成為你向上爬的踏腳石,但是在一家又小又新的公司,這根本無足掛齒。
  • 3.時間是關鍵因素,一方面是因為初創企業大多沒有盈利,另一方面則是相較於那些盤根錯節根深蒂固的老牌子公司,敏捷是他們最大的優勢。時間有限就意味著你必須馬不停蹄、加班加點,不能拖拖拉拉磨磨蹭蹭,也沒有太多的時間供你揮霍在需要解決的問題上。

我曾經有幸合作過的最有效率的軟體工程師,有著熟練的技術和卓越的決策能力。他們大多內涵以下7種特質:

1.系統除錯技巧

程式設計很大一部分時間其實是花在除錯上的。有使用者報告緊急問題,儘快將其修復;伺服器的CPU出現負載高峰,儘快找出原因;資料莫名遭到破壞,儘快找出罪魁禍首,等等,都是你的工作。而良好的除錯技巧則能讓我們乾淨利落地解決這些問題。

在除錯時,我們應該用一種科學嚴謹的思維看待問題:先假設出錯的地方,然後用最有效的方法或者最小可重現的情況去驗證。此外除錯過程還需要涉及各種的工具:發現瓶頸的分析器、單步執行程式碼的偵錯程式、縮小回歸原因範圍的git bisect、交叉分析現狀的UNIX命令列等等。

不過,除錯的應用範圍不僅僅侷限於技術領域。如果產品的增長率和使用率趨於平穩,我們該怎麼假設和測試使用者的行為以除錯未來目標的重心?如果一個團隊完不成他們的專案目標,我們該怎麼除錯才能知道導致專案流產的根本原因是技能不足,團隊溝通不暢還是別的其他原因?招聘有的時候並不能盡如人意——你也知道,大家對於你是如何除錯的過程並不能一目瞭然,不是嗎?(關鍵:先從資料入手)

2.勇於面對未知

作為一名軟體工程師,你需要經常專研那些又大又不熟悉的程式碼庫:可能你需要好好研究你正在使用的那個開源工具的程式碼,才能隨心所欲地揮灑自如;又或者你需要搞清楚其他團隊成員寫的程式碼,因為他沒有修改時間等等。所以,快速駕馭大型程式碼庫和精通相關區域的能力顯得至關重要。而這種能力大部分來自於經驗,通過閱讀過大量程式碼積累的經驗。還有一小部分則需要靠我們熟悉能搜尋程式碼庫、跳轉到相關部分的工具了,以及會查詢有關提交歷史中的版本控制——這些捷徑都能減少我們去了解新程式碼所需的時間。如果是在更為成熟的公司,這種勇於面對未知的精神也能讓我們受益匪淺,不過不同的是,我們往往只需要專注並精通一部分程式碼庫就能成果斐然了。

當然,其他非程式碼領域有時候也需要你去探索。軟體工程師常常需要接待客戶、與銷售人員討論客戶要求的可行性、給新的工程師培訓,以及其他領域的很多你甚至完全沒有接觸過的事宜。在這些經歷中成長,會讓你受益無窮。

3.對決策的務實態度

可能在一家大規模公司,在程式碼審查和單元測試堅持己見有助於改善組織平衡。但是在一家初創公司,務實更重要,因為這能讓團隊快速完成任務。在這裡我所說的務實指的是,知道什麼時候應該積極辯論,而一旦有了決策,即便你再不同意,也能一絲不苟地作為團隊的一份子認真執行。我曾經看到過因為編碼風格而相互爭執的現象,一個說在原始碼起碼得有80,100,或120個字元和大括號,而另一個覺得應該另起一行。呵呵。我深深地覺得,我們還不如把這些寶貴的時間和精力用到更重要的決策上。

對決策的指導啟發式評估應該側重於“是否最終能增加團隊成功的概率?”。很多因素都會對這個問題產生影響:產品的選擇、架構的側重點、團隊的文化、人才結構,等等。我們在決策前最好限定討論的時間,然後堅決執行,各抒己見。

4.善於運用工具

工欲善其事,必先利其器。工具的合理運用能讓我們節約大量的時間,而時間則是我們最重要的資源。高效的工程師常常是那些善於利用工具的人,而這一點在創業公司尤為重要,因為這裡的時間更緊迫。一些大型的組織可能會有專門的工具團隊。而在初創公司,你善用工具的能力越強,完成的任務數量就越多。如果這些工具也為其他團隊成員所接受,那麼團隊生產力將會發生乘數效應。

5.牛逼的多面手

初創企業早期出現的很多問題其實並不需要很專業的知識。具備的技能越多,在解決問題時遇到的瓶頸就越少,哪怕我們只是對這些技能有一個最基本的瞭解,還在摸索熟悉技能的過程中。如果前端Web工程師也裝備了基本的伺服器技術(server skill),那下次再遇到與此相關的問題就不必去請伺服器工程師在百忙之中撥冗相見了。而後端工程師,假如會一些基本的HTML、CSS和JavaScript技能,就能將他所製作的工具設計成一個Web介面,以方便其他團隊成員使用,從而不必因為缺乏Web設計師而裹足不前。一個成長中的工程師,應該是那種能順利使用基本的資料分析工具分析實驗資料,而不必受制於資料分析員的多面手。

不過,有一種更歡迎“專家”的例外是,如果是在利基、重技術的環境裡,例如啟動資料庫,那麼擁有精深的專業知識工作效率會更高。而且,隨著創業公司的發展,對於博而不精的多面手,越到後期,能取代你的人就越多。

6.保持玩家心態,而非受害者心態

在Fred Kofman的《Conscious Business》一書中,他描述了人們對待問題採取的兩種不同態度。可以是受害者心態,怨天尤人,責怪他人的不是(專案時間太少、產品推出不當、以及和隊友發生爭執等等),通通歸咎於外部原因。另一種就是玩家心態,審視自己的能力,一旦確定能做補救,毫不猶豫地貢獻自己的能量。雖然短時間內,受害者心態能撫慰我們受傷的心情,但是從長遠角度看,擁有玩家心態的人才能不斷進步與發展。

在創業公司工作壓力是很大的,並且隨著壓力程度的增加,人們往往不但不能勇於承擔個人責任,反而很容易陷入互相推諉以逃避責任的怪圈。而這樣做,我不得不遺憾的說,最後終將導致失望和解聘。

7.不斷學習與回顧,持之以恆

研究發現,只要我們有足夠的激情和動力,上述種種品質通過學習和培養都是可以後天養成的。而學習這些技巧的所有能量來源於一種叫做“堅忍不拔”的品質。Angela Lee曾在她的TED演講《The key to success? Grit》(《成功的關鍵:堅持》)中,提及這個概念:

堅忍不拔是一種專注於長遠目標的激情和毅力。堅持夢想,堅持未來,不是一天兩天,也不是一週兩週,更不是一個月兩個月,而是持續多年,不畏艱辛、勇往直前,為了目標而奮鬥。

如果我們也能擁有這種堅忍不拔的品質,願意投入時間回顧自己的所作所為,那麼就能發現自己的薄弱之處和需要改進的地方。然後隨著時間的推移,不斷進步的你必將會成為一個更為優秀的軟體工程師。在早期如果能得到大咖的指點迷津,儘早行進在正確的方向,也能讓我們走的更遠。

上述這些技能即便是在更為成熟的公司也是能助你一臂之力的,不過在初創公司發揮的作用更大,原因麼,上面也有提到,因為初創公司的時間更緊湊。當然,並不是說不具備這些技能就不是一個好的工程師了,這隻能說明,可能你不大適合這種創業環境。但是,如果你立志要成為一個優秀的軟體工程師,不要讓上面這7點品質限制你的發展。那麼,從現在開始,寫個計劃學習和提高這些技能吧!

譯文連結:http://www.codeceo.com/article/7-feature-programmer-need.html
英文原文:What Qualities Make a Good Startup Engineer?
翻譯作者:碼農網 – 小峰
轉載必須在正文中標註並保留原文連結、譯文連結和譯者等資訊。]

相關文章