提高編程技藝摘要

原文

杰出程序員之所以如此成功,就是因?yàn)樗麄円恢痹阱憻挵M昝赖纳聿囊慷ㄆ诘腻憻挷拍塬@得,而且必須堅(jiān)持鍛煉才能保持炕吸,否則身材就會(huì)走形杜窄。對(duì)于編程和軟件工程來說,道理是一樣的算途。

這是一個(gè)重要的區(qū)別——我每天都開車去上班,但我的駕駛水平遠(yuǎn)遠(yuǎn)不如專業(yè)車手蚀腿;類似的情況嘴瓤,天天編程可能并不足以使你成為一名專業(yè)的程序員。那么莉钙,什么才能把一個(gè)普通人變成一名專業(yè)車手或者專業(yè)程序員呢廓脆?

答案就在《科學(xué)美國(guó)人》的一篇名為“The Expert Mind”(專家思維)的文章里:

愛立信提出,重要的并不是經(jīng)驗(yàn)本身磁玉,而是“努力的學(xué)習(xí)”停忿,也就是要不斷地挑戰(zhàn)自身能力之外的東西。一些狂熱的愛好者花費(fèi)了大量的時(shí)間去下棋蚊伞、打高爾夫球或者玩樂器席赂,但他們可能始終停留在業(yè)余水平上吮铭,而一個(gè)訓(xùn)練有素的學(xué)生卻可以在相對(duì)較短的時(shí)間里超越他們,原因就在這里颅停。值得注意的是谓晌,在提高水平方面,花費(fèi)在下棋上的大量時(shí)間(即使參加各種比賽)似乎還是比不過專門的訓(xùn)練來得更為有效癞揉。訓(xùn)練的主要價(jià)值在于發(fā)現(xiàn)弱點(diǎn)纸肉,并有針對(duì)性地進(jìn)行提高。

“努力的學(xué)習(xí)”意味著喊熟,要常常去處理那些剛好在你能力極限上的問題柏肪,也就是那些對(duì)你來說有很大可能失敗的事情。如果不經(jīng)歷一些失敗的話芥牌,你可能就不會(huì)成長(zhǎng)烦味。你必須不斷地挑戰(zhàn)自我,超越自己的極限胳泉。

那樣的挑戰(zhàn)有時(shí)會(huì)在工作中碰到拐叉,但也未必。將鍛煉從職業(yè)工作中分離出來扇商,這在編程領(lǐng)域常被人稱為“編碼套路”(Code Kata)凤瘦。

Code Kata的概念是由David Thomas提出的,他是《程序員修煉之道:從小工到專家》的作者之一案铺。這個(gè)概念主要指的是蔬芥,針對(duì)某一種特定技術(shù)或技能進(jìn)行重復(fù)性的練習(xí),從而將其熟練掌握控汉”仕校——譯者注

所謂套路,就是一系列的招式姑子。這個(gè)概念借鑒于武術(shù)乎婿。

如果你想要看一些編碼套路的例子(也就是努力學(xué)習(xí)和磨練編程技能的方法),SteveYegge的文章里倒是提出了一些不錯(cuò)的建議街佑。他把它們稱作為“實(shí)踐演練”:
1.寫一份自己的簡(jiǎn)歷谢翎。把自己所有的相關(guān)技能都羅列出來,然后把那些在100年后還用得到的標(biāo)出來沐旨。給每個(gè)技能打分森逮,滿分為10分。

2.羅列出你所景仰的程序員磁携。盡量包括那些與你一起工作的人褒侧,因?yàn)槟銜?huì)在工作中從他們身上獲取一些技能。記錄下他們身上的1 ~ 2個(gè)閃光點(diǎn),也就是你希望自己有所提高的方面闷供。

3.查看維基百科上的“計(jì)算機(jī)科學(xué)”欄目烟央,找到“計(jì)算機(jī)領(lǐng)域先驅(qū)者”這個(gè)分類,從這個(gè)列表中挑選一個(gè)人这吻,閱讀他的事跡吊档,并且在閱讀時(shí)打開任何你感興趣的鏈接。

4.花20分鐘通讀別人的代碼唾糯。讀出色的代碼和讀糟糕的代碼都是有益的怠硼,兩者都要讀,輪流切換移怯。如果你無法感覺出它們之間的區(qū)別香璃,可以求助于一位你尊敬的程序員,讓他給你展示一下什么是出色的代碼舟误、什么是糟糕的代碼葡秒。把你讀過的代碼給別人也看看,問問他們的看法嵌溢。

