眾所周知,并不是每一個程序員都能成為優秀的軟件工程師。許許多多發展潛力良好的“種子選手”,有著多年的的工作經驗,并且曾為大型或者超大型的技術公司服務過,按時到且止步于面試。
我們可以肯定,應聘人員都是能力不錯的軟件工程師,甚至可能很擅長他們目前的工作。在面試中否決這些人,只是因為面試官不認為他們能成為一名優秀的軟件工程師。而具備一些特殊的品質能讓軟件工程師更容易在創業環境中取得成功。同時這些品質在初創企業比在一個更成熟的公司更為關鍵。
因為在一家初創企業:
1.由淺及深,可以對產品、軟件系統、文化及團隊有一個更為深刻的認識。
2.成功源于團隊的表現,而非個人之功。如果位于一家更大更成熟的公司,你的出色表現就會成為你向上爬的踏腳石,但是在一家又新又小的公司,這根本不值一提。
3.時間是控制因素,一是因為初創企業盈利能力薄弱,另外則是和那些盤根錯節根深蒂固的老牌子公司相比,靈活敏捷是他們最大的優勢。而時間有限就意味著必須馬不停蹄、加班加點,不能拖拉磨蹭,也就是說沒有太多的時間供你揮霍在需要解決的問題上。
而有著卓越的決策能力和熟練的技術,則是最有效率的軟件工程師。這樣的工程師大多內涵以下7種特質:
1.很大一部分時間其實是花在系統調試上的,而非技巧編程。
當有用戶報告緊急問題,盡快將其修復;當數據莫名遭到破壞,要盡快找出罪魁禍首;當服務器的CPU出現負載高峰,盡快找出原因等等,都是工程師的工作。而良好的調試技巧則能讓企業干凈利落地解決這些問題。
所以在調試時,應采用一種科學嚴謹的思維看待問題:先去假設出錯的地方,然后用最小可重現的情況或者最有效的方法去驗證。此外,調試過程還需要涉及各種的工具:縮小回歸原因范圍的git bisect、交叉分析現狀的UNIX命令行、發現瓶頸的分析器、單步執行代碼的調試器等等。當然,調試的應用范圍不僅僅局限于技術領域。
如果產品的使用率和增長率趨于平穩,那么該如何假設和測試用戶的行為以調試未來目標的重心?若一個團隊完不成他們的項目目標,又該怎么調試才能知道導致項目流產的最終原因是團隊溝通不暢,技能不足還是別的其他原因?關鍵:先從數據入手
2.對于未知勇于挑戰。
面對未知作為一名軟件工程師,需要經常專研那些又大又不熟悉的代碼庫。可能需要好好研究正在使用的開源工具的代碼;又或者需要掌握其他團隊成員寫的代碼等等。所以,能快速駕馭大型代碼庫和精通相關區域的能力顯得至關重要。而這種能力一般來自于經驗,通過閱讀大量代碼積累。另外則需要靠熟悉能搜索代碼庫、跳轉到相關部分的工具,以及會查找有關提交歷史中的版本控制——這些捷徑都能減少了解新代碼所需的時間。
若是在成熟的公司,這種未知也能讓我受益匪淺,不過不同的是,工程師往往只需要專注并精通一部分代碼庫就能成果斐然了。當然,其他非代碼領域有時候也需要你去探索。軟件工程師常常需要與銷售人員討論客戶要求的可行性、接待客戶、給新的工程師培訓,以及其他領域甚至完全沒有接觸過的事物。
3.在一家大規模公司決策的務實態度,在代碼審查和單元測試堅持己見有助于改善組織平衡。
但在一家初創公司,關鍵因素是:務實。這能讓團隊快速完成任務。比如:知道什么時候應積極辯論,當一旦有了決策,即便你再不同意,也能一絲不茍地作為團隊的一份子認真執行。而對決策的指導啟發式評估應側重于“是否最終能增加團隊成功的概率?”。很多因素都會對這個問題產生效果:團隊的文化、產品的選擇、架構的側重點、人才結構等等。在決策前最好限定討論的時間,然后執行,參與人員各抒己見。
4.工欲善其事,必先利其器。
工具的合理運用能節約大量的時間,時間則是工程師最重要的資源。對于初創公司,工程師善用工具的能力越強,完成的任務數量就會越多。而高效的工程師常常是那些善于利用工具的人,這一點在剛創業公司尤為重要。一些大型的組織一般會有專門的工具團隊。若這些工具也為其他團隊成員所接受,那么團隊生產力將會發生乘數效應。
5.高大上的多元化初創企業,早期出現的許多問題并不需要很專業的知識。
具備的技能越多,在解決問題時所遇到的瓶頸就越少,哪怕只對這些技能有一個最基本的了解,甚至還在熟悉摸索的過程中。如果前端Web工程師同時裝備了基本的服務器技術(server skill),當下次再遇到與此相關的問題就不必去請服務器工程師了。而后端工程師,若會一些基本的HTML、CSS以及JavaScript技能,就能將其所制作的工具設計成一個Web界面,方便其他成員使用,不必因為缺乏Web設計師而裹足不前。一個在成長的工程師,應該能達到順利使用基本的數據分析工具分析實驗數據,而不必受制于數據分析員。不過,還有一種更歡迎“專家”的例外,如果是在利基、重技術的環境中,擁有更加精深的專業知識和工作效率。隨著創業公司的不斷發展,對于雜而不精的多面手,越到后期,替代品就會越多。
6.保持玩家心態,而非受害者心態
在《Conscious Business》一書中,Fred Kofman描述了人們對待問題采取的兩種不同態度。一種就是玩家的心態,審視自己的能力,一旦確定能做補救,毫不猶豫投入。一種是受害者的心態,怨天尤人,責怪他人的不是,例如產品推出不當、項目時間太少、以及和隊友之間發生爭執等等,通通歸咎于外部因素。在短時間內,受害者心態可能撫慰受傷的心情,但是從長遠角度分析,擁有玩家心態的人可以不斷進步和發展。而在創業公司工作壓力是很大的,同時隨著壓力程度的增加,人們往往回顧,不去勇于承擔個人責任,陷入逃避責任和互相推諉的怪圈。
7.不斷學習與回顧,持之以恒。
研究發現,只要程序員有足夠的激情和動力,上述品質是可以通過學習和培養后天養成的。堅忍不拔是一種專注于長遠目標的激情和毅力。眾所周知堅持夢想,堅持未來,不是一兩天之功,也不是一周兩周之效,更不是一個月兩個月就可以實現,而是持續多年,不畏艱辛、勇往直前,為了目標而奮斗。隨著時間的推移,不斷進步,一定會成為一個更為優秀的軟件工程師。
上述這些技能即便是在更為成熟的公司也是能助你一臂之力的,不過在初創公司發揮的作用更大。當然,并不是說不具備這些技能就能成為一個好的工程師了,這說明,可能你不大適合這種創業環境。但是,如果要立志成為一個優秀的軟件工程師,不要讓上面這7種因素限制發展。從現在開始,模擬一個學習計劃來提高技能吧!
-
軟件工程師
+關注
關注
8文章
218瀏覽量
21141
發布評論請先 登錄
相關推薦
評論