為什么要練習(xí)編碼套路(Code Kata)?
背景
編碼套路(Code Kata)這個概念是《程序員修煉之道:從小工到專家》的作者之一Dave Thomas提出的。Ruby開始盛行的時(shí)候,Dave也成為了該語言的最重要的傳播者之一。那時(shí)他寫了很多關(guān)于Ruby和Rails起源的哲學(xué)和市場語境的文章。他也因此學(xué)習(xí)了很多敏捷方法和概念。正是在這種背景下,Dave提出了編碼套路的代碼學(xué)習(xí)技巧,并開始推廣。
這個概念主要指的是,針對某一種特定技術(shù)或技能進(jìn)行重復(fù)性的練習(xí),從而將其熟練掌握。套路(Kata)這個概念借鑒于武術(shù),指的是可以獨(dú)自或多人共同練習(xí)的一系列動作、招式。當(dāng)然,這個詞還可以用來描述武術(shù)中的其他動作,比如高度模擬實(shí)戰(zhàn)的練習(xí)等。
據(jù)維基百科介紹:
起初,套路是教授和練習(xí)武術(shù)的方法,通過這種途徑得以保存和傳承許多成功的戰(zhàn)斗技巧。練習(xí)套路,可以讓一組人通過系統(tǒng)的方式,而不是單人、無序的方式,進(jìn)行艱苦的武術(shù)訓(xùn)練。
武術(shù)中使用套路(Kata)的主要目的,在于傳遞行之有效的技巧,并且重復(fù)地訓(xùn)練。這可以讓學(xué)習(xí)者練成條件反射式地、自然而然地做出這些動作。而要達(dá)到這個目的,關(guān)鍵不在于系統(tǒng)地練習(xí),而是將動作和技巧內(nèi)化,做到根據(jù)不同的需要進(jìn)行變化。
對編碼套路的態(tài)度
關(guān)于用這個方法來練習(xí)編程技巧,人們對此有三種看法:鄙視,中立,贊成欣賞。中立的人群認(rèn)為并不能從這種反復(fù)編寫同樣一個問題的方法中學(xué)到什么,鄙視這種方法的人們也這么認(rèn)為,不過反對的程度更深。剩下來的便是欣賞這種方法的人了,他們認(rèn)為反復(fù)編寫同一個問題,或者編寫很多小的代碼程序例子,是有一定用處的。
我也贊成這種方法。我從去年開始斷斷續(xù)續(xù)學(xué)習(xí)編程,中間犯的一個錯誤就是練習(xí)少,沒有及早的認(rèn)識到這是一門要在“干中學(xué)”的學(xué)科。***次了解編碼套路,還是在codewars網(wǎng)站,而接觸這種技巧的時(shí)候,我已經(jīng)磕磕碰碰學(xué)習(xí)編程有大半年的時(shí)間了。
練習(xí)的重要性
練習(xí),作為一種學(xué)習(xí)方法是適用各個領(lǐng)域的,不僅僅限于武術(shù),還包括彈奏樂器、提升體育競技水平、準(zhǔn)備演講和提升對語法和書寫的掌握。業(yè)界知名程序員、《程序員的吶喊》的作者Steve Yegge,就曾經(jīng)在一篇文章中提到了練習(xí)(鍛煉)的重要性。
我認(rèn)識很多杰出的程序員——這是在亞馬遜工作***的額外“福利”之一。如果仔細(xì)觀察他們,你會發(fā)現(xiàn)他們時(shí)時(shí)都在鍛煉。他們已經(jīng)很優(yōu)秀了,但他們?nèi)匀徊煌憻?。他們鍛煉的方法林林總總,而我在這篇文章中只會介紹其中的幾種。據(jù)我了解,這些杰出程序員之所以如此成功,就是因?yàn)樗麄円恢痹阱憻挕?**的身材要靠定期的鍛煉才能獲得,而且必須堅(jiān)持鍛煉才能保持,否則身材就會走形。對于編程和軟件工程來說,道理是一樣的。
如何練習(xí)編碼套路
Dave Thomas認(rèn)為可以將套路作為學(xué)習(xí)編程的一種技巧。方法很簡單:每一個編碼套路,都是一個簡單的編碼難題,容易解決,可以讓練習(xí)者不斷的嘗試,直到***。這樣做的目的,就是幫助練習(xí)者每一次都能夠找到更好的解決方法。練習(xí)者甚至可以對套路定下各種限制,比如說要使用一種自己不常用的語言。
幫助編程學(xué)習(xí)者進(jìn)行套路練習(xí)的網(wǎng)站有很多。知道這類編程練習(xí)網(wǎng)站之后,我做了一些搜索,收藏了一些國外程序員推薦的站點(diǎn),在這里推薦給大家。
- Codewars
- codeforces
- HackerRank
- Project Euler
- LeetCode
- SPOJ:Quora上的朋友說,這個網(wǎng)站的難度***。
練習(xí)編碼套路,貴在堅(jiān)持、專注。當(dāng)然,練習(xí)到了一定的水平之后,確實(shí)再做一些簡單的題目,很難有較大的提高。建議高水平的朋友,往人工智能、大數(shù)據(jù)、自然語言處理這些高階話題練習(xí)。
編程派會怎么做
我還是一個初學(xué)者,所以我會繼續(xù)堅(jiān)持做編碼套路練習(xí)。每一個我覺得有一定難度、可以延伸的套路,我都會詳細(xì)記錄下我的解法,或者找到網(wǎng)絡(luò)上更好的解法,與大家分享,一同學(xué)習(xí)編程,一起進(jìn)步,爭取能夠成為黑段高手。這也是我在本站開設(shè)練習(xí)板塊的初衷。