5.羅列出你最喜歡的10個(gè)編程工具——那些你覺得你用得最多眯牧、非有不行的工具。隨機(jī)挑選其中的一個(gè)工具赖草,花一個(gè)小時(shí)去閱讀它的文檔学少。在這一個(gè)小時(shí)里,努力去學(xué)習(xí)這個(gè)工具的某個(gè)你不曾意識(shí)到的新功能秧骑,或者發(fā)現(xiàn)某種新的使用方法版确。

6.想一想,除了編程之外你最擅長(zhǎng)什么事情乎折?再想一想绒疗,你是通過怎樣的鍛煉才變得如此熟練和專業(yè)的?這對(duì)于你的編程工作又有什么啟發(fā)呢骂澄?(怎么把這些經(jīng)驗(yàn)應(yīng)用到編程方面吓蘑?)

7.拿出一疊簡(jiǎn)歷,并和一組面試官在同一個(gè)房間里待上一個(gè)小時(shí)坟冲。確保每份簡(jiǎn)歷都至少被3個(gè)面試官看過士修,并且要給出1 ~ 3分的評(píng)分。針對(duì)那些不同面試官評(píng)判大相徑庭的簡(jiǎn)歷展開討論樱衷。

8.參與一個(gè)電話面試。事后寫下你的反饋酒唉,拋出你的觀點(diǎn)矩桂,然后與主持電話面試的人聊一聊,看看你們是否達(dá)成了一致的結(jié)論。

9.進(jìn)行一次技術(shù)面試侄榴,并且被面試的人應(yīng)該是某個(gè)你不太了解的領(lǐng)域里的專家雹锣。讓他假定聽眾在該領(lǐng)域里一無所知,因此請(qǐng)他從最基礎(chǔ)的講起癞蚕。努力去理解他所說的蕊爵,必要時(shí)問一些問題。

10.有機(jī)會(huì)參與別人的技術(shù)面試桦山。期間攒射,你只是認(rèn)真地聽、認(rèn)真地學(xué)恒水。在應(yīng)聘者努力解決技術(shù)問題的同時(shí)会放,你也要在自己腦子里嘗試解決這些問題。

11.找到一個(gè)能和你交換實(shí)際問題的人钉凌,每隔一周咧最,相互交流編程問題∮瘢花10 ~ 15分鐘來嘗試解決這些問題矢沿,再用10 ~ 15分鐘進(jìn)行討論(無論能否解決)。

12.當(dāng)你聽到任何你一時(shí)之間也無法解決的面試問題時(shí)酸纲,趕緊回到你的座位上捣鲸,把這個(gè)問題用電子郵件發(fā)給自己,以留作日后的提醒福青。在那一周里找出點(diǎn)時(shí)間摄狱,用自己最喜歡的編程語言來解決它。

我之所以喜歡Steve開出的這個(gè)清單无午,是因?yàn)樗瓷先ズ苋婷揭邸S行┏绦騿T一想到“鍛煉”,總認(rèn)為就是一些編碼上的難題宪迟。但在我看來酣衷,編程更在于人,而不是代碼次泽。因此穿仪,通過解決世上所有的、并且晦澀的編程面試題目意荤,在提高你的個(gè)人能力方面啊片,這種方法是有局限的。

關(guān)于“努力的學(xué)習(xí)”玖像,我也很喜歡Peter Norvig在“Teach Yourself Programming in TenYears”(花10年時(shí)間自學(xué)編程)一文中提出的諸多建議:

1.與別的程序員交流紫谷。讀別人的代碼。這比任何書籍或培訓(xùn)課程都更重要。

2.動(dòng)手寫程序笤昨!最好的學(xué)習(xí)方法就是邊做邊學(xué)祖驱。

3.在本科或研究生的課程中學(xué)習(xí)編程課程。

4.找一些項(xiàng)目來做瞒窒,并且需要與其他程序員形成團(tuán)隊(duì)來合作捺僻。在項(xiàng)目的進(jìn)行過程中,學(xué)會(huì)辨別最出色的程序員以及最糟糕的程序員崇裁。

5.在項(xiàng)目中跟隨別的程序員一起工作匕坯,了解如何維護(hù)那些不是你寫的代碼,并且學(xué)習(xí)如何寫出利于他人維護(hù)的代碼寇壳。

