学习python的正确姿势!以下是我混迹多年的经验分享给大家
就这几天,很多小伙伴问我如何学习python(大部分都是零基础或者一点基础的)!我也在IT这块待了这么久,索性给大家说说学习python的正确姿势,希望大家有所体会!
几乎所有 Python 教程,都是从"Hello World"、数据类型、字段开始。
我初学时,把大量时间,用来整理这些初级知识点,因为“打好基础很重要”。后来进入到有难度内容的阶段,才发现,之前的时间浪费在细枝末节上。
许多学编程的人,从入门到放弃,走的也是我曾走过的路:初级知识点不糊弄,后面却糊弄起真正重要的的内容,原因竟然是:“看起来”有难度,“看起来”学不会,而前期已经花费了大量时间和耐心,后面“这口气”撑不过去。
心疼!人这副皮囊,运作效率竟如此低下。
作为社畜,每天顶多有2小时抽空学习,如果没有高效的方法,会陷入:我就是蠢啊,我就是学不会的,无限自我怀疑中。漫长的一生,比起学不会编程,自我怀疑结果更糟糕。
铺垫了很久,就是想根据我的实践,跟大家探讨:初学者如何高效学习编程?你真的知道该怎么学习编程吗?你真的审视过自己的学习方法高效吗?
我自己接触过两种适合初学者的方法。不过,这些方法并不适合所有人,自己的事情,不能全交给其他人,要认识到这一点。
嗨喽:正在学习python的小伙伴或者打算学习的,可以私信小编“01”领取资料!
方法一,我叫做 “别管是什么,先敲代码再说”,具体步骤:
- 第一次学习,只复制黏贴,观察“输入”和“输出”。
- 第二次学习,手敲代码,这时你一定会出错,但没关系,自己把bug解决了。
- 第三次学习,凭借自己的记忆,自己写出每个功能点的代码。
- 第四步,将第二和第三步过程中的bug和知识点, 做整理,输出笔记。
初学者是否必须看懂每一个编程知识点,才能继续往下走?
不是。不是。不是。
这是有人的认知特征和编程语言的重要特征决定的。在知识建立联系之前,人的大脑是无法用“未知解释未知”的,待你形成一点点肌肉记忆之后, 某些瞬间,你才会开始慢慢“懂”。而“编程语言的重要特征”,我在后面方法二会提到。
方法二,我叫做“底层逻辑法”,从底层逻辑上,了解计算机程序是怎么回事。
这是李笑来在《自学是门手艺》里讲到的方法,跟其他教材不同的是,他不从“ Hello World” 讲起,他从“程序之所以智能”开始。
我深思,我们经常说“学一个专业,要把基础打好”,但是在很多教材里,“基础” 等同于 “简单的知识点”,比如 Python "Hello World"。编程语言的基础,真的是“Hello World”吗?
如果说,”基础“应该是“学科的底层逻辑”,那会是怎么样?
如果我问你,法律是教什么的学科?你自己先在心里想一想,然后说出你的答案。
下面的地图很精彩,不要看走眼了:
- 计算机程序为什么“智能”? 程序是按照特定顺序完成任务的流程。程序“智能”的核心在于(布林)运算及其相应的流程控制。
- 运算的基本对象是“值”,“值”分为字面值的常量和需要赋值的变量,“值”的类型有:布尔值、数字、字符串。数字也分为:整数、浮点数、复数。(你可以顺便对比一下,为什么李老师用的概念是“值”,而其他教程喜欢用的“数据类型”?哪个概念更能准确表达它的意思?)
- 运算的对象,有比“值”更高级的:数据容器。一个容器里,放了很多值。不同的数据容器有:数组、列表、元祖、字典……面对不同的应用场景。以列表为核心,以是否可修改,是否有序为2个核心理解点。
- 用”操作符“对”值“进行运算。操作符包括:数值操作符、布尔操作符、逻辑操作符。操作符之间有优先级,不然一个语句里,混着几种操作符,先算谁呢?
- 稍微高级点的运算就用内建函数。比内建函数更高级的,其实是工具包,标准库里的xx模块。
- 总结上面五条,跟运算相关的:值、容器、操作符、内建函数、标准库。非常清晰的一条线。
- 下面是流程控制。流程控制的核心概念:条件/分支、重复/循环。无论多复杂的流程控制,离不开这两个东西,就好像电路其实是2个组合:通路+开关。
- 单条件就是 if…. ,双条件就是 if… else,多多条件是 if……elif……elif
- for循环和while循环更重要。for循环经常跟 range() 一起用。 range(start, stop, step)是典型的函数写法,有必要自己拿着这三段代码,仔细研究他们的区别。如果搞懂了,大概率你就掌握了。
- 后面开讲:函数是一个子程序。从使用者的角度来说,调用一个函数就是:把一个值交给某个函数,让函数根据它内部的运算和流程控制对其进行操作,而后返回另外一个值的过程。我这里标黑了几个关键词,是否跟前面提到过的重点概念一致?
- 简单而言,函数就是一个:输入(参数),经过运算,返回值的过程。”调用“其实是”使用者“的角度。程序是交互的,有使用者、写程序的人两个基本角色。后面会讲到……
你看出来了。
上面这十几条还是需要有点知识积累的人,才能看懂。希望你看出来了。
“计算机为什么智能”就是你“为探索未知领域先画个潦草的地图“ . 知道之后,你可以为自己减少极大的理解负担。
- 围绕程序的2个组成部分:运算和流程控制,只要把这两个部分学会了,特别是流程控制,如何设计流程,那么你才能抓住计算机程序的核心。因为大部分编程工作,并非敲代码,而是把在纸上设计这些流程、框架。
- 变量、赋值、算术计算符……这些小学数据的基础运算,它们都只是“运算”下面的“值”这个分支的知识点,因此先读一遍就好。
- 直到你看到流程控制,脑子里有跟弦突然一绷紧:这很重要,虽然有点难,但是你得一个字一个字理解了,一个字一个字敲出来。
- 学习内建函数的关键只是:知道每个英文单词代表的意思,读一下官方文档,留个印象就好,不用刻意。
解决前面留下的一个伏笔。人的大脑是无法用“未知解释未知”的,待你形成一点点肌肉记忆之后。而“编程语言的重要特征”是什么呢?
李老师提出了一个概念,叫做“过早引用”。编程领域信息密度极高、复杂,充满了过早引用的知识,就不可能是一遍就读懂的。
“过早引用”是编程语言里一个很大的特征,所以……你的学习方法该是xx...:
从一开始就要做好将要重复很多遍的准备,从一开始就要做好第一次只能读懂个大概的准备。
没有什么读不懂的,多读几次就是了。
所以说,正确打开编程语言的方式是:
- 了解编程的底层逻辑,为探索未知领域先画个潦草的地图
- 了解编程语言的特征,知道自己会在哪里摔倒,就不去那里了
也许你此时此刻看不懂,但如果有一天,你能想起这篇文章的某句话,发现“她说的竟然是对的!我以前怎么没发现?!” 那就来留个言吧。
最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取