有一些问题想了很久:为何别人那么牛逼?写代码信手拈来,讲理论头头是道,架构设计说来就来,既会java又会c++还能写python? 为什么有的人看《Think in java》《现代操作系统》《深入理解计算机系统》等砖头一两周就能看完一本, 有的人一年都看不完一本?为什么有的人学了就不会忘记,而我学完很快就又忘记了?
这些问题响了不是一两天了,最近几年都在思考,但是一直没写下来。
时不时在论坛、博客或者技术交流群看到,有的牛人一个月,甚至一两周就能看完《Think in java》《现代操作系统》等砖头一样厚,排版紧凑、字还贼小的书,每当这个时候,内心都无法平静,惊叹:卧槽,为何如此牛逼? 这里举例的两本书我都看过,每一本的阅读时间都超过了半年。
为何别人需要的短时间就能看完,而我却要花这么长时间呢? 我觉得这就是技术池积累不同造成的。
举个栗子,同样是读一本英文书籍,有的人才会学会字母,看书那首先得一个单词一个单词的去理解,看起来自然就慢,还不一定能理解,一天可能只能看一页; 有的人已经学会了很多单词,看起来自然就快一些,可能一天能看5页,但也不一定能完全理解;有的人既学会了很多单词,还学会了一些语法,那一天可能就可以看20页,文字含义也能理解得差不多;还有的人,既有大量的词汇经验,又精通语法,还熟悉英文国家历史、平时还进行大量阅读,这样的人可能一天就能看100页。
说这个例子,就是想表达,每个人的知识积累深度和广度是不一样的, 所以同样阅读一本书,同样学一种技术,所需的是完全不一样的,有可能你和别人的学习速度差1倍、5倍、甚至100倍。
对于有的人来说,他已经看过基本书,学过很多语言知识了,如《C语言》《Think in Java》,那基本的定义和使用就懂了,如果《操作系统》《算法与数据结构》《设计模式》这样的知识也吸收了,内功就很扎实了,如果他还写过很多代码,有过大量的实践和项目经验,那这人实践经验也很充分了。这样的人,已拥有丰富的知识、深厚的内功、大量的实践,那看起书来自然就快。
而对于初学者,可能很多词汇的含义都还不懂,还需要去百度、谷歌,自然看起书来就慢很多,可能看一本书就要一年;而对于比较有经验者,由于还没达到很熟练的掌握各个知识点的程度,所以看起书来会快一点,但也不会很快,有的地方还需要停下来想一想,可能看一本书需要4-6个月;而对于有丰富知识和经验的人来说,看书的感觉就很流畅, 看书就是完善自己的知识架构及一些细节,可能1个月就看完一本书。
我们不要只看到结果,而不去思考这个结果背后的原因。看书的速度不是想快就快的,特别是专业书籍,这个速度是需要自己一年一年不断去积累的。
现在的人,最可怕的敌人就是浮躁、焦虑,想得很多,道理都懂,却又不脚踏实地的去落地执行。毕竟网络太发达,一夜爆富的神话听得太多,但那毕竟是神话,从概率上来讲,比中500万大奖还低。所以还是需要一步一个脚印。
刚开始看书,都是很慢的,只有书看多了,才会越来越快。
不同领域的书,读起来速度也是不一样的。
钱钟书的夫人杨绛先生就说过:你最大的问题不是想的太多,而是读书太少。
我们的学习遵循的路径主要三步:是什么、怎么做、为什么。
首先要知道这个概念、组件是什么东西,其次是要会用,知道怎么做,通常找个博客,按照其介绍一步一步去完成即可,这一步,已经可以让我们实现想要的效果; 第三步,知道为什么,这一步通常是去查资料、翻源码,了解其原理。
要成为一个普通的熟练工,前两步就够了,而想成为牛人,就需要第三步了,而第三步所需要的知识是相当庞大的。, 要知道为什么,则肯定需要翻阅源码,知道源码怎么写的是一回事,而知道为什么这么写是另一回事,这就可能涉及到 算法与数据结构、设计模式、java虚拟机知识等(以java语言举例), 而想要更深层次的知道我们的代码最后如何运行起来的,又要涉及编译原理、操作系统、计算机硬件组成等。
书看多了,各种专业名词也了解的多了,看起书来自然就快了,学习别人的博客也能看的懂。有代沟的人往往是认知上的差距,别人说什么你听不懂,还可能以为别人在吹,在乱说。有几个梗,一亿目标王健林,北大还行撒贝宁。人家的层次和接触面和很多完全不一样,所以他们看问题的角度是不一样的。
个人是从事Android开发的,所以关于看书的建议,先熟悉如何用,再去了解原理。
实用的书籍:
实用进阶类:
基础类、原理类书籍:
学习方法也很重要,所以也可以适当的看一些学习方法类:
相信时间的力量,不要急于求成,用两三年、甚至三五年时间去坚持,这些书肯定能读完。成为大牛是需要时间积累的,中科院的院士,多数都是五六七十的人。
简单三个词: 【学习】【实践】【建模】
最近看了一本书,《卓越密码:如何成为专家》,很好的一本书,总结起来就是以上三个词,也就是我们学习知识以后,一定要去动手实践,用起来,实践以后要总结,形成固定的套路(也就是建模),以后遇到类似的问题,按照套路处理就行。
多实践会形成条件反射或者快速反应,就像新手开车,离合、换挡、打方向就能让人手忙脚乱,而老司机开车一气呵成,这都是长期实践后,掌握了固定的套路的结果。
网络是如此发达,当我们有不理解的东西是,网上一搜,可能很快就理解了,但也可能在了解了这一个点时,发现还有更多的点自己不理解。 个人觉得,要快速学习一个知识点,网上查资料确实就够了,但是如果想搭建一个完整的知识体系,最好的方式还是看书,看经典的书,经典的书通常经过时间和众人的考验,不然也不会推为经典, 看经典的书,还可能从它的引用中发现更多经典的书或者文章等。如果只学习某些点的知识也可以选择一些大神的博客等。
学习了某个知识点后,一定要实践,要动手敲代码,要体会这个过程,在实践中去强化对这个知识点的记忆。大学老师说的印象很深的一句:代码是敲出来的。就是告诉我们要实践。
我在大学期间曾想过一个问题:为什么我在高中感觉学习很有效率,学过的知识点不容易忘记且会使用,为什么大学学习就这么困难的,上过的课过一段就忘了?想我高中数理化都是考过满分的人,是我变蠢了吗?,后来慢慢想明白,不是自己笨了,而是实践少了。想我们在高中,每学一个知识点,都会做大量的练习题,然后老师还会反复讲,通过练习题的实践,让我们强化了对某个知识点的记忆以及使用。而进入大学后,一个知识点老师可能只会讲一遍,作业自己也没认真做,那最后肯定忘得就快。
所以学习是需要付出大量时间的,不是把书看完、把博客看完就行,还需要反复动手实践。如果只是想学很多知识,但是又不想动手操作,那么看书时什么都明白的东西,过段时间一样会忘的所剩无几。 所以要动手写Demo,工作中有机会就用起来。
还有就是,工作中有实践的机会一定要抓住,实践能让人快速成长。 就像阿里技术崇拜的的神 多隆(蔡景现),他的能力肯定是很厉害的,但还有很大原因是他有机会去实践,最开始淘宝的搜索引擎是他一个人写的、文件系统、存储系统也是他写的,阿里的体量又在不断加大,技术难度也是指数增长,能在这样的环境下实践,想不成长都不行。
学过的东西,一定要自己总结、记录下来,要么形成总结文档,要么写成博客。即使由于你学完了很长时间没用到,当你需要用到时,就不用再去查找资料了,同时,看自己的笔记,也能很快挖出自己的记忆,甚至把当时学习的想法、思路都会议起来,形成一个可追溯的东西,毕竟要成为大牛要学习太多了,而很多学过的东西平时工作又用不起来,所以做笔记很重,复习也很重要,有时间把经典的书再多读一读。
【学而时习之】【温故而知新】,做好笔记也方便我们复习某个知识点,不断巩固自己的知识体系。知识要不断复习,才不会忘记,有更深的理解和体会,甚至创新。
学过的东西,可以写成博客分享出来,既能和别人讨论,也有可能别人发现自己的错误或者可以改进的地方。
学习+时间的动力有两种:主动的和被动的。
主动长期坚持学习的人,通常需要具有一定的意志力或者内在驱动力, 既有毅力又对自己研究的技术感兴趣,那么假以时日,在这个领域一定会有所成就,至少收入会上去。这种人就不多说了,肯定会变牛逼。
被动学习的人,通常是学业或者工作上或者某方面的压力,让人不得不去学习,比如工作中领导交给你一项任务,限时一个月完成,如果什么都不懂,那肯定要加班加点的去查资料,看书,才能在规定时间内搞出来。如果你是毅力不大,被动学习的人,当有机会时,建议一定要主动承担、抢着承担能让你学习成长的任务,这样才能不断成长起来。没有压力又何来的动力呢。
学习最终是要达成目标,而不是体验过程。如爬山目标是山顶,而不是爬一段山,体验一下又下去了;把水烧开才是目标,不要烧一会儿歇一会儿,这样水永远都烧不开,所以要确定自己的目标:【成为某个领域的专家】、【写出一个1W+ star的开源】等等。 确定了目标才有内在驱动力。
不要只看到一年两年,以五年、十年为单位去让自己产生质变,从每一天的点滴学习积累量变。
如果有基础、精力、动力,前两种是效率最高的,第三种方式学习相对轻松一点,速度慢一点,但是好吸收,更容易理解。
可以根据不同需求、不同时间做不同选择。
为什么别人那么牛逼:1、绝对的天才(极少数,万里挑一); 2、努力的结果(具有普适性)。
机会是给有准备的人的,当机会来了,就看你有没有抓住它的能力了。
学习都是需要过程的,没有谁一天两天就称为了大神。
想成为大牛,都需要一点一滴的不断积累,大牛都需要掌握大量知识,既有大量基础知识,也要有大量实践知识。
学习不要浮躁,最忌讳的就是浮躁,要一步一步,稳扎稳打的学习,坚持持续的学习才是正途,才会突破。
天才是少有的,普通人才是常态。找到普遍性规律,让自己不断进步。
关于学习方法的书籍:
关于认知、思维的书籍:
想成为java/Android架构师的推荐书籍:
程序员通用推荐书籍: