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.

练习在编程入门的过程当中,的确是最重要的,但愿看了这一篇文章的同窗,若是有对于编程学习的想法,必定不要止于看书、止于假学习,这个技能,是一行一行敲出来的。

共勉。


图片描述

相关文章
相关标签/搜索