本文給出了十五個(gè)評(píng)定軟件開(kāi)發(fā)人員的標(biāo)準(zhǔn),可以幫助程序員朋友從一個(gè)好的程序員成為一個(gè)優(yōu)秀的程序員,和大家共饗!
怎樣評(píng)定一名軟件開(kāi)發(fā)人員?這是一個(gè)頗為奇怪的問(wèn)題。現(xiàn)在已經(jīng)有了很多的理論和形式來(lái)做這件事,人力資源部門(mén)也試著幫你管理和反省自己的行為。然而,怎樣才是一個(gè)偉大的軟件開(kāi)發(fā)人員,在今天,你該怎樣發(fā)展你的職業(yè)生涯?以下是我評(píng)定團(tuán)隊(duì)中軟件開(kāi)發(fā)人員的“軍規(guī)”。按照這些技巧和規(guī)則,你可以改善你的現(xiàn)狀,由一個(gè)優(yōu)秀的程序員,成為一名偉大的程序員。
1、時(shí)間花在寫(xiě)精彩的代碼上
這里說(shuō)的不是數(shù)量,而是質(zhì)量。對(duì)此,一種歪曲是:要數(shù)量,也要質(zhì)量。你也許會(huì)很多次的遇到以下的兩種情境:
情境A:你有一個(gè)發(fā)瘋似的能寫(xiě)代碼的程序員,事情似乎在進(jìn)展中……然后,Bug開(kāi)始不斷出現(xiàn),你們也不知道為什么,好像永遠(yuǎn)補(bǔ)不完。補(bǔ)完十個(gè),又出來(lái)五個(gè),現(xiàn)在你手里的,就是一大堆代碼……
情境B:你現(xiàn)在有一個(gè)看起來(lái)很聰明的程序員,你面試他的時(shí)候,他似乎無(wú)所不知,能把理論說(shuō)的頭頭是道。然而,你留給他三個(gè)任務(wù),三個(gè)星期以后,他還在做一些三天就該干完的事。這下該你困惑了,他這么聰明,他知道generics(詳見(jiàn)備注),多線程的一切事情,甚至還能給祖母級(jí)的人講解什么是指針,讓老太太興奮的想去編程。可是——怎么什么都沒(méi)完成?
于是,在夢(mèng)境中——你寫(xiě)出了堪稱(chēng)偉大的代碼,——偉大的代碼是偉大的程序員寫(xiě)出來(lái)的,他睿智,明白代碼的真正品質(zhì)所在。寫(xiě)代碼就像托尼•霍克在玩滑板一樣自然優(yōu)美,看上去就令人愉快。這些程序員以讓你眼花的速度搞定一切,他們知道每個(gè)問(wèn)題應(yīng)該處理多長(zhǎng)時(shí)間,也不會(huì)追捧尋覓所謂的世界最好解決方案,弄很多線程很多層來(lái)寫(xiě)一個(gè)簡(jiǎn)單的游戲。他們寫(xiě)的程序沒(méi)有Bug,因?yàn)閷?xiě)的時(shí)候自己測(cè)試過(guò)了,在睡覺(jué)時(shí)也在寫(xiě)代碼說(shuō)的就是這樣的人。這些程序員太寶貴了。
2、闡明問(wèn)題
可以明確的是:即使有問(wèn)題暫時(shí)處理不了,還有成百上千的方法去解決。有些人反應(yīng)很迅速,很快就能提出多種解決方案。然而,一個(gè)偉大的程序員應(yīng)該在做出行動(dòng)以前清晰闡明問(wèn)題——創(chuàng)建文檔或用白板表達(dá)出來(lái)。他們寫(xiě)郵件給項(xiàng)目的管理者,這樣表述:“我想和你說(shuō)說(shuō)我是怎么理解這個(gè)問(wèn)題的,我們能這樣處理嗎?”然后他們就會(huì)動(dòng)手給你多種方案。
對(duì),這些人明白自己看問(wèn)題和闡明立場(chǎng)的方式,而這理解方式大概不會(huì)是問(wèn)題創(chuàng)建者所想要被理解的。請(qǐng)牢記這就是關(guān)鍵所在。一名偉大的程序員在嘗試解決問(wèn)題以前,一定要完全的理解它。你百分百搞明白了嗎?沒(méi)有?百分之九十九?——回去再多問(wèn)些問(wèn)題,確保百分之百理解清楚了。
3、怎樣著手解決問(wèn)題
那一搞明白了問(wèn)題,就開(kāi)始動(dòng)手寫(xiě)代碼?錯(cuò)!一個(gè)偉大的程序員應(yīng)該按照規(guī)劃,開(kāi)始思考面臨的多種選擇,基于問(wèn)題開(kāi)始考慮最好的解決方案。我覺(jué)的這像一場(chǎng)國(guó)際象棋比賽。你知道每個(gè)棋可以怎么走,知道所有的游戲規(guī)則。但是你會(huì)馬上走棋嗎?不,你要審時(shí)度勢(shì),制訂計(jì)劃,緊盯對(duì)手,分析其通常的做法。和這一樣,在你coding解決問(wèn)題以前,你也要這么做。
看看問(wèn)題,計(jì)算出需要怎樣的結(jié)果,你的時(shí)間能怎么安排,預(yù)期的質(zhì)量,你必須用的工具,……好了,開(kāi)工吧!
4、對(duì)代碼的信任
作為項(xiàng)目管理者,你怎么相信他們的代碼。有些程序員,你可以對(duì)他們說(shuō):“我星期五就要結(jié)果”。——星期五到了,你收到了這樣的Email:“代碼我都已經(jīng)檢查過(guò)了,現(xiàn)在就等著測(cè)試了。”你很放心,只會(huì)有很少的瑕疵在質(zhì)量確保的團(tuán)隊(duì)被查到。當(dāng)然,還有些輕率的例子,一些程序員在郵件里是這樣說(shuō)的:“我還沒(méi)弄完,星期一上午我會(huì)最先完成它”。你不太確信這東西,發(fā)現(xiàn)很多Bug,很長(zhǎng)時(shí)間基本上不能用。又得花上幾個(gè)星期清理代碼中的Bug。
關(guān)鍵:你對(duì)一個(gè)開(kāi)發(fā)人員越有信心,他離成為一個(gè)偉大的程序員的距離就越近。想象你是你的管理者,如果他并不擔(dān)心你的代碼,會(huì)給你多少信心和勇氣!
5、對(duì)方案的信任
和對(duì)代碼的信任是一回事——如果你手上有偉大的程序員,你就會(huì)對(duì)解決方案有信心。這些程序員同時(shí)也是偉大的建筑師。他們剖析整個(gè)問(wèn)題,指出問(wèn)題需要怎樣去解決。這就不只是用偉大的代碼編程的問(wèn)題了,很大程度取決于你怎樣構(gòu)筑解決方案。這是關(guān)鍵,而且會(huì)讓你在軟件世界里出類(lèi)拔萃。
6、滿(mǎn)足客戶(hù)需求
一天下來(lái),你寫(xiě)出了最棒的代碼、用了最好的框架和最好的解決方案,但這真的能迎合用戶(hù)的需求嗎?恐怕根本不是那么回事兒。你搞砸了。盡管現(xiàn)在多次失手,一個(gè)偉大的程序員還是會(huì)正中靶心,找出客戶(hù)需要的,給用戶(hù)逐步展示他們所需要的無(wú)bug的最終版本。需求正中靶心的同時(shí),用戶(hù)滿(mǎn)意了。
7、不斷升級(jí)
偉大的程序員會(huì)積極主動(dòng)地把自己的技術(shù)升級(jí)。他們對(duì)知識(shí)的態(tài)度就像餓貓見(jiàn)著了牛奶,他們從不用上級(jí)催促給自己設(shè)定目標(biāo)、不用經(jīng)理要求他們完成任務(wù),因?yàn)樗麄冏约壕鸵呀?jīng)安排OK了。
他們發(fā)現(xiàn)自己想要參加的大會(huì)就會(huì)給公司寫(xiě)Email“本人非常想?yún)⒓咏衲甑?/span>Tech-Ed大會(huì)。我將用心研習(xí),并對(duì)作出貢獻(xiàn)。我預(yù)計(jì)這可節(jié)省 <金錢(qián)/其他原因>。如果可行,不知公司是否幫我支付此行?”如果我收到這樣的郵件,我不僅會(huì)幫他支付參會(huì)費(fèi)用,他的路費(fèi)我也會(huì)全程買(mǎi)單。
偉大的程序員們永遠(yuǎn)會(huì)關(guān)注例如.net用戶(hù)組或Java用戶(hù)組的所有用戶(hù)群體。他們參加本地的技術(shù)會(huì)議,并從中汲取知識(shí)。你會(huì)看所有最新博客和最新的雜志嗎?現(xiàn)在列出你最喜歡的前5個(gè)開(kāi)發(fā)博客。你能做到嗎?你應(yīng)該像參加基督教青年會(huì)那樣輕松做到。做到這些,可以很好的幫助你延伸你的思路!你將會(huì)不斷獲得更好的點(diǎn)子!你會(huì)得到更好的回報(bào)!
8、團(tuán)隊(duì)奉獻(xiàn)
你可以是團(tuán)隊(duì)中最棒的那個(gè)人,可是如果你不是最好的程序員、不是建筑師、不是團(tuán)隊(duì)里最有活力的人,那么對(duì)我來(lái)說(shuō),如果你不能分享或?qū)δ愕膱F(tuán)隊(duì)有幫助,你的價(jià)值就會(huì)大打折扣。一個(gè)好的程序員會(huì)使自己周?chē)娜送瑯訌?qiáng)大起來(lái)。試想一下,好程序員會(huì)不斷完善自己的知識(shí)和能力,如果他們不和周?chē)娜朔窒硭麄兊闹R(shí),他們從哪兒能獲得更多呢?
他們不斷學(xué)習(xí)新東西,發(fā)掘新技術(shù),但是不會(huì)讓其他人知道他們這么做了。一個(gè)好的程序員會(huì)準(zhǔn)時(shí)完成方案,但是那是在催促和團(tuán)隊(duì)得不到休息的前提下。然而一個(gè)偉大的程序員則會(huì)與團(tuán)隊(duì)中所有的項(xiàng)目保持聯(lián)系,在需要的時(shí)候還可以出手幫忙。他們會(huì)如是說(shuō):“我注意到A團(tuán)隊(duì)的項(xiàng)目進(jìn)行到xx進(jìn)度了,如果不介意的話,我想我可以幫忙?”
9、做好會(huì)議記錄
做好會(huì)議記錄絕對(duì)至關(guān)重要!開(kāi)會(huì)期間,大家花大量時(shí)間來(lái)說(shuō)明了新觀點(diǎn)、新主張、集體討論還有提出了新設(shè)計(jì)方案,可是會(huì)議結(jié)束后卻沒(méi)有人可以拿得出會(huì)議記錄,簡(jiǎn)直沒(méi)什么比這更糟糕的事情了。即使你有會(huì)議大綱,我還是期望見(jiàn)到參會(huì)的每一個(gè)人員都可以帶著紙和筆(當(dāng)然對(duì)于程序員來(lái)說(shuō)筆記本則堪稱(chēng)完美)。一個(gè)偉大的程序員會(huì)注意到這點(diǎn)。他們會(huì)記下所有的會(huì)議記錄,并且在會(huì)議結(jié)束的的時(shí)候說(shuō):“就剛才的會(huì)議,我著重記錄了幾點(diǎn):XX…… 我是否記錄全了呢?”
接下來(lái),偉大的程序員就會(huì)把他做好的會(huì)議記錄分發(fā)給項(xiàng)目管理者,列出會(huì)議時(shí)間、會(huì)議主題和參會(huì)者。接下來(lái),是會(huì)議項(xiàng)目的標(biāo)題和重要條目。在這之后,就是這些議題的詳細(xì)記錄。一個(gè)好的程序員沒(méi)有做會(huì)議記錄,并在會(huì)議上對(duì)提出的每項(xiàng)事宜都點(diǎn)頭稱(chēng)是,那只能寄希望于他的記憶力足夠好了。隨后,他會(huì)給你發(fā)郵件讓你看看他的改動(dòng),你得回頭提醒他忘記的不多,百分之九十的都沒(méi)錯(cuò)。——這不是浪費(fèi)時(shí)間嘛!根本不是這么回事!所以,做好你的會(huì)議記錄。
10、孺子可教和接受批評(píng)
如果你讀到這兒了,就表明你有希望接受這些建議,并在以后的開(kāi)發(fā)行動(dòng)中嘗試執(zhí)行。對(duì),程序員的另一項(xiàng)重要能力就是向他人學(xué)習(xí)并且能夠接受批評(píng)。通過(guò)把自己變?yōu)橐粋€(gè)虛心受教的人,像海綿一樣快速吸收大量知識(shí),畢竟在編程的路上你還有很多前輩。當(dāng)然,也許他們?cè)趯?xiě)代碼的歲月里慢慢生了銹,甚至傷痕累累,但是他們畢竟曾披荊斬棘跨過(guò)無(wú)數(shù)的坎兒。對(duì)于做出正確決定,他們又著瞬間的本能,讓你不得不服。處于他們這個(gè)位置,很樂(lè)于見(jiàn)到你的成長(zhǎng)和成功。
所以,只要你是個(gè)偉大的程序員,就會(huì)理所當(dāng)然的擁有理想的工作環(huán)境。如果你不斷改善技能、虛心好學(xué)、在別人給出的意見(jiàn)和批評(píng)中總結(jié)錯(cuò)誤并得以改善,我向你保證你將會(huì)成為一個(gè)偉大的程序員而不只是想象自己變得偉大而已。如果你總把自己想象成為“精英”而不進(jìn)步,那你只是自欺欺人。如果你不成長(zhǎng),你甚至不能停留到原地,等待你的只有滅亡!
11、公司需要的時(shí)候總能出現(xiàn)
這如同等價(jià)交易。如果你為一家偉大的公司工作,他們會(huì)給你足夠的彈性。公司不會(huì)限制你如何工作,不限制你開(kāi)始或結(jié)束的時(shí)間,也不會(huì)限制你什么時(shí)候停下來(lái)歇歇。公司會(huì)鼓勵(lì)你在休息時(shí)間做做操,甚至?xí)谀愫蛨F(tuán)隊(duì)成員出去吃飯的時(shí)候?yàn)槟銈冑I(mǎi)單……在繁復(fù)大量而緊張的工作后,公司會(huì)放你幾天小假。諸如此類(lèi)。
然而,毫無(wú)疑問(wèn),與前面的這些美事兒隨之而來(lái)的是責(zé)任。如果趕上時(shí)間緊還得出活兒,偉大的程序員則建議你即使在周末也要加班。即使干得再晚也得把活兒干完。你看,偉大的程序員是要為自己的創(chuàng)作負(fù)責(zé)的。這雖不是必需的,但這是偉大程序員的標(biāo)志之一。有些人只想朝九晚五的上班,他們可能不錯(cuò),但是成不了偉大的程序員。偉大的程序員是團(tuán)隊(duì)中干到最后的那個(gè),把作品視為完美的藝術(shù),與團(tuán)隊(duì)成員親如一家。
12、衣著職業(yè)化
你永遠(yuǎn)也不知道一個(gè)客戶(hù)會(huì)什么時(shí)候突然拜訪。你也永遠(yuǎn)不會(huì)預(yù)知什么時(shí)候突然要參加一個(gè)會(huì)議,不是每一件事都在計(jì)劃中的。你得隨時(shí)準(zhǔn)備好展現(xiàn)自己。一個(gè)好的程序員周一到周五穿著普普通通,甚至有可能穿牛仔裝和運(yùn)動(dòng)鞋來(lái)上班。在某些周五,他們穿著T恤,短褲和運(yùn)動(dòng)鞋出現(xiàn)。當(dāng)一個(gè)客戶(hù)突然在周五出現(xiàn),要談一個(gè)大項(xiàng)目,你沒(méi)法把衣衫不整的他一塊兒叫上。
一個(gè)偉大的程序員周一到周五都穿著職業(yè)化,衣服也能帶來(lái)成績(jī)。如果你不在意穿著,你也會(huì)因?yàn)榇┑奶婀侄貌坏綍x升。毫無(wú)疑問(wèn),套裝和領(lǐng)帶還是很能提升你自己的。我向你保證,一套得體大方的西服套裝會(huì)讓你在今年就覺(jué)的物超所值。
13、溝通能力
這是另外的判定條件。這世上有太多優(yōu)秀程序員,卻沒(méi)幾個(gè)偉大的程序員。為什么呢?因?yàn)榇蠖鄶?shù)程序員不善交流。交流的層次很多:從發(fā)電子郵件、參加小型SCRUM開(kāi)發(fā)小組會(huì)議到大一些的主管會(huì)議,水平逐漸提升。這樣你就能在數(shù)百人參加的會(huì)議上自如地展示你的軟件。在會(huì)議上你不需要有好演技,但是至少要清晰明了地表達(dá)你的觀點(diǎn)。你的溝通能力越強(qiáng),你的職業(yè)道路就會(huì)走得越遠(yuǎn)!
概要:想要成為管理人員,你的溝通能力得分至少要打到9到10分。甚至你在會(huì)議上只講了幾分鐘,或只一個(gè)小匯報(bào),你都需要非常好的表達(dá)能力。別只是在你的每天的工作日志寥寥寫(xiě)上“修補(bǔ)1371個(gè)bug”,你要做的是盡可能描述清楚如何在這么艱難的情況下解決了問(wèn)題。闡明你的方法,說(shuō)明你如何保證這個(gè)bug不再出現(xiàn)。你就不再為你的日志發(fā)愁了。這會(huì)是你向經(jīng)理展示自己的精彩演出。
14、目標(biāo)設(shè)定的技巧
好的程序員日復(fù)一日的做你安排給他們做的事情,貫穿始終。他們并不往遠(yuǎn)看,不對(duì)明年、5年甚至10年后作打算。一些好程序員雖然知道自己想要什么,卻沒(méi)有具體計(jì)劃去實(shí)現(xiàn)。偉大的程序員則給自己訂立年度、未來(lái)5年的目標(biāo),而且大概預(yù)期到自己10年后的發(fā)展。
偉大的程序員有了目標(biāo)不會(huì)只是想象,他們會(huì)具體實(shí)施。他們會(huì)根據(jù)具體情況,在預(yù)期的時(shí)間做具體的事情。他們會(huì)詳細(xì)地制訂明年的計(jì)劃,包括要上的課程、要完成的項(xiàng)目甚至包括他們需要建立的人際關(guān)系。
15、組織技巧
把所有事情整合在一起的最關(guān)鍵要素是組織。你可能是世界上最好的程序員,但如果你不善于組織你所做的事兒,你的工作將陷入癱瘓,最終喪失優(yōu)勢(shì)。偉大的程序員保持自己工作平臺(tái)的整潔有序,保留所有的筆記并調(diào)理清晰。他們標(biāo)出自己的會(huì)議日程表。他們有專(zhuān)門(mén)的收件箱給日程郵件、會(huì)議和新任務(wù)分類(lèi)。他們保留文檔并能在需要時(shí)迅速找到所需。
額外要提到的:激情
偉大的程序員如果沒(méi)有熱情,那么他的工作也并不偉大。好的程序員有了熱情來(lái)對(duì)待他的工作、方案和團(tuán)隊(duì),那么他比偉大的程序員還要偉大。
在回顧的時(shí)候,我用這些標(biāo)準(zhǔn)來(lái)評(píng)判我的開(kāi)發(fā)團(tuán)隊(duì)。我給我的團(tuán)隊(duì)盡可能最好的環(huán)境,作為回報(bào),我想要他們都成為最偉大的程序員。你可以用這些標(biāo)準(zhǔn)來(lái)評(píng)判你的團(tuán)隊(duì),或者你本身就是一名程序員,請(qǐng)用這張列表來(lái)盡可能地改造自己來(lái)超越同儕。
備注:Generics是程序設(shè)計(jì)語(yǔ)言的一種技術(shù),指將程序中數(shù)據(jù)類(lèi)型進(jìn)行參數(shù)化,它本質(zhì)上是對(duì)程序的數(shù)據(jù)類(lèi)型進(jìn)行一次抽象,擴(kuò)展語(yǔ)言的表達(dá)能力,同時(shí)支持更大粒度的代碼復(fù)用。對(duì)于一些數(shù)據(jù)類(lèi)型參數(shù)化的類(lèi)和方法來(lái)說(shuō),它們往往具有更好的可讀性、可復(fù)用性和可靠性。在設(shè)計(jì)集合類(lèi)和它們的抽象操作時(shí),往往需要將它們定義為與具體數(shù)據(jù)類(lèi)型無(wú)關(guān),在這種情況下,使用Generics就是非常適合的。
|