背景:
作为一名程序员,我们身边的技术时刻在更新换代。
就拿Web来说,最开始只有HTML、然后才有了CSS,再之后才有了Ajax等等。现在整个Web开发的知识积累量已经非常庞大。这么多需要学习的知识一拥而上,很容易让我们不知所措,不知从何学起,就像一只无头苍蝇。
最近一直有其他实验室同学来找我请教如何入门一个新领域;同时也发现自己室友整天抱着一大厚本《Python基础教程》一页一页得翻(之前抱着一本QT相关的大部头在看,现在放弃了,又找了一本····研究生啊,就这么学习技术吗?还不如滚去看论文。。。),发现许多同学在这方面有很多疑惑,故此分享并总结。
那么对于想自学接触新领域,如何系统的入门并深入一门新领域呢?下面我想针对自己近一年学习新技术的方法做一个总结。
本科的时候,我也会像大多人一样,接触一门新技术时,买来一本网上推荐的书籍,从头一股脑儿的往后看。开始几天还好,刚接触的好奇心与兴奋劲儿促使你专心看书。而且可能一天结束,自己获得很多满足感,自认为收获满满。自己就这样持续一周,以这种方式忘我地学着。等着这股兴奋劲儿过了,学习效率也越来越低,慢慢地,就会拿出手机来玩儿,到后来越来也不想看,觉得书里写的真没意思。逐渐地,自己就不想碰这本书了。(即使最后自己坚持看完这本书,感觉自己学了这么多,但是怎么还是什么都不会啊···)
自省一下可能觉得,只看书效果并不好,就从网上找来相关技术培训视频来看,这个过程可能比看书兴奋劲儿更持久一下,因为视频里教的案例程序,自己运行出来的话,是很有成就感。就这样跟着教学视频天天学、天天练。学个过程可能很有乐趣,但是看完教学视频之后,才发现自己只能开发出视频里教过的程序,只要改变一下,就立刻不会了。(好多培训班就是在制造这种假象,给你讲的时候,讲的很有意思,演示的实例也很有趣,培训完之后让你觉得什么都会了。其实培训班教的知识并不深入,只是浅显的表面开发,底层原理甚至都不知道。自己很反感程序员速成班!)
后来,上了研究生后。导师交给我一个爬取“历年各高校在全国各省市各专业的录取分数线”的任务,任务很紧。在这之前,我甚至不知道爬虫是什么,用什么语言开发,怎么去爬取数据。因为时间紧、任务重,我查阅相关资料了解了一下爬虫是什么,用很短时间过了一下爬虫的讲解视频,网上找了几个python爬虫示例程序,自己运行并分析了一下源码。
然后就改造程序,实现对一个页面内高考数据的爬取,之后拓展至大量页面;又发现频繁访问目标网站,会弹出验证码,需要打码;有时还会导致IP被封禁;后来又发现需要爬取动态页面;需要建立多线程来提高爬取策略。就这样我每天都在自己的原始程序上添砖加瓦,最后实现了一个自动化的高效爬虫。而整个过程下来,也将网络爬虫技术从头到尾学了一个遍,关键问题自己该遇到的都遇到并解决了。
这个过程,自己不仅系统并全面的了解了爬虫技术,也对Python有了基本掌握。在完成这个任务之后,我找了相关书籍,将网络数据爬取的知识系统的学习了一便,并知道了之前为什么要这么做,解决了自己很多的疑惑。同时也将python中一些常用的自己没遇到的基础知识补充了一下。(整个过程很高效、也很有成就感。)
在这之后,我便用这种“以用促学”的方法来学习新的领域技术。包括最近在学的区块链技术也是如此,我先对区块链的整体有了个大概了解,知道了里边一些专有名词,及用到的技术。然后在对区块链的开发有个基础了解。建立了这个框架之后,我再分别去攻克其中的核心原理。最后再准备开发一个自己想做的Dapp(已经想好,学一点进行一点)。
今天在看公众号时,发现已经有人系统地总结过类似的学习方法【轮次知识树学习法】。自己学习方法与之相似又不太一样,下面根据前人的方法对自己的学习方法做一个总结分享:
[此方法不可能适合所有人,仅作为没有自己的学习方法的同学借鉴,如有更高效方法,欢迎分享!]
总结:「以用促学知识树学习法」
1.以用促学:
首先先对一个技术有个大概的了解,至少知道其是干什么的,整体原理是什么。
再确定一个开发项目,一边查找网上资料一边拼命实现!(不要担心自己一点基础没有,如何开发呀?别担心,网上很多资料,哪里不会查哪里。千万不要抱着一本大部头去一页一页地读,你需要做得是不会哪里查哪里!)。这样,根据一个具体的开发任务,使我们对整个知识体系有个大概的了解。然后再具体分析项目背后的技术。
2.分析项目:
作为初学者,我们不奢求一次吃个胖子。我们需要根据以上项目,分多次来学习。(实际上你想一口吃个胖子,也是不可能滴!)
第一遍看全局,知道有哪些东西,每一部分都是干什么用的,哪些重要,哪些不重要。
第二遍重原理,从最核心的原理出发,一步一步尝试以最短的路径走通整个流程,完成核心任务。
这样下来,每次的学习难度降低了不少,而我们对知识的理解却深入了很多。
3.梳理知识树:
对项目有了全局了解,知道其开发过程、及用到的相关技术之后。我们需要在理解本质和原理的基础上,梳理出一颗知识树。在这棵树上,我们应该可以清晰的看到哪些知识是核心、那些知识是周边,我们为什么要学它、学了它能用到哪些地方。务必注意:知识点并不是平等的,我们一定要抓住关键知识,不能眉毛胡子一把抓!
另外,每个人的知识树可能不一样,这棵树会随着你的理解进行调整。初学者往往很难立马建立起来完整的知识树,这时候可以借助网上一些学习路线图作为样本。
梳理出知识树后,我们相当于用一根绳,将这些知识分门别类的串了起来。哪些知识干什么用,变得清清楚楚。
把那些周边知识先扔一边,重点攻克那些主干知识,就能从中杀出一条血路来,等主干知识巩固好了,再慢慢回来补周边知识。
(20180621更新)补充一点:
上边自己没说太清楚。
到了这个过程,大家还是要认真看书的,并非万事大吉了。因为上边过程学到的知识还是片面的。到了这个过程,还需要拿起书来看!
不仅是查漏补缺,还是对知识的系统化、全面化。
到这里再看书,我们就能够对不同知识点的权重有了认识,知道哪些关键,那些次要。突出重点,提高学习效率!
有一个系统全面的基础很重要!
4.回顾提升:
我们对领域知识有了系统的学习之后,需要再回过头来,回顾下之前的项目。对之前的项目有一个重新的审视,我们会发现,之前实现的许多方法可能很低级、或是项目存在可以优化的地方,这就是一个总结提高的过程。
第三遍补周边,把之前做的方案拿出来,看看哪些地方可以优化,哪些地方能做得更好。