6.學(xué)習(xí)多種不同的編程語言醒颖,特別是那些與你現(xiàn)在所熟悉的語言有著不同的世界觀和編程模型的。

7.了解硬件對(duì)軟件的影響壳炎。知道你的電腦執(zhí)行一條指令需要多少時(shí)間泞歉,從內(nèi)存中取出一個(gè)字(在有緩存或沒緩存的情況下)需要多少時(shí)間,在以太網(wǎng)(或者因特網(wǎng))上傳輸數(shù)據(jù)需要多少時(shí)間匿辩,從磁盤中讀取連續(xù)的數(shù)據(jù)或者在磁盤上跳轉(zhuǎn)到另一個(gè)位置需要多少時(shí)間腰耙,等等。

你還可以從Dave Thomas的21種實(shí)用的編碼套路中獲取靈感(CodeKata.com)铲球,或者你更愿意加入一個(gè)你家當(dāng)?shù)氐摹熬幊涛漯^”(CodingDojo.org)挺庞。

對(duì)于“努力的學(xué)習(xí)”,我無法像Steve稼病,Peter或者Dave那樣提供一個(gè)長(zhǎng)長(zhǎng)的建議列表选侨。我遠(yuǎn)不如他們有耐心。實(shí)際上然走,在我看來援制,“編程套路”只需兩個(gè)招式:

1.寫博客。我在2004年初創(chuàng)辦了CodingHorror.com博客芍瑞,作為我自己努力學(xué)習(xí)的一種形式晨仑。它在一開始很不起眼,到后來成為我職業(yè)生涯中做過的最重要的一件事拆檬。所以洪己,你也應(yīng)該寫博客。最后“聞達(dá)于天下”的人竟贯,往往就是那些能夠有效書寫和溝通的人答捕。他們的聲音最響亮,是他們?cè)谥贫ㄓ螒蛞?guī)則屑那,并且引領(lǐng)世界的潮流拱镐。

2.積極參與著名的開源項(xiàng)目晌缘。所有的高談闊論聽起來都很好,但是痢站,你是一個(gè)大話王還是一名實(shí)干家呢?別光說不練选酗,這個(gè)非常重要阵难,因?yàn)槿藗儠?huì)用你的行動(dòng)來衡量你,而不是你的言論芒填。努力在公眾面前留下些實(shí)實(shí)在在有用的東西吧呜叫,到時(shí)候你就可以說,“我在那個(gè)項(xiàng)目中出過力殿衰≈烨欤”

當(dāng)你能編寫精彩的代碼、并且能用精彩的言辭向世人解釋那些代碼時(shí)闷祥,到那時(shí)候娱颊,我會(huì)覺得你已經(jīng)掌握了最牛的編碼套路!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凯砍,一起剝皮案震驚了整個(gè)濱河市箱硕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悟衩,老刑警劉巖剧罩,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異座泳,居然都是意外死亡惠昔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門挑势,熙熙樓的掌柜王于貴愁眉苦臉地迎上來镇防,“玉大人,你說我怎么就攤上這事薛耻∮眨” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵饼齿,是天一觀的道長(zhǎng)饲漾。 經(jīng)常有香客問我,道長(zhǎng)缕溉,這世上最難降的妖魔是什么考传? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮证鸥,結(jié)果婚禮上僚楞,老公的妹妹穿的比我還像新娘勤晚。我一直安慰自己,他們只是感情好泉褐,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布赐写。 她就那樣靜靜地躺著,像睡著了一般膜赃。 火紅的嫁衣襯著肌膚如雪挺邀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天跳座,我揣著相機(jī)與錄音端铛,去河邊找鬼。 笑死疲眷,一個(gè)胖子當(dāng)著我的面吹牛禾蚕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播狂丝,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼换淆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了美侦?” 一聲冷哼從身側(cè)響起产舞,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菠剩,沒想到半個(gè)月后易猫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡具壮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年准颓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棺妓。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡攘已,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怜跑,到底是詐尸還是另有隱情样勃,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布性芬,位于F島的核電站峡眶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏植锉。R本人自食惡果不足惜辫樱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望俊庇。 院中可真熱鬧狮暑,春花似錦鸡挠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缔逛,卻和暖如春瞎惫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背译株。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挺益,地道東北人歉糜。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像望众,于是被迫代替她去往敵國(guó)和親匪补。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容