不是每一個程序員都能成為優(yōu)秀的軟件工程師。在過去的6年時間里,我在Ooyala、Quora和now Quip這3個創(chuàng)業(yè)公司面試過許許多多挺有發(fā)展?jié)摿Φ摹胺N子選手”,他們都有著5年以上的工作經(jīng)驗,并且曾為類似于谷歌這樣的頂級技術(shù)公司服務(wù)過,但是就是搞砸了面試。毫無疑問,這些應(yīng)聘人員都是不錯的軟件工程師,并且,他們甚至可能很擅長他們目前的工作。我之所以否決他們,只是因為我不認(rèn)為他們能成為一名優(yōu)秀的軟件工程師。
我多年的面試、培訓(xùn)和指導(dǎo)經(jīng)驗告訴我,具備一些特殊的品質(zhì)能讓軟件工程師更容易在創(chuàng)業(yè)環(huán)境中取得成功。并且,這些品質(zhì)在初創(chuàng)企業(yè)比在一個更成熟的公司更為關(guān)鍵。因為在一家初創(chuàng)企業(yè):
- 1.對產(chǎn)品、軟件系統(tǒng)、團(tuán)隊及其文化有一個更為深刻的認(rèn)識。
- 2.成功更依賴于團(tuán)隊的表現(xiàn),而非你自己。當(dāng)然,如果在一家更大更成熟的公司,你的出色表現(xiàn)可能會成為你向上爬的踏腳石,但是在一家又小又新的公司,這根本無足掛齒。
- 3.時間是關(guān)鍵因素,一方面是因為初創(chuàng)企業(yè)大多沒有盈利,另一方面則是相較于那些盤根錯節(jié)根深蒂固的老牌子公司,敏捷是他們最大的優(yōu)勢。時間有限就意味著你必須馬不停蹄、加班加點(diǎn),不能拖拖拉拉磨磨蹭蹭,也沒有太多的時間供你揮霍在需要解決的問題上。
我曾經(jīng)有幸合作過的最有效率的軟件工程師,有著熟練的技術(shù)和卓越的決策能力。他們大多內(nèi)涵以下7種特質(zhì):
1.系統(tǒng)調(diào)試技巧
編程很大一部分時間其實是花在調(diào)試上的。有用戶報告緊急問題,盡快將其修復(fù);服務(wù)器的CPU出現(xiàn)負(fù)載高峰,盡快找出原因;數(shù)據(jù)莫名遭到破壞,盡快找出罪魁禍?zhǔn)祝鹊?,都是你的工作。而良好的調(diào)試技巧則能讓我們干凈利落地解決這些問題。
在調(diào)試時,我們應(yīng)該用一種科學(xué)嚴(yán)謹(jǐn)?shù)乃季S看待問題:先假設(shè)出錯的地方,然后用最有效的方法或者最小可重現(xiàn)的情況去驗證。此外調(diào)試過程還需要涉及各種的工具:發(fā)現(xiàn)瓶頸的分析器、單步執(zhí)行代碼的調(diào)試器、縮小回歸原因范圍的git bisect、交叉分析現(xiàn)狀的UNIX命令行等等。
不過,調(diào)試的應(yīng)用范圍不僅僅局限于技術(shù)領(lǐng)域。如果產(chǎn)品的增長率和使用率趨于平穩(wěn),我們該怎么假設(shè)和測試用戶的行為以調(diào)試未來目標(biāo)的重心?如果一個團(tuán)隊完不成他們的項目目標(biāo),我們該怎么調(diào)試才能知道導(dǎo)致項目流產(chǎn)的根本原因是技能不足,團(tuán)隊溝通不暢還是別的其他原因?招聘有的時候并不能盡如人意——你也知道,大家對于你是如何調(diào)試的過程并不能一目了然,不是嗎?(關(guān)鍵:先從數(shù)據(jù)入手)
2.勇于面對未知
作為一名軟件工程師,你需要經(jīng)常專研那些又大又不熟悉的代碼庫:可能你需要好好研究你正在使用的那個開源工具的代碼,才能隨心所欲地?fù)]灑自如;又或者你需要搞清楚其他團(tuán)隊成員寫的代碼,因為他沒有修改時間等等。所以,快速駕馭大型代碼庫和精通相關(guān)區(qū)域的能力顯得至關(guān)重要。而這種能力大部分來自于經(jīng)驗,通過閱讀過大量代碼積累的經(jīng)驗。還有一小部分則需要靠我們熟悉能搜索代碼庫、跳轉(zhuǎn)到相關(guān)部分的工具了,以及會查找有關(guān)提交歷史中的版本控制——這些捷徑都能減少我們?nèi)チ私庑麓a所需的時間。如果是在更為成熟的公司,這種勇于面對未知的精神也能讓我們受益匪淺,不過不同的是,我們往往只需要專注并精通一部分代碼庫就能成果斐然了。
當(dāng)然,其他非代碼領(lǐng)域有時候也需要你去探索。軟件工程師常常需要接待客戶、與銷售人員討論客戶要求的可行性、給新的工程師培訓(xùn),以及其他領(lǐng)域的很多你甚至完全沒有接觸過的事宜。在這些經(jīng)歷中成長,會讓你受益無窮。
3.對決策的務(wù)實態(tài)度
可能在一家大規(guī)模公司,在代碼審查和單元測試堅持己見有助于改善組織平衡。但是在一家初創(chuàng)公司,務(wù)實更重要,因為這能讓團(tuán)隊快速完成任務(wù)。在這里我所說的務(wù)實指的是,知道什么時候應(yīng)該積極辯論,而一旦有了決策,即便你再不同意,也能一絲不茍地作為團(tuán)隊的一份子認(rèn)真執(zhí)行。我曾經(jīng)看到過因為編碼風(fēng)格而相互爭執(zhí)的現(xiàn)象,一個說在源代碼起碼得有80,100,或120個字符和大括號,而另一個覺得應(yīng)該另起一行。呵呵。我深深地覺得,我們還不如把這些寶貴的時間和精力用到更重要的決策上。
對決策的指導(dǎo)啟發(fā)式評估應(yīng)該側(cè)重于“是否最終能增加團(tuán)隊成功的概率?”。很多因素都會對這個問題產(chǎn)生影響:產(chǎn)品的選擇、架構(gòu)的側(cè)重點(diǎn)、團(tuán)隊的文化、人才結(jié)構(gòu),等等。我們在決策前最好限定討論的時間,然后堅決執(zhí)行,各抒己見。
4.善于運(yùn)用工具
工欲善其事,必先利其器。工具的合理運(yùn)用能讓我們節(jié)約大量的時間,而時間則是我們最重要的資源。高效的工程師常常是那些善于利用工具的人,而這一點(diǎn)在創(chuàng)業(yè)公司尤為重要,因為這里的時間更緊迫。一些大型的組織可能會有專門的工具團(tuán)隊。而在初創(chuàng)公司,你善用工具的能力越強(qiáng),完成的任務(wù)數(shù)量就越多。如果這些工具也為其他團(tuán)隊成員所接受,那么團(tuán)隊生產(chǎn)力將會發(fā)生乘數(shù)效應(yīng)。
5.牛逼的多面手
初創(chuàng)企業(yè)早期出現(xiàn)的很多問題其實并不需要很專業(yè)的知識。具備的技能越多,在解決問題時遇到的瓶頸就越少,哪怕我們只是對這些技能有一個最基本的了解,還在摸索熟悉技能的過程中。如果前端Web工程師也裝備了基本的服務(wù)器技術(shù)(server skill),那下次再遇到與此相關(guān)的問題就不必去請服務(wù)器工程師在百忙之中撥冗相見了。而后端工程師,假如會一些基本的HTML、CSS和JavaScript技能,就能將他所制作的工具設(shè)計成一個Web界面,以方便其他團(tuán)隊成員使用,從而不必因為缺乏web設(shè)計師而裹足不前。一個成長中的工程師,應(yīng)該是那種能順利使用基本的數(shù)據(jù)分析工具分析實驗數(shù)據(jù),而不必受制于數(shù)據(jù)分析員的多面手。
不過,有一種更歡迎“專家”的例外是,如果是在利基、重技術(shù)的環(huán)境里,例如啟動數(shù)據(jù)庫,那么擁有精深的專業(yè)知識工作效率會更高。而且,隨著創(chuàng)業(yè)公司的發(fā)展,對于博而不精的多面手,越到后期,能取代你的人就越多。
6.保持玩家心態(tài),而非受害者心態(tài)
在Fred Kofman的《Conscious Business》一書中,他描述了人們對待問題采取的兩種不同態(tài)度??梢允鞘芎φ咝膽B(tài),怨天尤人,責(zé)怪他人的不是(項目時間太少、產(chǎn)品推出不當(dāng)、以及和隊友發(fā)生爭執(zhí)等等),通通歸咎于外部原因。另一種就是玩家心態(tài),審視自己的能力,一旦確定能做補(bǔ)救,毫不猶豫地貢獻(xiàn)自己的能量。雖然短時間內(nèi),受害者心態(tài)能撫慰我們受傷的心情,但是從長遠(yuǎn)角度看,擁有玩家心態(tài)的人才能不斷進(jìn)步與發(fā)展。
在創(chuàng)業(yè)公司工作壓力是很大的,并且隨著壓力程度的增加,人們往往不但不能勇于承擔(dān)個人責(zé)任,反而很容易陷入互相推諉以逃避責(zé)任的怪圈。而這樣做,我不得不遺憾的說,最后終將導(dǎo)致失望和解聘。
7.不斷學(xué)習(xí)與回顧,持之以恒
研究發(fā)現(xiàn),只要我們有足夠的激情和動力,上述種種品質(zhì)通過學(xué)習(xí)和培養(yǎng)都是可以后天養(yǎng)成的。而學(xué)習(xí)這些技巧的所有能量來源于一種叫做“堅忍不拔”的品質(zhì)。Angela Lee曾在她的TED演講《The key to success? Grit》(《成功的關(guān)鍵:堅持》)中,提及這個概念:
堅忍不拔是一種專注于長遠(yuǎn)目標(biāo)的激情和毅力。堅持夢想,堅持未來,不是一天兩天,也不是一周兩周,更不是一個月兩個月,而是持續(xù)多年,不畏艱辛、勇往直前,為了目標(biāo)而奮斗。
如果我們也能擁有這種堅忍不拔的品質(zhì),愿意投入時間回顧自己的所作所為,那么就能發(fā)現(xiàn)自己的薄弱之處和需要改進(jìn)的地方。然后隨著時間的推移,不斷進(jìn)步的你必將會成為一個更為優(yōu)秀的軟件工程師。在早期如果能得到大咖的指點(diǎn)迷津,盡早行進(jìn)在正確的方向,也能讓我們走的更遠(yuǎn)。
上述這些技能即便是在更為成熟的公司也是能助你一臂之力的,不過在初創(chuàng)公司發(fā)揮的作用更大,原因么,上面也有提到,因為初創(chuàng)公司的時間更緊湊。當(dāng)然,并不是說不具備這些技能就不是一個好的工程師了,這只能說明,可能你不大適合這種創(chuàng)業(yè)環(huán)境。但是,如果你立志要成為一個優(yōu)秀的軟件工程師,不要讓上面這7點(diǎn)品質(zhì)限制你的發(fā)展。那么,從現(xiàn)在開始,寫個計劃學(xué)習(xí)和提高這些技能吧!
哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網(wǎng)站,并且能夠搭建符合百度排名規(guī)范的網(wǎng)站基底,使您的網(wǎng)站無需額外費(fèi)用,即可穩(wěn)步提升排名至首頁。歡迎體驗最佳的哈爾濱網(wǎng)站建設(shè)。
