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

不是每一個程序員都能成爲優秀的軟件工程師。在過去的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?
翻譯作者:碼農網 – 小峯


發佈了26 篇原創文章 · 獲贊 12 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章