摘要:來自作者鍋蜀黍背景本文主要根據作者個月以來對于人的零基礎教學經驗總結而出,適合零基礎負基礎學習編程語言的同學閱讀。學生黨和工作黨的比例是。基礎幾乎都沒有。顯然這兩個人的學習方式勢必是不一樣的。而不是媽的如何又報錯了。
背景來自 GitChat 作者:鍋蜀黍
本文主要根據作者2個月以來對于 300 人的零基礎python教學經驗總結而出,適合零基礎、負基礎學習 python 編程語言的同學閱讀。
本文所述僅僅是方法,看完本文并不會讓你學會任何一門編程語言,僅僅能讓你少走一些彎路,少被毒害一些。
引子我們來探討的問題是 —— 如何從零開始學習python。
相信你能看到這篇文章,一定心里有一個學習編程或教編程的想法,本文分享的知識可以為這兩個目標提供一些參考價值。
為什么是我來講這個事情呢?在過去的兩個月時間內,作者在自己開發的教育平臺——uband友班上面開辦了一個python班級,報名的用戶 75%是零基礎用戶,還有25%是之前學過,這25%中有一些負基礎用戶。
如何教?是不是我發一教材,然后讓大家順著開始學?是不是我們先進行一些理論學習,視頻授課?
我分析了一下情況,發現以下幾個比較有意思的點:
來學習的人之中有 70%是女生。
學生黨和工作黨的比例是 3:2。
絕大部分人一天只能抽出1~2個小時學習(非脫產)。
基礎幾乎都沒有。
無疑這是一個極大的挑戰,下面我就來講一下如何教學。
學編程從理論還是從訓練開始?這個問題讓我回想到了自己的科班的學習過程,有這樣一個故事給大家分享:
“2012年,過年回家的火車上,我提著行李走上了擁擠的車廂,對面的小哥頂著蓬松的頭發,我知道,這也許是我的同行。24小時的上海到貴州的旅程就沒那么孤單,因為我們都在討論架構、算法、編程學習...這個工作了5 年的前輩給我的建議是,你現在看這個架構、編程理論等書籍,不求甚解即可,等你有了大把經驗,回來很快就能秒懂。
時間過去了2年,兩年中我也沒有看任務關于python的書籍,不過用它寫了七七八八不下幾萬行腳本解決各種問題。有一些我在圖書館等人,隨手翻看了一本《Python cookbook》,是一本500+頁的大部頭書,我就那么一頁頁翻看,等的人到了,我也看完了。
請問,我等了多久?
答案是:兩個小時”。
這個故事讓我思考了學習的兩種不同的模式。
學習的模式 — 創造還是模仿先給大家看兩個學習者:
想要通過學習python編程完成一個自己的個人網站。
想要通過學習python,對比python和其他腳本編程語言的設計優劣,然后改進之。
顯然這兩個人的學習方式勢必是不一樣的。
第一個人的學習重點在于 —— 模仿,這將是大多數程序員所做的工作,在這個階段,不要說編程是創造性的工作,頂多能說編程是一個有邏輯性的工作,模仿就可以了。
第二個人,顯然是一個編程科學家,北美的高校有一個研究方向叫做 programming language,我有幾個過去的同學都讀了這個專業的博士,還有我們著名的編程屆網紅“王垠”同學也是讀的這個專業,這個專業的使命是什么—— “創造一門編程語言” or “改進現有的編程語言”,他們的工作,模仿是遠遠不夠的,需要了解整個理論體系、設計原則、處理細節等等...他們不能靠模仿來學習,因為沒有什么可以模仿。
而學習編程最大的悲劇 —— 就是明明自己的目的是模仿逐步形成自己的技能,而誤以為自己要去創造新事物。
所以學習編程之前需要搞懂 —— 做創造性的工作;還是做模仿性的工作。
創造性的工作舉例:?詩歌創作、生物學研究、新車設計、設計一門編程語言、設計一個新的web容器。
?模仿性的工作舉例:?朗讀英文詩歌、播音工作、編程一個APP、駕車、游泳、吉他彈唱、跳交際舞、雕刻小人、書法...
可以看到我們很大一部分事情,都是模仿類型的工作,模仿類型的工作時不需要從理論開始的,而是從練習開始的。比如學習游泳,沒有一個人是從看了一個月游泳的書籍開始的,而是教師在水下給你講,你去模仿他的動作,然后給你糾正。比如學習英語,就不說了,這么多的人學習了十幾年還不能用,就是缺乏練習。
而學習編程,還是教編程,大部分也是模仿式的學習,模仿式的學習就要從練習開始,或者以練習為主的訓練開始,不然很可能浪費了大量的時間而沒有看到成果而放棄。
(我們接觸到的編程學習者這樣的情況不在少數)
了解了這個道理,我們開展教學就容易多了,那就是本著一個原則 —— 一開始就模仿寫代碼。
開始學習本文后面的部分是講 —— 如何進行模仿性的python學習,如果上面你的目的是創造性的,可以不看了。
那么我們就要開始做真正的學習了,以下我以我自己設計的教學流程作為參考,指導一個零基礎開始的教學過程。
從一個故事開始學習變量和判斷首先我們從一個老媽買菜的故事開始,第一周學習的內容是學習變量,可以看下面一張圖,我們是如何教變量的,記住這個是第一天,第一天學習編程,就要開始寫代碼,這是我的教學過程要堅持的。不管寫的多,寫的少,都要開始模仿開始寫。
需求是下圖這樣的:
我們來看代碼
#!/usr/bin/python # -*- coding: utf-8 -*- # @author: Guoshushu # For beginner # 1. variable - num,str,boolean # 2. if # 3. > < >= <= == # 4. print def main(): who = "xiao的老媽 " good_price = 6 #小販的價格 good_description = "西雙版納大白菜" #小販的招牌 is_cheap = False #是否便宜 reasonable_price = 5 #老媽能接受的最高價格 buy_amount = 2 #準備買 2 斤 # 開始你的表演 # go 我們來走一組 print "%s上街看到了%s,賣 %d 元/斤" % (who, good_description, good_price) if good_price <= reasonable_price: print "她認為便宜" is_cheap = True print "她買了 %d 斤" % (buy_amount) else: print "她認為貴了 " is_cheap = False print "她并沒有買,揚長而去" #homework #1. 看 day1-homework.py # run function if __name__ == "__main__": main()
看到了么,這一段代碼實現了我們的需求,而且完全是 自然語言編寫,普通人都可以看懂,我們教會了:
# For beginner # 1. variable - num,str,boolean # 2. if # 3. > < >= <= == # 4. print
可以注意到一點,我沒有教大家學習 if __name__ = “__main__”: 這些事什么意思,而是讓大家開始模仿,大家都是成年人,都有悟性,不需要花費太多的時間去低效地學習理論,之后自然會明白。
上面這一段代碼,看懂就可以了么?
不,我會要求我的學員自己在電腦上打一遍,真正他們打了過后,就會發現其實看懂是沒有用的,因為他們會發生以下的問題。
跑代碼前沒有保存成.py的文件;
if之后的符號用了中文的:(冒號)。
縮進寫錯了報 indent error。
True和False寫成了 true 和 false。
name 寫成了 name
64位的系統裝成了32位python,雖然已經提醒過。
變量名字之間用了空格,報錯。
....
這些問題,不去實際寫代碼是發現不了的,但是好消息是,發現了一次,之后就基本不會再犯錯了,所以我們說編程模仿練習的必要,以及編程中犯錯報bug的必要。
如何學習列表這里再舉一個學習列表的例子,我們來看下面的代碼:
# -*- coding: utf-8 -*- # @author: Guoshushu def main(): good1 = "大白菜" good2 = "空心菜" good3 = "花菜" good4 = "生姜" good5 = "小龍蝦" # ....... 省略掉 100 個 good100 = "蚌殼" print "老媽看到了 %s "% (good1) print "老媽看到了 %s "% (good2) print "老媽看到了 %s "% (good3) print "老媽看到了 %s "% (good4) print "老媽看到了 %s "% (good5) def main2(): goods = "大白菜,空心菜,花菜,生姜,小龍蝦" print "老媽看到了 %s" %(goods) def main3(): print "-------" lst = ["大白菜", "空心菜", "花菜", "生姜", "小龍蝦"] #列表 for lst_item in lst: #遍歷 print "老媽看到了 %s "% (lst_item) if __name__ == "__main__": main() main2() main3()
相信大家已經看到了,這一段是說明列表為何要使用,學習的過程需要了解為什么要用列表,那就是 變量不夠用了嘛。
我們看上述3個函數就能夠明白,列表這個數據結構的演變過程,其實就是變量不夠用了,要用一個更牛逼的結構來一次放很多個數據,這樣理解起來會很自然。
相似的方法我用到了教授元祖、數組等等方面,你要如何學? 我給你的建議就是,用起來,用起來。
所有的 3 周的學習的代碼在我的github上,都可以自取,當然我不可能在一篇文章里面全部講完,你可以去 github 下載我們的代碼記錄,模仿。
本文以下附件內的github地址是我們 28 天的教學記錄和作業記錄,這個chat的同學可以試著開始寫,不過不好意思不能提供視頻教程。
一個月的碎片時間學習后,我們的學員可以完成以下的作業:
你可以在這一周用github的代碼自學下,在chat里我們討論這個。
教學的體會 最好的心態是不斷犯錯、不怕犯錯我們的教育告訴我們,不要犯錯,犯錯是不好的,但是編程中,我們寫出了一個bug,編譯器給我們報錯了,那么就是一個學習的機會。
看到報錯的時候心態就是 —— 我又有了一次學習的機會。而不是 —— 媽的如何又報錯了。這是編程時候面對報錯的太多。
道理我都講完了,同時你可以跟著我的github代碼進行學習模仿,最重要的當然是堅持,但是我傾向于寫成 —— 用正確的方法堅持學習。就能很輕松學會。如果你是想要教編程老師,請一點要用模仿的方式教別人,不然會誤人誤己,切記。有任何問題,可以在我的chat中討論。
碎碎念我前面提到過,其中有大部分的編程學員都是女同學,我發現她們的學習能力也是超強的,一個月的時間,而且幾乎都是每天 1 小時左右的時間,就可以在引導下基本掌握編程的基礎知識,很了不起。
社群的力量還是非常之大的,一開始學習,配置環境、寫第一行代碼的時候,群里的同學也是雞飛狗跳的,我真是感慨自己有勇氣開一個在線的教學生動手的編程課程,要知道,一般為了省事,大家都是采用錄視頻講一個看似非常詳細的課程,來規避這個麻煩。
不過實踐下來,這個效果的確最好,我們可以在chat里面聊一聊,我也會請我的學員來分享自己的學習經歷。
資源編程班github
菜鳥教程python
其中 github 里包含了所有 4 周的作業和同學提交的作業,在homework文件夾里面,大家可以下載下來模仿學習。菜鳥教程在這一個月的過程中,基本已經教授完畢,而且是潛移默化的過程。
反饋和總結以下是幾篇學員的總結,我貼出來給大家查看。
一個月的知識匯總:
學員寫來的部分郵件:
I really appreciate ShuShu"s coding class. It"s like he"s bringing a torch of enlightment to all of us "coding cavemen".
My girlfriend who is the organizer of "R Girl" in Taiwan is doing almost the samething. We all belive girls can do coding as well as boys. Just, who is the first person to devote in girls" education?
Anyway, thanks a lot. Hope I can join in this class next time.
開始報名的時候想的是反正這一個月是畢業季也不用上課,只要把論文答辯搞好就沒事了,還想著可以擴展一下自己的知識領域,我一個英專生腦子一熱就報了編程班。結果真的是忙成狗,沒打過n本論文的人都不好意思說自己要畢業,要準備答辯,還要幫著老師忙畢業季各種事情,更可怕的是我9月份還要考司法考試,真是在這個期間無數次想要放棄編程班的學習。。。但是我一直相信一句話,自己選的路,跪著也要走下去,所以呀,自己挖的坑不管怎樣都要自己填平。好在不是每天都要交作業,只要有時間我就會聽蜀黍的視頻課,打個代碼練習一下,想不明白就放在一邊過一段時間再想想,在練習一下,實在跑不通就在群里問問小伙伴,于是,這一個月就這樣跌跌撞撞走過來了,真的覺得堅持下來自己已經成功了!同時,感謝群里小伙伴和我的隊友對我的幫助,耐心解答我的問題;也真的真的很感謝篤師的細致講解,讓抽象的編程知識變得通俗易懂;也覺得篤師真的很辛苦,每天那么忙還要深夜錄制視頻,保證第二天的推送,老師這么認真,作為學生也應該對自己負責,好好學習每天的知識。。。
個人感受
在大學期間,我只學習過簡單的計算機入門,后來自己考了個office,基本就是考前刷了點題就通過了,但是這真的和編程有很大的不同。隨著基礎知識的不斷深入,學習了更多的知識,我真的覺得編程是一個全新的世界。開始每次跑代碼,發現錯誤就很慌張,為什么又bug了呢,覺得變成好麻煩,自己是不是學不會了呢,但是蜀黍一直強調學好編程就是一個不斷debug的過程,于是我就每天接受自己各種花式報錯的襲擊,慢慢的自己的心態發生了轉變,學會分析自己的錯誤,一點一點去改正,最后跑成功的喜悅真的難以形容。還記得畫小烏龜的那節課,看著屏幕上的效果圖,自己成就感十足;接觸類的概念,我覺得編程不只是要一個解決問題的方法,更重要的是要一條通向成功的捷徑,于是有了高度抽象化的概念;字典、元組、列表等等都使僵硬的數據變得有條理。一個月的編程課下來,我覺得自己具備了分析解決簡單問題的能力,一步一步規劃要實現的內容,而不再只是看到需求背景就很慌張不知道怎么解決,這就是最大的進步。
課程建議
建議在基礎知識講完之后,s2班級可以有不同篤師交替進行授課講解,這樣也可以分擔蜀黍的教學任
務,同時學生也能夠體會不同程序員的編程思路。
不足反思
在這一個月的學習當中,我發現自己舉一反三的能力還有待提升加強,可能也是練習不夠,同樣的函數換了個小背景,就要想好久才能寫出代碼;同時,我的復盤只是自己回顧了一下每周學到的知識,但是如果能夠講給另一個人聽我覺得效果會更好,讓別人能夠聽懂自己才是真的明白了學到的知識;沒有系統總結自己的錯誤,有的時候犯過的錯誤會在下一次又不經意的出現,今后的學習應當多思考不要再重復自己的錯誤。
學習感悟
歷時一個月左右的編程班很快就結束了,在這一階段基本把python的基礎內容學習了一遍,雖不能說完全精通,但也至少在我的腦海中留有印象,至少在蜀黍的指導下能夠輸出一些代碼,做些任務。從“一竅不通”到“入門”(算入門了吧),學習了不少,起初自己也想學點編程,后來總是不了了之,這次跟著蜀黍和大家堅持下來,還是蠻開心的。
但是,在日常的練習中,自己思考還是比較少,有所欠缺,常常跟著蜀黍的思路走,所以自己獨立思考解決問題還是比較少,可能自己練得太少,所以在寫大作業的時候基本沒什么思路,需要借助蜀黍的指點,才能完成作業(唉= =#看來學習能力不夠強,還要多多鍛煉,多多敲代碼)。
在最近的一段學習時間中,由于一段時間處于考試周,學習斷斷續續的,投入的時間并不是很多,經常以完成任務就結束了(不應該啊),而且群里討論參與度也比較少,平時閱讀也比較少(敲腦袋,要反省)。
課程體驗
蜀黍備課詳細,解釋地道,通俗易懂。
任務合理,基本能夠按要求完成。
很適合這種非專業、零基礎的學員。
群里的成員積極討論,能夠很好幫助大家解決問題,同時還有問題集錦,有助于復習。
下期計劃
繼續跟著蜀黍學習,哈哈
反復學習蜀黍的學習資料。
認真完成每天的作業。
認真做總結,和同伴交流。
學有余力,多閱讀相關材料、網站等。
多敲代碼,多敲代碼,多敲代碼。
無論如何,基于自己的興趣報了編程班(應該不會產生厭學情緒吧),希望在編程班中和大家一起學習,掌握一門技術(技多不壓身,哈哈),學以致用嘛!
更多的內容將在chat里面提供。
后話Talk is cheap, show me your code.
練習在編程入門的過程中,的確是最重要的,希望看了這一篇文章的同學,如果有對于編程學習的想法,一定不要止于看書、止于假學習,這個技能,是一行一行敲出來的。
共勉。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40768.html
摘要:菜鳥教程廖雪峰的官方網站第一個的偏基礎點,第二個或許對零基礎的不是很友好,有些字眼會看不懂,至于自己適合那個,還是要自己去看看。如果能看懂廖雪峰官方網站的話,推薦去看,因為我也是看這個來入門的差不多。 經常有粉絲加了我之后就問,python零基礎怎樣入門?剛學python需要注意什么?沒有接觸過編程怎么學python?等等 之類問題,今天我就對這些問題說下我的淺見吧,希望對你們有用。 ...
摘要:大學,光學工程研究生畢業,和程序猿完全不搭邊。那怎么辦,試著學一學唄,學習才是程序猿的天性。所以我在想程序猿是不是都需要新知識刺激一下,才能保持興奮的頭腦。有句話說的很對程序猿就像好奇的貓,追著毛球的線頭玩,最后一個毛球在腦袋里攪漿糊。 說說我自己的經歷。211大學,光學工程研究生畢業,和程序猿完全不搭邊。 畢業后進了成都某國字頭研究所,在行業里摸爬滾打了四年,2018年機緣巧合在家養...
摘要:如果你仍然無法抉擇,那請選擇,畢竟這是未來的趨勢,參考知乎回答還是編輯器該如何選我推薦社區版,配置簡單功能強大使用起來省時省心,對初學者友好。 這是一篇 Python 入門指南,針對那些沒有任何編程經驗,從零開始學習 Python 的同學。不管你學習的出發點是興趣驅動、拓展思維,還是工作需要、想要轉行,都可以此文作為一個參考。 在這個信息爆炸的時代,以 Python入門 為關鍵字搜索出...
閱讀 3318·2019-08-29 16:17
閱讀 1975·2019-08-29 15:31
閱讀 2645·2019-08-29 14:09
閱讀 2548·2019-08-26 13:52
閱讀 744·2019-08-26 12:21
閱讀 2125·2019-08-26 12:08
閱讀 991·2019-08-23 17:08
閱讀 1922·2019-08-23 16:59