新聞中心
最近在和學(xué)員的溝通中,發(fā)現(xiàn)不少初學(xué)者面臨這樣一個問題:了解了一些基本的語法,看得懂書上的示例,但是面臨一個新的編程問題時,依然感到無從下手。究其原因,主要是兩個方面:

創(chuàng)新互聯(lián)自2013年起,先為天河等服務(wù)建站,天河等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為天河企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
- 整體上,不曉得如何把問題轉(zhuǎn)化為程序語言。
- 細節(jié)上,不知道用什么方法去實現(xiàn)某個功能。
比如我們碼上行動的編程實例里有一道題,大意是:生成 200 個優(yōu)惠碼,每個優(yōu)惠碼由8位字母組成(包括大小寫)。
當(dāng)然題目本身難度不高,和我們公眾號【每周一坑】欄目里的題相比,這個算是小 case 了。不過如果你是一個剛剛接觸編程不久,才掌握條件判斷、循環(huán)、列表的新手來說,還是有點小挑戰(zhàn)的。
以這題來說,有人是直接對生成一串字符沒有想法,不知道怎么辦。更多的人可能會有些思路,但在具體的環(huán)節(jié),比如如何產(chǎn)生隨機字母、如何拼成字符串、如果判斷重復(fù)上遇到麻煩。從學(xué)員的評論中可以看出,很多人驚呼:原來還有 xxx 這個函數(shù)、還有 yyy 這個模塊,完全都不知道。
那么在開發(fā)程序的時候,怎么去解決類似的問題,并且找到合適的方法呢?我簡單分享下幾點經(jīng)驗:
1. 學(xué)會分解問題
有個關(guān)于數(shù)學(xué)家當(dāng)消防員的笑話:
消防隊長問:如果巷子里一個貨倉著火了怎么?數(shù)學(xué)家答:把消火栓接到軟管上,打開水龍頭,把火澆滅。隊長說:完全正確!那如果你來到巷子發(fā)現(xiàn)貨倉沒著火怎么處理?數(shù)學(xué)家答:把貨倉點著,這樣問題簡化到一個已知問題上了。
拋開笑話本身的夸張,作為一個程序員,你也需要有類似的邏輯思維:分解和轉(zhuǎn)化問題。
- 生成 200 個優(yōu)惠碼 => 生成 1 個優(yōu)惠碼,循環(huán) 200 次
- 生成 1 個 8 位優(yōu)惠碼 => 生成 1 個字符,循環(huán) 8 次
- 生成 1 個隨機字符 => 生成一個隨機數(shù),轉(zhuǎn)成字符
生成一個隨機數(shù),這是個我們很早就提過的一個問題,用 random 模塊即可實現(xiàn)。那么這個問題的思路就已經(jīng)比較清楚了。剩下的就是處理好過程中的細節(jié):如果從數(shù)字轉(zhuǎn)換為字符、如何循環(huán)、如何拼接等等。
不過肯定會有同學(xué)說,我都不知道數(shù)字還能轉(zhuǎn)成字符。也會有同學(xué)表示,其實根本不用繞這個彎,明明可以直接生成隨機的字符。沒錯,就和點燃貨倉的數(shù)學(xué)家一樣,我們這個邏輯沒問題,但實際看來還是有點二。所以另外一個重要的經(jīng)驗:
2. 學(xué)會使用搜索
雖然大多數(shù)程序員在大學(xué)里的專業(yè)屬于計算機科學(xué)(science),但在企業(yè)中的角色卻是工程師(engineer)。也就是說,編程是一項更偏向?qū)嵺`而非理論的工作。我們的目標(biāo)是解決問題,需要掌握的是解決問題的手段和方法。對于程序員來說,搜索就是非常有效的一種尋找解法的途徑。
但可能很多沒有編程經(jīng)驗的同學(xué)會覺得,學(xué)編程時通過搜索找到一個解法是一種“作弊”的方式,自己并沒有真正理解怎么解決問題。這種想法大可不必。即使經(jīng)驗豐富的程序員,也會在處理問題之前,通過搜索來尋找有沒有更合適的解決方案。通過搜索找到解法這個行為本身會比寫出這個小程序?qū)δ銇碚f更有價值。這里我曾寫過一篇,關(guān)于如何使用搜索引擎:編程初學(xué)者如何使用搜索引擎。
就優(yōu)惠碼這個問題來說,通過一些簡單的搜索,就可以發(fā)現(xiàn)不少類似的問題解法。當(dāng)然你不能去搜“如何制作 8 位優(yōu)惠碼”,而是搜“Python 生成隨機字符串”這樣的關(guān)鍵字。然后你就了解到:可以用 random 的 sample、shuffle,另外還有 string 這種模塊可以利用。
順便扯遠些。有同學(xué)曾經(jīng)問過:你們的教程是不是包括了找工作需要的知識點。這也是一種類似的誤區(qū)。我們不是去參加高考,按照考綱復(fù)習(xí)完備,然后再上考場?,F(xiàn)在的計算機行業(yè)可以說比任何一個行業(yè)的更新都要快,你永遠不可能“完全”掌握某個領(lǐng)域的知識之后再去開發(fā),你需要不斷去面對新的技術(shù)和新的問題。所以編程相關(guān)的知識是變化的,要掌握的是不變的解決方法。
況且對于任何一個領(lǐng)域來說,知識的分布就像這張圖,當(dāng)你越進一步,你面對的知識空白就越多。這也是為什么很多同學(xué)學(xué)完基礎(chǔ)之后,表示找不到一本合適的教材來進階。因為根本就不存在這樣的教材。在初級階段,你提升能力的模式是 學(xué)習(xí)技能->拿技能去練習(xí),而到了一定程度之后,提升能力的方式則必須是 遇到問題->想辦法去解決問題,是一個由被動變主動的過程。所以,想更進一步的同學(xué),不要去找教材,而是去找問題,再用好“搜索”這個偉大工具去解決它。
我們秉持的教學(xué)方法也是一樣:我們不是給你教材,全互聯(lián)網(wǎng)的資源都應(yīng)該是你的教材。我們給你問題,以及如何去找解決問題的方法。
3. 學(xué)會查文檔
在程序員屆有這樣一個詞:RTFM(Read The Fuxxing Manual,去讀TMD文檔手冊)
類似還有一個 STFW(Search The Fuxxing Web),就是對應(yīng)我前面說的第 2 點。
我曾經(jīng)一位老師指著一本厚厚的編程教材跟我們說:你們根本不用去記這些函數(shù),只要用的時候知道去哪里查就足夠了。
搜索可以告訴你有哪些解決方法,而官方的文檔則是更明確的告訴你該怎樣使用,參數(shù)有什么限制,需要注意的地方等等。唯一遺憾的是,大多數(shù) Fuxxing Manual 都是英文寫的。所以你說,英語不好到底能不能學(xué)編程。我只能說,可以,但強烈建議你好好補一下英語。(預(yù)告一下:我們已經(jīng)整理了一份適合 Python 學(xué)習(xí)的英語詞匯表,并做成了單詞本,即將放出。)
還是回到這道題目,通過 Python 官方文檔,你就會知道 random 模塊還能做哪些隨機操作,以及 string 模塊可以生成哪些字符串。
我沒有找到特別好的 Python 官方文檔中文版,usyiyi.cn 這個算是相對新且完整的。如果各位有知道更好的,歡迎留言指出。
最后,還有提一點老生常談:
4. 不斷練習(xí),積累經(jīng)驗
我已說過無數(shù)遍:編程如樂器,學(xué)會語法只是開始,還需要不斷練習(xí)來掌握。每個程序員都是一行行代碼堆出來的。如果你剛學(xué)編程不久,覺得自己缺少編程思維,經(jīng)常感嘆原來還有這種操作,寫長一點代碼就老出 bug 的話,相信我,你只是寫得太少,看得太少。不用妄自菲薄,也不用急于求成,踏踏實實地先多練一練。等你把一本教程的示例代碼都自己在電腦上輸入運行一遍之后,我們再來談?wù)勈裁词蔷幊趟季S。這不是什么我獨創(chuàng)的奇葩教學(xué)法,大多數(shù)程序員和計算機教師應(yīng)該都認(rèn)同這點。
【本文是專欄機構(gòu)“Crossin的編程教室”的原創(chuàng)文章,轉(zhuǎn)載請通過微信公眾號(rossincode)聯(lián)系原作者】
戳這里,看該作者更多好文
網(wǎng)站題目:編程新手:看懂很多示例,卻依然寫不好一個程序
新聞來源:http://m.fisionsoft.com.cn/article/cdpecce.html


咨詢
建站咨詢
