学习一门技术的层次与方法
对一门技术的掌握分为下面几个层次:
- 学会使用
- 掌握原理
- 优化改造
- 融会贯通
1. 学会使用
学习如何使用最快最有效的办法就是傻瓜式模仿,跟着教程一步一步的去做,写出一个可运行的demo,先有一个感性直观的认识。然后可以试着对代码做一些小的改动,换个参数、换个名字、调整下顺序,看看结果有什么不同。
2. 掌握原理
要想掌握原理最直接的办法就是阅读源码(Read the fucking code),但是很多人没有掌握阅读源码的有效方法。面对庞大错综复杂的源码,很多人会不知所措,无从下手。有的人从入口文件,一行一行代码的去看,但是这样效率很差,看着看着自己就晕掉了。
我觉得应该按照先宏观、再微观的顺序。
先宏观
就是先对一个系统或者一个第三方库的大体结构和原理有个简单的认识,就像看书先看目录,旅游先看路线一样,有了整体的认识之后,再后面微观分析的时候,才不容易迷路。具体办法有,看官方介绍,看别人总结的文章,向有经验的人请教,当然,对于已经有了大量经验的人来说,也可以直接去看源码,不过要注意详略得当,只看整体结构,先忽略实现细节。
再微观
为什么要再微观呢?想必大家都有这样的经验,看了很多别人写得技术文章,看的时候感觉也懂了,但是让自己去讲一遍,或者去实现一下,又做不到了。研究细节,又有什么好的办法呢?
我觉得最有效的办法就是带着问题去读,这样会更有目的性。问题是一个切入点,让你面对源码的庞然大物时不至于无从下手。同时它还是一条线索,抓住它,你就不容易迷失在代码的浩海里。一个好的问题不应太大,太泛泛,就像是一根绳子不能太粗,太粗了就不容易握住。
当我们解决完一个问题,为了检验自己的理解是不是对的,同时加深印象,可以向其他人讲解,别人也可以向你提问,如果对方的问题你都能回答上来,那么才算真的理解了。最好再把自己的理解整理成文字,发到网上,一方面锻炼写作能力,还能让更多的人对你的理解进行检验,同时还能结交更多优秀的人。
知识之间是有依赖与联系的,一般解决了一个问题,还会引起其他问题。通过不断的解决问题,你会发现自己对一个系统的了解越来越深入,系统的结构在你脑海里开始展现出清晰的画面。
3. 优化改造和融汇贯通
在理解了一个技术的原理后,我们还需要知道它有哪些优点、哪些局限,适用于哪些场景,当其不能满足我们的需求时,则需要对其进行优化改造。
更进一步,则是对技术的融汇贯通,能将一个技术的思想应用到其他场景,做到手中无剑,心中有剑的境界。
作为一个Android工程师,我目前还处在第二阶段,有许多东西要去学习,接下来我会尝试从上层到底层,去研究一些Android方面的技术原理,包括第三方框架、Android Framework、虚拟机、操作系统等,希望和大家一块交流学习。