GitChat · Python | 零基礎小白如何入門 Python 編程

來自 GitChat 做者:鍋蜀黍html

背景

  1. 本文主要根據做者2個月以來對於 300 人的零基礎python教學經驗總結而出,適合零基礎、負基礎學習 python 編程語言的同窗閱讀。python

  2. 本文所述僅僅是方法,看完本文並不會讓你學會任何一門編程語言,僅僅能讓你少走一些彎路,少被毒害一些。git

引子

咱們來探討的問題是 —— 如何從零開始學習python。 程序員

相信你能看到這篇文章,必定內心有一個學習編程教編程的想法,本文分享的知識能夠爲這兩個目標提供一些參考價值。github

爲何是我來說這個事情呢?在過去的兩個月時間內,做者在本身開發的教育平臺——uband友班上面開辦了一個python班級,報名的用戶 75%是零基礎用戶,還有25%是以前學過,這25%中有一些負基礎用戶。web

如何教?是否是我發一教材,而後讓你們順着開始學?是否是咱們先進行一些理論學習,視頻授課?算法

我分析了一下狀況,發現如下幾個比較有意思的點:編程

  1. 來學習的人之中有 70%是女生。數組

  2. 學生黨和工做黨的比例是 3:2。數據結構

  3. 絕大部分人一天只能抽出1~2個小時學習(非脫產)。

  4. 基礎幾乎都沒有。

無疑這是一個極大的挑戰,下面我就來說一下如何教學。

學編程從理論仍是從訓練開始?

這個問題讓我回想到了本身的科班的學習過程,有這樣一個故事給你們分享:

「2012年,過年回家的火車上,我提着行李走上了擁擠的車箱,對面的小哥頂着蓬鬆的頭髮,我知道,這也許是個人同行。24小時的上海到貴州的旅程就沒那麼孤單,由於咱們都在討論架構、算法、編程學習...這個工做了5 年的前輩給個人建議是,你如今看這個架構、編程理論等書籍,不求甚解便可,等你有了大把經驗,回來很快就能秒懂。

時間過去了2年,兩年中我也沒有看任務關於python的書籍,不過用它寫了七七八八不下幾萬行腳本解決各類問題。有一些我在圖書館等人,隨手翻看了一本《Python cookbook》,是一本500+頁的大部頭書,我就那麼一頁頁翻看,等的人到了,我也看完了。

請問,我等了多久?

答案是:兩個小時」。

這個故事讓我思考了學習的兩種不一樣的模式。

學習的模式 — 創造仍是模仿

先給你們看兩個學習者:

  1. 想要經過學習python編程完成一個本身的我的網站。

  2. 想要經過學習python,對比python和其餘腳本編程語言的設計優劣,而後改進之。

顯然這兩我的的學習方式勢必是不同的。

第一我的的學習重點在於 —— 模仿,這將是大多數程序員所作的工做,在這個階段,不要說編程是創造性的工做,頂多能說編程是一個有邏輯性的工做,模仿就能夠了。

第二我的,顯然是一個編程科學家,北美的高校有一個研究方向叫作 programming language,我有幾個過去的同窗都讀了這個專業的博士,還有咱們著名的編程屆網紅「王垠」同窗也是讀的這個專業,這個專業的使命是什麼—— 「創造一門編程語言」 or 「改進現有的編程語言」,他們的工做,模仿是遠遠不夠的,須要瞭解整個理論體系、設計原則、處理細節等等...他們不能靠模仿來學習,由於沒有什麼能夠模仿。

而學習編程最大的悲劇 —— 就是明明本身的目的是模仿逐步造成本身的技能,而誤覺得本身要去創造新事物。

因此學習編程以前須要搞懂 —— 作創造性的工做;仍是作模仿性的工做。

創造性的工做舉例:
詩歌創做、生物學研究、新車設計、設計一門編程語言、設計一個新的web容器。


模仿性的工做舉例:
朗讀英文詩歌、播音工做、編程一個APP、駕車、游泳、吉他彈唱、跳交際舞、雕刻小人、書法...

能夠看到咱們很大一部分事情,都是模仿類型的工做,模仿類型的工做時不須要從理論開始的,而是從練習開始的。好比學習游泳,沒有一我的是從看了一個月游泳的書籍開始的,而是教師在水下給你講,你去模仿他的動做,而後給你糾正。好比學習英語,就不說了,這麼多的人學習了十幾年還不能用,就是缺少練習。

而學習編程,仍是教編程,大部分也是模仿式的學習,模仿式的學習就要從練習開始,或者以練習爲主的訓練開始,否則極可能浪費了大量的時間而沒有看到成果而放棄。
(咱們接觸到的編程學習者這樣的狀況不在少數)

瞭解了這個道理,咱們開展教學就容易多了,那就是本着一個原則 —— 一開始就模仿寫代碼。

開始學習

本文後面的部分是講 —— 如何進行模仿性的python學習,若是上面你的目的是創造性的,能夠不看了。

那麼咱們就要開始作真正的學習了,如下我以我本身設計的教學流程做爲參考,指導一個零基礎開始的教學過程。

從一個故事開始學習變量和判斷

首先咱們從一個老媽買菜的故事開始,第一週學習的內容是學習變量,能夠看下面一張圖,咱們是如何教變量的,記住這個是第一天,第一天學習編程,就要開始寫代碼,這是個人教學過程要堅持的。無論寫的多,寫的少,都要開始模仿開始寫。

