谈谈系统性学习

差不多上了一个月的班了,算是转了一点行,因为做的工作和之前的不一样。作为建模师,除了理论基础扎实之外,编程能力是必不可少的。本人误打误撞,大学实习的时候因为技术总管的介绍,接触了python,因为大学学过一点编程语言,所以很容易上手。工作两年,庆幸自己没有把python这门语言放下,在空余的时间都会学习,或多或少为自己有勇气换工作提供了条件,但是因为都是自学的,所有的知识点都是零散的,而且在大脑中建立不了关联,没有形成知识晶体,在运用上效率会比较低。有时真的有一种“书到用时方恨少,话到嘴边没地儿找,上网百度都学过,只好感叹,为什么想不起来呢!”

这就是今天要写的主题——知识的储存和知识提取。学过的知识要熟练的运用,除了经常使用使用之外,更重要的是要形成知识晶体。因为脑子里的形成多少知识晶体,才是知识提取能力的关键。什么意思?

我们知道,铅笔芯的石墨和钻石的都是由碳原子组成了,但是,硬度上,他们相差很远,可以说是千万个级别上的。为什么会这样,因为组成石墨的碳原子和组成钻石的碳原子的排列方式不同,也就是它们的结构不同。钻石的碳原子结构是非常稳定的,这也就是钻石为什么是自然界最硬的物质的原因。

知识也一样,知识点就像无数个碳原子,只有把它们形成稳定的架构,产生“知识晶体”,从零散的变成晶体,就不易磨损。斯坦洛维奇称为“crystallized intelligence”。比如,沙子和混凝土,沙子是松散的,混凝土是坚固的,再比如满天的星星实在太多了记不住,人们就把他们连起来,用星座去识别。

学编程语言也是一样,不经过系统性的学习,平时只是东学一点,西凑一块,做项目时才去找知识点,效率实在是慢,这时候你不得不付出额外的东西去完成工作——加班。所以,作为一个自学两年python的我,太多的知识了,但是就是没用构建一个系统的晶体,为了建立一个系统,不惜花血本(作为这个年纪的我,这笔钱实在有点大)重新听课,为的就是建立python知识系统。

到今天,上了两个星期的课了,确实很有用,虽然知识点都知道,这些知识点就像我拥有的砖头,需要一个建筑师把我构建一座大厦,而老师,正好充当了这个角色。

上周一上班的时候,为了满足其他部门的需求,我到数据库提数据,做清洗和分析,当初自己就想到了一个for循环,结果,结果加上调错的时候,这段代码整整运行了1个小时。那天晚上回去上课,学到了过滤器和函数,于是第二天重新修改代码,101秒,就把结果跑出来了!

天呐,这都是以前知道的知识啊,为什么会这样!!!!

于是,趁着周末,我赶紧复习这两周的内容,把学过的知识点结构化的做笔记。以后要用到相关内容,只要在脑海想起这副图,我就知道应该用什么知识,提取的强度大大增加。

其实,像我这种笔记的,叫做树状结构的知识晶体。

MI计算认知科学家实验室主任Josh用计算机模拟了循环结构、星星结构、方块结构、链条结构等,最终用数学方法证明人类最佳的抽象知识结构是树形结构。

这种树形结构的底层逻辑其实就是结构化思考力。我们的大脑啊,一次性接收信息的量是有限的,它更偏爱有规律的信息。什么意思?

举个例子,思考这样一个问题:如何能将200毫升的水装进100毫升的杯子里。(其实这是用编程写需求经常遇到的情形,这组数据是这样,如何把它提取、清洗成其他部门需要的格式再交付出去呢?你会想到很多办法,但是,对于程序员,代码运行需要时间,代码越简洁,消耗的内存越少,运行的速度就越高,你的效率就越快。所以,你想到的办法是不是最高效的呢?)

回到杯子的问题,同样,按照经验来分析,你有很多答案,但不一定保证想清,想全。

其实,这个问题的本质,在于水的体积是杯子的两倍。

如果你这样想,200毫升装不进100毫升杯子的原因,无外乎在于三个方面:

1.杯子太小装不下。 2.水是液态的,会流动。 3.外部因素环境,地球有重力。

当从这三个方面找答案的时候,实际就找到了解决这个问题的结构:水、杯子和外部环境。而且,你会发现你能找到很多解决方案。具体的我就不在这里列举了。

这就是结构化思维。有结构、有规律的整理,将大大提高思考效率。

同样,对于建模时,写代码的时候,结构化思维是提高效率的必备技能,这一切前提,你的脑海得构建编程语言的知识晶体。

如果你也经常感到“书到用时方恨少,话到嘴边没地儿找,别人一说都看过。只好感叹,你讲得真好”的时候,说明你是懂的,只是你还没有把它们形成知识晶体,才会让你感到“想不起来”的窘境。所以,系统性的整理一下吧!当然,多用多练也是增强提取记忆的必不可少的途径。

----------------------------------------------此处是分割线----------------------------------------

复习一下这两周学到的python基础知识点。

python底层的数据类型有三种,数值类型,序列类型和散列类型。

1.数值类型有4种:整型(int),浮点型(float),布尔类型(bool)和复数类型(complex)

2.序列类型有5种:列表(list),tuple(元组),string(字符串),bytes(二进制)和bytearrys,其中,后两者了解即可,最重要的是列表和字符串。掌握列表和字符串的增删改查的全部用法及区别。

3.散列类型2种:集合(set)和字典(dict)

函数是编程语言经常用到的,几乎无处不用。熟练其参数的分类和类型,以及相关的内置函数。

1.匿名函数(lambda)不是内置函数(以前一直搞错),它是简便函数的定义过程,为了处理简单的函数。

2.常用的内置函数有dir() len() sum() max() min() sorted() reversed()

3.高级的内置函数需要掌握四个:filter() map() enumerate()和zip(),注意map和filter的区别,是返回的结果不一样。

4.区分局部变量(nonlocal)和全局变量(global),以及相关数据类型起的作用:

函数外部不能访问函数内部变量

函数内部可以访问函数外部的变量

对于不可变类型变量,函数内部不能修改函数外部变量;对于可变类型变量,内部函数可以修改函数外部变量

5.熟练掌握,闭包、递归、回调函数。

6.控制流程很简单,不列在结构里面(for....in..... , while, if....else)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180722G1G5VA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券