python跟谁学_你们都是怎么学 Python 的?

几乎所有 Python 教程,都是从"Hello World"、数据类型、字段开始。

我初学时,把大量时间,用来整理这些初级知识点,因为“打好基础很重要”。后来进入到有难度内容的阶段,才发现,之前的时间浪费在细枝末节上。

许多学编程的人,从入门到放弃,走的也是我曾走过的路:初级知识点不糊弄,后面却糊弄起真正重要的的内容,原因竟然是:“看起来”有难度,“看起来”学不会,而前期已经花费了大量时间和耐心,后面“这口气”撑不过去。

心疼!人这副皮囊,运作效率竟如此低下。

作为社畜,每天顶多有2小时抽空学习,如果没有高效的方法,会陷入:我就是蠢啊,我就是学不会的,无限自我怀疑中。漫长的一生,比起学不会编程,自我怀疑结果更糟糕。

铺垫了很久,就是想根据我的实践,跟大家探讨:初学者如何高效学习编程?你真的知道该怎么学习编程吗?你真的审视过自己的学习方法高效吗?

我自己接触过两种适合初学者的方法。不过,这些方法并不适合所有人,自己的事情,不能全交给其他人,要认识到这一点。

方法一,我叫做 “别管是什么,先敲代码再说”,具体步骤:第一次学习,只复制黏贴,观察“输入”和“输出”。

第二次学习,手敲代码,这时你一定会出错,但没关系,自己把bug解决了。

第三次学习,凭借自己的记忆,自己写出每个功能点的代码。

第四步,将第二和第三步过程中的bug和知识点, 做整理,输出笔记。

初学者是否必须看懂每一个编程知识点,才能继续往下走?

不是。不是。不是。

这是有人的认知特征和编程语言的重要特征决定的。在知识建立联系之前,人的大脑是无法用“未知解释未知”的,待你形成一点点肌肉记忆之后, 某些瞬间,你才会开始慢慢“懂”。而“编程语言的重要特征”,我在后面方法二会提到。

方法二,我叫做“底层逻辑法”,从底层逻辑上,了解计算机程序是怎么回事。

这是李笑来在《自学是门手艺》里讲到的方法,跟其他教材不同的是,他不从“ Hello World” 讲起,他从“程序之所以智能”开始。

我深思,我们经常说“学一个专业,要把基础打好”,但是在很多教材里,“基础” 等同于 “简单的知识点”,比如 Python "Hello World"。编程语言的基础,真的是“Hello World”吗?

如果说,”基础“应该是“学科的底层逻辑”,那会是怎么样?

如果我问你,法律是教什么的学科?你自己先在心里想一想,然后说出你的答案。

台湾有个老师说:”法律就是原则跟例外的学问。” 这是什么意思呢?他说,法律的关键不是原则,法律的关键是例外。“他说因为正常人类的生活本来就是不规则的,而所有我们这些不规则的,多元多样的生活形态,要塞进一个切得方方正正的原则里,就一定会有跑出来的部分。所有的法学就是在处理跑出来的部分。如果法律只是写下规定要求遵守,那不用有法学。

薛兆丰说:经济学是关心事与愿违(的因果规律)的学科。

一个典型的故事:英国殖民地印度期间,英国政府计划要减少眼镜蛇的数量,因此颁布法令说:每打死一条蛇就能领取奖金。然而印度人为了得到奖金,反而开始养殖眼镜蛇。

上面两句话和解释都很容易懂,然后你懂了这2句话之后,你再回去看看法学家和经济学家,看他们为了一个词一个概念在那边吹毛求疵,看看他们为了一个“好心人办坏事”的政策反复辩论,你就可以理解他们在干什么。

李老师说真正编程,从理解这个问题开始:计算机程序为什么“智能”?我翻译一下,如果用一句话来解释编程,这句话会是什么?它的底层逻辑是什么?以布尔计算为核心的流程控制。

下面的地图很精彩,不要看走眼了:计算机程序为什么“智能”? 程序是按照特定顺序完成任务的流程。程序“智能”的核心在于(布林)运算及其相应的流程控制。

运算的基本对象是“值”,“值”分为字面值的常量和需要赋值的变量,“值”的类型有:布尔值、数字、字符串。数字也分为:整数、浮点数、复数。(你可以顺便对比一下,为什么李老师用的概念是“值”,而其他教程喜欢用的“数据类型”?哪个概念更能准确表达它的意思?)

运算的对象,有比“值”更高级的:数据容器。一个容器里,放了很多值。不同的数据容器有:数组、列表、元祖、字典……面对不同的应用场景。以列表为核心,以是否可修改,是否有序为2个核心理解点。

用”操作符“对”值“进行运算。操作符包括:数值操作符、布尔操作符、逻辑操作符。操作符之间有优先级,不然一个语句里,混着几种操作符,先算谁呢?

稍微高级点的运算就用内建函数。比内建函数更高级的,其实是工具包,标准库里的xx模块。

总结上面五条,跟运算相关的:值、容器、操作符、内建函数、标准库。非常清晰的一条线。

下面是流程控制。流程控制的核心概念:条件/分支、重复/循环。无论多复杂的流程控制,离不开这两个东西,就好像电路其实是2个组合:通路+开关。

单条件就是 if…. ,双条件就是 if… else,多多条件是 if……elif……elif

for循环和while循环更重要。for循环经常跟 range() 一起用。 range(start, stop, step)是典型的函数写法,有必要自己拿着这三段代码,仔细研究他们的区别。如果搞懂了,大概率你就掌握了。python

10. 后面开讲:函数是一个子程序。从使用者的角度来说,调用一个函数就是:把一个值交给某个函数,让函数根据它内部的运算和流程控制对其进行操作,而后返回另外一个值的过程。我这里标黑了几个关键词,是否跟前面提到过的重点概念一致?

11. 简单而言,函数就是一个:输入(参数),经过运算,返回值的过程。”调用“其实是”使用者“的角度。程序是交互的,有使用者、写程序的人两个基本角色。后面会讲到……

你看出来了。

上面这十几条还是需要有点知识积累的人,才能看懂。希望你看出来了。

“计算机为什么智能”就是你“为探索未知领域先画个潦草的地图“ . 知道之后,你可以为自己减少极大的理解负担。围绕程序的2个组成部分:运算和流程控制,只要把这两个部分学会了,特别是流程控制,如何设计流程,那么你才能抓住计算机程序的核心。因为大部分编程工作,并非敲代码,而是把在纸上设计这些流程、框架。

变量、赋值、算术计算符……这些小学数据的基础运算,它们都只是“运算”下面的“值”这个分支的知识点,因此先读一遍就好。

直到你看到流程控制,脑子里有跟弦突然一绷紧:这很重要,虽然有点难,但是你得一个字一个字理解了,一个字一个字敲出来。

学习内建函数的关键只是:知道每个英文单词代表的意思,读一下官方文档,留个印象就好,不用刻意。

……

解决前面留下的一个伏笔。人的大脑是无法用“未知解释未知”的,待你形成一点点肌肉记忆之后。而“编程语言的重要特征”是什么呢?

李老师提出了一个概念,叫做“过早引用”。编程领域信息密度极高、复杂,充满了过早引用的知识,就不可能是一遍就读懂的。

“过早引用”是编程语言里一个很大的特征,所以……你的学习方法该是xx...:从一开始就要做好将要重复很多遍的准备,从一开始就要做好第一次只能读懂个大概的准备。

没有什么读不懂的,多读几次就是了。

所以说,正确打开编程语言的方式是:了解编程的底层逻辑,为探索未知领域先画个潦草的地图

了解编程语言的特征,知道自己会在哪里摔倒,就不去那里了

同时,我也提供了四步走具体步骤。这个组合拳的做法有多强呢?我自己试过,还不错,但也希望得到你的反馈。

也许你此时此刻看不懂,但如果有一天,你能想起这篇文章的某句话,发现“她说的竟然是对的!我以前怎么没发现?!” 那就来留个言吧。

当做我自己的一场实验。

参考资料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值