優(yōu)秀程序員因何而優(yōu)秀?
這些年我曾和很多程序員一起工作,他們之中的一些人非常厲害,而另一些人顯得平庸。不久前因?yàn)楹鸵恍┘夹g(shù)非常熟練的程序員工作感覺(jué)很愉快,我花了一些時(shí)間在考慮我佩服他們什么呢?什么原因讓優(yōu)秀的程序員那么優(yōu)秀,糟糕的程序員那么糟糕?簡(jiǎn)而言之,什么原因成就了一位優(yōu)秀的程序員呢?
根據(jù)我的經(jīng)驗(yàn),成為一個(gè)優(yōu)秀程序員同年齡,教育程度,還有和你賺多少錢沒(méi)有任何關(guān)系。關(guān)鍵在于你的做法,更深入地說(shuō),就是你的想法。我注意到我所欽佩的程序員都有一些相似習(xí)慣。不是他們所選語(yǔ)言的知識(shí),也不是對(duì)數(shù)據(jù)結(jié)構(gòu)和算法的深入理解,甚至不是多年的工作經(jīng)驗(yàn)。而是他們的溝通方式,他們管理自己的方式,以及以他們精湛技術(shù)水平編程演講的方式。
當(dāng)然成為一個(gè)優(yōu)秀的程序員還要具備更多特質(zhì),我也不能單單依靠是否存在(或者缺少)這些特質(zhì)來(lái)評(píng)判一個(gè)程序員。但是我知道當(dāng)我看見(jiàn)它,當(dāng)我看見(jiàn)一個(gè)程序員具備這些特質(zhì)的時(shí)候,我認(rèn)為,“這個(gè)人真的知道他們正在做什么”。
優(yōu)秀程序員做調(diào)查研究
或者叫“三思而后行”,或者叫“谷歌一下”
不論你怎么稱呼它,大多數(shù)可能會(huì)遇到的編程問(wèn)題已經(jīng)以某種形式解決,傳道書早就記載著世界上本來(lái)就沒(méi)有什么新鮮事。優(yōu)秀的程序員在解決問(wèn)題之前知道通過(guò)GitHub圖書館、網(wǎng)絡(luò)博客,或者通過(guò)與經(jīng)驗(yàn)豐富的程序員交流等形式來(lái)做調(diào)查研究。
我見(jiàn)過(guò)甚至是優(yōu)秀的程序員可以快速找出解決方案,但是和我一起工作過(guò)的糟糕的程序員從來(lái)不求助于他人,結(jié)果做了大量的重復(fù)工作或者錯(cuò)誤地解決問(wèn)題,不幸的是,后來(lái)他們終將為自己犯下的錯(cuò)誤付出了代價(jià)。
優(yōu)秀程序員閱讀錯(cuò)誤信息(并按照它們行事)
這包括解析堆棧路徑信息。是的,這是一件非常丑陋不幸的事情。但是如果你不愿意這么做的話,你怎么才能知道哪里錯(cuò)了呢?我知道的高效程序員是不會(huì)害怕深究問(wèn)題的。低效的程序員看見(jiàn)有錯(cuò)誤,但就是不愿意甚至是去讀這些錯(cuò)誤信息。(這聽(tīng)起來(lái)很可笑,但你會(huì)驚訝我遇到它的頻率)
更進(jìn)一步地說(shuō),優(yōu)秀的程序員發(fā)現(xiàn)問(wèn)題馬上就解決它。讀錯(cuò)誤信息對(duì)他們來(lái)說(shuō)僅僅是個(gè)開(kāi)始,他們渴望深究問(wèn)題并查出問(wèn)題的根源。他們不喜歡推卸責(zé)任,而是愿意查找解決問(wèn)題的方案,問(wèn)題在他們這里止步。
優(yōu)秀程序員看源代碼
文檔、測(cè)試、團(tuán)隊(duì),這些都會(huì)說(shuō)謊。盡管不是故意的,但是如果你想確切地知道事情是怎么回事,你必須自己親自看源代碼。
如果它不是你最擅長(zhǎng)的語(yǔ)言,你也不要害怕。如果你是一個(gè)Ruby的程序員,你懷疑在Ruby的C語(yǔ)言庫(kù)中有個(gè)錯(cuò)誤,破解打開(kāi)看看。是的,你可能拿不到源代碼,但是誰(shuí)知道呢?你只是可能而已,你有更好的機(jī)會(huì),總比你根本不去嘗試好吧。
不幸的是,如果你處在一個(gè)封閉源代碼的環(huán)境中,這會(huì)變得非常難,但道理是不變的。糟糕的程序員對(duì)于查看源代碼沒(méi)有絲毫的興趣,結(jié)果問(wèn)題困擾他們時(shí)間,要比愿意看源代碼的時(shí)間長(zhǎng)得多。
優(yōu)秀程序員說(shuō)干就干
優(yōu)秀的程序員趨向于主動(dòng)去做。他們的內(nèi)心有著難以控制的沖動(dòng),當(dāng)他們確定問(wèn)題或者發(fā)現(xiàn)新的需求時(shí)他們立刻會(huì)實(shí)現(xiàn)解決方案,有時(shí)過(guò)早有時(shí)太過(guò)激進(jìn)。但是他們對(duì)問(wèn)題本能的反應(yīng)是正面解決問(wèn)題。
有時(shí)這會(huì)令人很煩惱,但是他們的熱情是他們做好事情的一個(gè)重要部分。一些人可能拖延時(shí)間回避問(wèn)題或者等待問(wèn)題自己能夠消失,然而優(yōu)秀的程序員一開(kāi)始就解決它。簡(jiǎn)而言之(或者顯而易見(jiàn)),如果你看見(jiàn)有人興致勃勃地查找問(wèn)題并在解決,很可能你的手下有位優(yōu)秀的程序員。
優(yōu)秀程序員不逃避困難
這通常是糟糕程序員的特點(diǎn):他們輕易地從一個(gè)問(wèn)題跳到另一個(gè)問(wèn)題,在沒(méi)有真正理解一個(gè)問(wèn)題之前就進(jìn)入到下一個(gè)問(wèn)題。他們會(huì)把責(zé)任歸咎于程序的錯(cuò)誤,然后花費(fèi)大把的時(shí)間調(diào)試已經(jīng)運(yùn)行良好的代碼。他們讓情感占據(jù)主動(dòng),相信直覺(jué),而不是仔細(xì)嚴(yán)謹(jǐn)?shù)姆治觥?br />
如果你匆匆忙忙地解決一個(gè)問(wèn)題,甚至視每一個(gè)問(wèn)題為震驚世界的災(zāi)難。你很可能犯錯(cuò)誤或者沒(méi)有解決潛在的問(wèn)題。優(yōu)秀的程序員花時(shí)間去了解發(fā)生了什么錯(cuò)誤,哪怕災(zāi)難來(lái)臨的時(shí)候;但更重要的是,他們對(duì)待平常的問(wèn)題像是要解決的重要問(wèn)題,因此他們更準(zhǔn)確地解決更多的問(wèn)題,并且這樣做沒(méi)有提高團(tuán)隊(duì)的緊張程度。
優(yōu)秀程序員善于溝通交流
說(shuō)到底,編程是一種形式的溝通交流。寫代碼和寫散文創(chuàng)作一樣,能夠簡(jiǎn)潔地表達(dá)你的想法很重要。我發(fā)現(xiàn)那些可以寫簡(jiǎn)潔郵件,優(yōu)雅的狀態(tài)報(bào)告,或者甚至只是一個(gè)有效的備忘錄的程序員也將會(huì)是優(yōu)秀的程序員。
這能應(yīng)用在寫代碼還有英語(yǔ)上。用圓括號(hào)、括號(hào)和單個(gè)字母的函數(shù)寫出一行代碼當(dāng)然是有可能的,但是如果沒(méi)有人理解它,有什么意義呢。優(yōu)秀的程序員會(huì)花時(shí)間以各種渠道交流他們的想法。
優(yōu)秀程序員激情四射
我認(rèn)為這可能是優(yōu)秀的程序員最重要的方面(也許這點(diǎn)也適用于除計(jì)算機(jī)科學(xué)領(lǐng)域的其它領(lǐng)域)
如果你真的在乎你所做的事情,如果不把它當(dāng)成工作,當(dāng)作一個(gè)業(yè)余愛(ài)好、興趣或一件很有吸引力的事情,那么在該領(lǐng)域你比其他人更有優(yōu)勢(shì)。優(yōu)秀的程序員一直不斷編程。普通程序員一天工作八小時(shí),并且沒(méi)有業(yè)余項(xiàng)目,也沒(méi)興趣回饋社區(qū)。他們不會(huì)不斷地嘗試新方法,而只是為了看看它們是如何運(yùn)行而執(zhí)著于編程語(yǔ)言。
當(dāng)我看見(jiàn)一個(gè)程序員利用周末的時(shí)間做自己喜歡的項(xiàng)目時(shí),參與創(chuàng)作他們每天能用到的工具時(shí),執(zhí)著于新的有意義的事情時(shí):那個(gè)時(shí)候我確信我眼前的是一個(gè)令人驚奇的人。***,優(yōu)秀的程序員視他們的職業(yè)不僅僅是賺錢的途徑,更是讓生活變得有些不同的方法。我認(rèn)為那就是成就***秀程序員的真正原因。對(duì)于他們來(lái)說(shuō),編寫代碼是改變世界的一種方法,也是我非常尊敬崇拜他們的原因。