【转载】零基础小白如何入门 Python 编程

引子

我们来探讨的问题是 —— 如何从零开始学习python。

相信你能看到这篇文章,一定心里有一个学习编程教编程的想法,本文分享的知识可以为这两个目标提供一些参考价值。

为什么是我来讲这个事情呢?在过去的两个月时间内,作者在自己开发的教育平台——uband友班上面开办了一个python班级,报名的用户 75%是零基础用户,还有25%是之前学过,这25%中有一些负基础用户。

如何教?是不是我发一教材,然后让大家顺着开始学?是不是我们先进行一些理论学习,视频授课?

我分析了一下情况,发现以下几个比较有意思的点:

  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里面聊一聊,我也会请我的学员来分享自己的学习经历。

资源

原文