需求是下圖這樣的:

enter image description here

咱們來看代碼

#!/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__」: 這些事什麼意思,而是讓你們開始模仿,你們都是成年人,都有悟性,不須要花費太多的時間去低效地學習理論,以後天然會明白。

上面這一段代碼,看懂就能夠了麼?

不,我會要求個人學員本身在電腦上打一遍,真正他們打了事後,就會發現其實看懂是沒有用的,由於他們會發生如下的問題。

  1. 跑代碼前沒有保存成.py的文件;

  2. if以後的符號用了中文的:(冒號)。

  3. 縮進寫錯了報 indent error。

  4. True和False寫成了 true 和 false。

  5. name 寫成了 name

  6. 64位的系統裝成了32位python,雖然已經提醒過。

  7. 變量名字之間用了空格,報錯。
    ....

這些問題,不去實際寫代碼是發現不了的,可是好消息是,發現了一次,以後就基本不會再犯錯了,因此咱們說編程模仿練習的必要,以及編程中犯錯報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的同窗能夠試着開始寫,不過很差意思不能提供視頻教程。

一個月的碎片時間學習後,咱們的學員能夠完成如下的做業:

enter image description here

你能夠在這一週用github的代碼自學下,在chat裏咱們討論這個。

教學的體會

最好的心態是不斷犯錯、不怕犯錯

咱們的教育告訴咱們,不要犯錯,犯錯是很差的,可是編程中,咱們寫出了一個bug,編譯器給咱們報錯了,那麼就是一個學習的機會。

看到報錯的時候心態就是 —— 我又有了一次學習的機會。而不是 —— 媽的如何又報錯了。這是編程時候面對報錯的太多。

道理我都講完了,同時你能夠跟着個人github代碼進行學習模仿,最重要的固然是堅持,可是我傾向於寫成 —— 用正確的方法堅持學習。就能很輕鬆學會。若是你是想要教編程老師,請一點要用模仿的方式教別人,否則會誤人誤己,切記。有任何問題,能夠在個人chat中討論。

碎碎念

我前面提到過,其中有大部分的編程學員都是女同窗,我發現她們的學習能力也是超強的,一個月的時間,並且幾乎都是天天 1 小時左右的時間,就能夠在引導下基本掌握編程的基礎知識,很了不得。

社羣的力量仍是很是之大的,一開始學習,配置環境、寫第一行代碼的時候,羣裏的同窗也是雞飛狗跳的,我真是感慨本身有勇氣開一個在線的教學生動手的編程課程,要知道,通常爲了省事,你們都是採用錄視頻講一個看似很是詳細的課程,來規避這個麻煩。

不過實踐下來,這個效果的確最好,咱們能夠在chat裏面聊一聊,我也會請個人學員來分享本身的學習經歷。

資源

其中 github 裏包含了全部 4 周的做業和同窗提交的做業,在homework文件夾裏面,你們能夠下載下來模仿學習。菜鳥教程在這一個月的過程當中,基本已經教授完畢,並且是潛移默化的過程。

反饋和總結

如下是幾篇學員的總結,我貼出來給你們查看。

一個月的知識彙總:

enter image description here

學員寫來的部分郵件:

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的基礎內容學習了一遍,雖不能說徹底精通,但也至少在個人腦海中留有印象,至少在蜀黍的指導下可以輸出一些代碼,作些任務。從「一竅不通」到「入門」(算入門了吧),學習了很多,起初本身也想學點編程,後來老是不了了之,此次跟着蜀黍和你們堅持下來,仍是蠻開心的。

可是,在平常的練習中,本身思考仍是比較少,有所欠缺,經常跟着蜀黍的思路走,因此本身獨立思考解決問題仍是比較少,可能本身練得太少,因此在寫大做業的時候基本沒什麼思路,須要藉助蜀黍的指點,才能完成做業(唉= =#看來學習能力不夠強,還要多多鍛鍊,多多敲代碼)。

在最近的一段學習時間中,因爲一段時間處於考試周,學習斷斷續續的,投入的時間並非不少,常常以完成任務就結束了(不該該啊),並且羣裏討論參與度也比較少,平時閱讀也比較少(敲腦殼,要檢討)。

課程體驗

  1. 蜀黍備課詳細,解釋地道,通俗易懂。

  2. 任務合理,基本可以按要求完成。

  3. 很適合這種非專業、零基礎的學員。

  4. 羣裏的成員積極討論,可以很好幫助你們解決問題,同時還有問題集錦,有助於複習。

下期計劃

繼續跟着蜀黍學習,哈哈

  1. 反覆學習蜀黍的學習資料。

  2. 認真完成天天的做業。

  3. 認真作總結,和同伴交流。

  4. 學有餘力,多閱讀相關材料、網站等。

  5. 多敲代碼,多敲代碼,多敲代碼。

不管如何,基於本身的興趣報了編程班(應該不會產生厭學情緒吧),但願在編程班中和你們一塊兒學習,掌握一門技術(技多不壓身,哈哈),學以至用嘛!

更多的內容將在chat裏面提供。

後話

Talk is cheap, show me your code.

練習在編程入門的過程當中,的確是最重要的,但願看了這一篇文章的同窗,若是有對於編程學習的想法,必定不要止於看書、止於假學習,這個技能,是一行一行敲出來的。

共勉。


圖片描述

相關文章
相關標籤/搜索