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