初學者聯盟 The Beginners: 超級英雄也是從初心者練起

摘要

不是每個人都需要成為工程師,但,略懂程式算是基本素養的要求了。每隔一段時間,總會有人問「怎樣學程式語言」「該看什麼書」。Python 號稱是對新手友善的社群,我們該怎樣協助初心者在自學路上走得更穩健呢?

自學程式通常會經歷哪些階段呢? 哪些瓶頸是常見的挑戰呢? 真的可以快樂學習、無痛昇級嗎? 非科班生可以半路出家學程式嗎? 要有天份或熱情才能當工程師嗎? 怎樣是有效的學習方法? 教學工具不斷推陳出新,有哪些值得我們應用? 最後,怎樣算是離開新手村呢? 怎樣從 Python 學習經驗獲得最大效益呢?

即使自己沒有成為 Python 高手,還能享受 Python 小確幸,是吧? 我們嘗試在這講題裡摸索方向...

There should be one-- and preferably only one --obvious way to do it. At least we tried to pick the right way.

說明

寫程式是為了解決問題,但,程式本身就是個問題,程式和原始問題之間,會相交出一系列的問題集。好的程式語言,應該要能讓你專注在原始問題上;好的程式人員或講員,則是有能力降低整體的問題複雜度。因此,教學相長和因材施教,在初學程式的脈絡裡,變得可貴,也突顯出價值。 模仿和經驗抄襲,是多數人成本最低的學習途徑,那麼,自學程式需要哪些基礎,又會經歷哪些階段呢? * 以自然語言和數理經驗為基礎 * 音階練習 vs 樂曲表演 * 符號溝通: 從 縮排 (Identation) 例子聊起 * 哪些是可有可無的選項: 英文翻譯, IDE * 哪些是不可或缺的先備知識: 作業環境, GitHub, StackOverflow, HTML, Regular Expression * 函式導向與物件導向的取捨 初學者和課程互動的過程中,常見的瓶頸和挑戰包括: * 多數人不清楚自己的興趣或需要是什麼: Why You Want to Learn This? * 未必找得到合適的實作題目: What Feature to Change or Add? * 安裝問題: ImportError * 編輯器的適應問題: AutoIdentation * 從 "邏輯理解" 到 "寫出會動的程式" 之間的鴻溝 * Mutable: myvar = int(myvar) * 如何問問題: 誤用 FB 是自找苦吃 (社會文化的挑戰) * 如何快速讀一本書, 如何快速投入一個專案 教材和教法有機會改得更容易消化吸收,或是變得有趣些,但學習本身是無法完全免除無聊,這跟投資無法完全免除風險一樣。 教學者常見的挑戰包括: * 有些技巧的效果較普遍明顯: Incremental-Hacking Cycle * 有些原則應適時採用: Engage Early, Engage Often * 解題入門六步驟 * 找出學習目標固然重要, 找出驗證方法通常更重要 底限是: 沒學到並不是最慘的事,毀了學習意願才是更慘的事。 說明 Anaconda, Jupyter Notebook, Spyder, CheckiO 的優劣和應用經驗,例如 input() 在 Notebook 執行過程,容易造成「當機錯覺」,其他值得參考的工具包括: nbgrader。 參與社群是終身學習的好方法,因為,這世上有太多比「程式語言」更多值得學習和體驗的事,最聰明的學習方法,就是直接進去感受一個程式語言社群。

講者

TsungWei Hu

interested: Web Technology, System Administration, Project Management