如果耐心读完本文,对您学习编程大有帮助
明白学习编程的思维,可以少走很多弯路
对于所有编程学习者,尤其是零基础的同学们,在学习的初期,一定要给自己做一个思想上的转变。
在我的编程学习理论中,这个思想的转变至关重要,什么时候你把这个思维转换过来了,你就是真正上道的那一天。
这个思维转换就是:
不要把自己当学生,而是要把自己当开发者。
不同的身份认同感,最后会导致不同的行为模式,而这行为模式,会对你的编程学习造成非常大的影响。
区别一:记笔记 VS 写技术文章
学生有一个特点,就是他们喜欢记笔记,但是开发者不怎么记笔记,而是会把自己学会的东西写成技术文章、教程的形式发表在技术博客或者知乎等网站上。
一个很有名的学习法叫做费曼学习法,这个学习方法简单地说,就是在学完一个东西之后,去给别人讲明白,注意,是讲给别人听,当你写成文章发表在网上的时候,你自然会去用更通俗的语言,更清晰的逻辑去讲述这个事物背后的逻辑,这个过程,是对自己学习的一个检验,也是加深映像,整理思路的重要过程。
那么如果你是去记笔记的话,很有可能,你不会去试图讲清楚这个东西,而是倾向于去照抄,或是不完全照抄,以 “提纲” 或是 “知识点” 的形式抄在本子上,说句实话,照抄的笔记,真的没用,因为现在搜索引擎的能力已经可以让你把大多数东西快速找到,你为什么还要照抄到笔记本上呢?
从功利的角度考虑,技术文章的写作,别人可以直接访问,也可以逐渐累积你的影响力,一个好的个人技术博客,会给你的简历加分很多,而一个厚厚的笔记本,没有人会管你记了什么。
区别二:以学会 XX 为目标 VS 以做出 XX 为目标
你会发现,学生思维里面有一个重要的特点,就是他们总是特别关注自己 “学会了什么”,不仅如此,他给自己定的目标,定的计划,永远都是” 学会 XX 书第 XX 章内容 “。
学生永远在准备,而开发者早已动手。
如果你还在上学,学生思维是 “这个学期我要学会 XX 课程”,而开发者思维是 “这个学期我要做出 XX”。
如果学 Python,学生思维会拿起一本教材,开始从头到尾看,我不知道你们发现没有,几乎所有那种编程语言教材,长得都差不多,上来先是基本的语法,基本的整型变量,浮点型变量之类的,然后伴随着几个小的教学例子。
比如,开发者学 Python,他第一步绝对不是去书店买教材,而是先去了解,Python 适合做什么,然后他了解到,Python 适合做爬虫,数据分析,AI,还能很轻松地搭建 Web 后端,之后他逛了一下午 Github,看了看那些 Python 高星项目都是做啥的,于是他给自己定下了这个目标:
半年时间内,我要用 Python 和 Python 周边的库搭建出一个网站,这个网站服务端运用爬虫技术爬取一些数据,可以提供知乎粉丝性别比例分析功能。
再来看学生继续看书,一个个的知识点去记忆,拿着他的小本本去总结知识点,而开发者上官网简单的看了下 Reference Doc 的简单交互式语法教程后,便马上开始了边做边学的过程,有了一个实际的项目目标,朝着这个目标走,不断地发现自己不会这,不会那,然后有目的性的去补足知识,他了解到了 beatuiful soup 作为爬虫主库,flask 作为后端 web 服务主库,然后会去看一些简单的教程,在这个过程中,基础语法得到了熟练,也训练了工程能力。
学生的成就感来源于学会了什么,开发者的成就感来源于做出来什么
开发者很功利,他们深知他们学会的所有东西都是为了开发出伟大的产品而服务的,所以他们绝对不会出现 “在学一个东西,但是也不知道学这个用来干嘛” 的窘境。
区别四:线性学习 VS 递归学习
学生喜欢线性的学习,因为线性的学习(拿本教材从头到尾慢慢看)正是符合了他们对确定性的追求,可惜这违背了学习的本来面目
开发者知道,人脑最不擅长的就是线性枚举,即便我们认识几千个汉字,但是我们无法去线性地去将所有认识的汉字枚举出来,我们的大脑,本就不是用来进行线性思考的,而复杂度上了一定程度的知识,线性的掌握,基本不可能。
有难度的知识,往往是这样的:为了搞懂 A,而去学 B,为了学会 B,而去学 C,这叫递归学习,递归虽深,但有回溯,它最终会回溯到我们的起点。
所以开发者的学习更偏向于递归式的学习,而且可能会以一个知识点为起点,去完成树状知识外围的遍历。(有点像搜索引擎的爬虫)
知识是树状结构,或者网状结构
当我们试图遍历一个树的时候,最简单直接的方式就是递归 , 如果你非要去” 线性” 的学,那就你是把编程学习当成了链表,还是 “单向” 的,这种算法怎么可能用来遍历树呢?
区别五:拿会 XX 定义自己 VS 拿 XX 项目作者定义自己
inus 从来不说自己精通 c 语言,与其说他不需要,不如说他不关心,因为他是 linux 和 git 的作者.
linus 这个程序员之神就是一个典型的开发者思维的人.
我希望所有计算机专业的同学们,等你们毕业了之后,你的 github 应该是绿油油的,而不是贫瘠的一片白.
我希望你们用你们的简历里写的是” 用 c 语言实现了一个 XX 引擎,github 链接 github.com/xxxxxx “,而不是” 精通 c 语言 “.
我希望学生们明白,任何一个像样子的项目,制作周期至少是按月计,你的大学有四年时间,哪怕一个项目做一年,你也能拿出两三个好项目,不一定有多少 star, 但是要完整,文档,测试,一应俱全.
我希望学生们知道,做项目和写课后习题不一样,课后习题一个小时,而项目是长期不断努力,不断学习突破的过程,需要你每天都搞,善始善终,最终拿出成果来.
我希望学生们明白,这个世界衡量一个人的成就,从来都是” 他做了什么”, 而不是” 他学会了什么”, 不要总用修炼内功去感动自己,必要时,也请你为开源世界贡献一点自己的力量.
我希望学生们明白,考上 985, 拿奖学金,这都不叫成就,因为和别人没关系 , 只有真正影响到别人的东西,让这个世界变得更好的东西,才是值得去” 秀” 的.
最后送给学生们一句话:
愿你早日忘记学生的身份,以开发者的姿态,面对这个世界。
作者:牛岱
链接:www.zhihu.com/question/39431192/an...
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。