編程新手:看懂不少示例,卻依然寫很差一個程序

最近在和學員的溝通中,發現很多初學者面臨這樣一個問題:瞭解了一些基本的語法,看得懂書上的示例,可是面臨一個新的編程問題時,依然感到無從下手。究其緣由,主要是兩個方面:程序員

  1. 總體上,不曉得如何把問題轉化爲程序語言。
  2. 細節上,不知道用什麼方法去實現某個功能。

好比咱們碼上行動的編程實例裏有一道題,大意是:編程

生成 200 個優惠碼,每一個優惠碼由8位字母組成(包括大小寫)。

固然題目自己難度不高,和咱們公衆號【每週一坑】欄目裏的題相比,這個算是小 case 了。不過若是你是一個剛剛接觸編程不久,才掌握條件判斷、循環、列表的新手來講,仍是有點小挑戰的。小程序

以這題來講,有人是直接對生成一串字符沒有想法,不知道怎麼辦。更多的人可能會有些思路,但在具體的環節,好比如何產生隨機字母、如何拼成字符串、若是判斷重複上遇到麻煩。從學員的評論中能夠看出,不少人驚呼:原來還有 xxx 這個函數、還有 yyy 這個模塊,徹底都不知道。微信


那麼在開發程序的時候,怎麼去解決相似的問題,而且找到合適的方法呢?我簡單分享下幾點經驗:dom

1. 學會分解問題

有個關於數學家當消防員的笑話:函數

消防隊長問:若是巷子裏一個貨倉着火了怎麼?數學家答:把軟管接到消火栓上,打開水龍頭,把火澆滅。隊長說:徹底正確!那若是你來到巷子發現貨倉沒着火怎麼處理?數學家答:把貨倉點着,這樣問題簡化到一個已知問題上了。

拋開笑話自己的誇張,做爲一個程序員,你也須要有相似的邏輯思惟:分解和轉化問題。工具

  • 生成 200 個優惠碼 => 生成 1 個優惠碼,循環 200 次
  • 生成 1 個 8 位優惠碼 => 生成 1 個字符,循環 8 次
  • 生成 1 個隨機字符 => 生成一個隨機數,轉成字符

生成一個隨機數,這是個咱們很早就提過的一個問題,用 random 模塊便可實現。那麼這個問題的思路就已經比較清楚了。剩下的就是處理好過程當中的細節:若是從數字轉換爲字符、如何循環、如何拼接等等。學習

不過確定會有同窗說,我都不知道數字還能轉成字符。也會有同窗表示,其實根本不用繞這個彎,明明能夠直接生成隨機的字符。沒錯,就和點燃貨倉的數學家同樣,咱們這個邏輯沒問題,但實際看來仍是有點二。網站


因此另一個重要的經驗:搜索引擎

2. 學會使用搜索

雖然大多數程序員在大學裏的專業屬於計算機科學(science),但在企業中的角色倒是工程師(engineer)。也就是說,編程是一項更偏向實踐而非理論的工做。咱們的目標是解決問題,須要掌握的是解決問題的手段和方法。對於程序員來講,搜索就是很是有效的一種尋找解法的途徑。

但可能不少沒有編程經驗的同窗會以爲,學編程時經過搜索找到一個解法是一種「做弊」的方式,本身並無真正理解怎麼解決問題。這種想法大可沒必要。即便經驗豐富的程序員,也會在處理問題以前,經過搜索來尋找有沒有更合適的解決方案。經過搜索找到解法這個行爲自己會比寫出這個小程序對你來講更有價值。這裏我曾寫過一篇,關於如何使用搜索引擎:編程初學者如何使用搜索引擎

就優惠碼這個問題來講,經過一些簡單的搜索,就能夠發現很多相似的問題解法。固然你不能去搜「如何製做 8 位優惠碼」,而是搜「Python 生成隨機字符串」這樣的關鍵字。而後你就瞭解到:能夠用 random 的 sample、shuffle,另外還有 string 這種模塊能夠利用。

順便扯遠些。有同窗曾經問過:大家的教程是否是包括了找工做須要的知識點。這也是一種相似的誤區。咱們不是去參加高考,按照考綱複習完備,而後再上考場。如今的計算機行業能夠說比任何一個行業的更新都要快,你永遠不可能「徹底」掌握某個領域的知識以後再去開發,你須要不斷去面對新的技術和新的問題。因此編程相關的知識是變化的,要掌握的是不變的解決方法。

何況對於任何一個領域來講,知識的分佈就像這張圖,當你越進一步,你面對的知識空白就越多。這也是爲何不少同窗學完基礎以後,表示找不到一本合適的教材來進階。由於根本就不存在這樣的教材。在初級階段,你提高能力的模式是 學習技能->拿技能去練習,而到了必定程度以後,提高能力的方式則必須是 遇到問題->想辦法去解決問題,是一個由被動變主動的過程。因此,想更進一步的同窗,不要去找教材,而是去找問題,再用好「搜索」這個偉大工具去解決它。

我對待編程學習者也是這樣:我不是給你教材,全互聯網的資源都應該是你的教材。我只給你問題,以及如何去找解決問題的方法。


3. 學會查文檔

在程序員屆有這樣一個詞:RTFM(Read The Fuxxing Manual,去讀TMD文檔手冊)

相似還有一個 STFW(Search The Fuxxing Web),就是對應我前面說的第 2 點。

我曾經一位老師指着一本厚厚的編程教材跟咱們說:大家根本不用去記這些函數,只要用的時候知道去哪裏查就足夠了。

搜索能夠告訴你有哪些解決方法,而官方的文檔則是更明確的告訴你該怎樣使用,參數有什麼限制,須要注意的地方等等。惟一遺憾的是,大多數 Fuxxing Manual 都是英文寫的。因此你說,英語很差到底能不能學編程。我只能說,能夠,但強烈建議你好好補一下英語。(預告一下:咱們已經整理了一份適合 Python 學習的英語詞彙表,並作成了單詞本,即將放出。)

仍是回到這道題目,經過 Python 官方文檔,你就會知道 random 模塊還能作哪些隨機操做,以及 string 模塊能夠生成哪些字符串。

我沒有找到特別好的 Python 官方文檔中文版,一譯中文文檔 這個算是相對新且完整的。若是各位有知道更好的,歡迎留言指出。


最後,還有提一點老生常談:

4. 不斷練習,積累經驗

我已說過無數遍:編程如樂器,學會語法只是開始,還須要不斷練習來掌握。每一個程序員都是一行行代碼堆出來的。若是你剛學編程不久,以爲本身缺乏編程思惟,常常感嘆原來還有這種操做,寫長一點代碼就老出 bug 的話,相信我,你只是寫得太少,看得太少。不用妄自菲薄,也不用急於求成,踏踏實實地先多練一練。等你把一本教程的示例代碼都本身在電腦上輸入運行一遍以後,咱們再來談談什麼是編程思惟。這不是什麼我首創的奇葩教學法,大多數程序員和計算機教師應該都認同這點。


扯了很多,但願對須要的人有所幫助。


════

其餘文章及回答:

喏,大家要的 PyCharm 快速上手指南

給伸手黨的福利:Python 新手入門引導

如何用100行Python代碼作出魔性聲控遊戲「八分音符醬」

學習編程的過程當中可能會走哪些彎路,有哪些經驗能夠參考?

你是如何自學 Python 的?

Crossin的編程教室

微信公衆號ID:crossincode
網站:crossincode.com
QQ羣:660296565
微信加羣:crossin123

相關文章
相關標籤/搜索