听别人讲:技术的正宗与野路子
黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙。
这段描写出自《倚天屠龙记》第三十八回。
“九阴神抓”本是《九阴真经》中的上乘武功,但当初梅超风夫妇由于拿到的《九阴真经》不完整,学不到里面的内功心法,硬是把这门上乘武功练到了邪路上,于是就成了“九阴白骨爪”。周芷若为求速成,也练就了这门邪功。
但黄衫女子乃出身武林名门(相传是杨过和小龙女的后人),自然修炼的是正宗的《九阴真经》。虽然武功路数与周芷若本同属一脉,但更加“醇真深厚”,自然也更胜一筹。这是金庸武侠中“正宗”武功胜过“野路子”的一个典型案例。
那么,这是否能够说明,“正宗”一定强于“野路子”呢?
且慢!
喜欢金庸武侠的朋友,可还记得《越女剑》中的阿青?
阿青本是一名牧羊女,却在牧羊时巧遇一头会使竹棒的白猿。在与白猿的玩耍嬉闹中,她硬是悟得了高超的剑法,竟能以一人之力敌两千越甲!
就是这样一个从野路子练出来的柔弱女子,即使按广大金庸迷的保守估计,她也能在整个金庸武侠图谱中至少排名前五!
做技术,犹如修习一门武功。
历数我周围的技术牛人(牛不到一定程度的先不算),他们中既有名牌大学计算机科班毕业的,也有半路出家转行过来的。
但他们都有一个共同特点:他们在遇到问题后,思考片刻,总是能一下子切中要害,在表达上也往往一语中的。这也包括那些平常不善言辞的程序员。反观那些“更一般”的程序员(其中不乏科班毕业的),他们经常很难抓住问题的本质,表达起来也总是说不到点子上。
可见,“正宗”还是“野路子”,并不在出身。
写到这里,我终于自己长出了一口气。我出身一个极普通的农民家庭,既不是书香门第,也不是技匠世家。记得在大学一年级的上机编程课上,我才发现自己原来根本不会用键盘打字。相比那些初中高中就把计算机玩得很溜的同学,我算野路子吗?
好了,那“正宗”还是“野路子”,不在出身在什么呢?
在于学习和思考的方法。
据我观察,技术牛人的学习方法和思考方式,大体类似。
思考方式,是个很难说清的东西。所以,本文我们重点来讨论讨论学习的方法。
面对一项新技术的时候,我们怎样去学习才能循序渐进,最终理解得深刻?
让我们先把可供自学的资料列出来,分析一下:
为了让这些概念表达无误,我接下来多举一些例子。
Java语言
从来没有接触过Java语言的人,要想开始自学Java,从哪里开始呢?可以从官方提供的入手:
这份资料《The Java™ 》,集中体现了类型的资料的特点。它从最开始的编译和运行环境搭建说起,教你写出第一个Hello World,再用介绍的方式将Java各种语言特性(变量、类、泛型、表达式、,等等)进行讲解,同时还有对于JDK里常用API(集合类、多线程、IO等等)的介绍。
对初学者而言,需要的就是这样一份资料。即使你手头没有任何Java的入门书籍,读完这样的一份资料之后,一个新手基本就可以开始使用Java来编程了。
再看Spec:
这份文档,叫做《The Java® 》。是一份很典型的Spec,完备而规范。
任何讲Java语法的资料,包括各种书籍和前面提到的,都只能涉及部分。而这份Spec,如果你能读通的话,那么与Java语言特性有关的所有一切,你就再也不用求人了。
JDK 8的API :
用Java语言编程的时候,我们需要不断查阅的就是这份API 。我们平常一般是通过IDE来快速查看某个接口的文档说明。
开发
针对新手的类型的资料,官网上称为:
这份资料是典型的。它教你制作第一个 App,并针对若干个主题进行一步一步的教学。
下面这份资料在官网上被称为:API 。
它实际上是一份介于和Spec之间的文档。它有很多Spec的特点,比如它介绍中的抽象的四大组件的概念,介绍资源尺寸的抽象(dp),介绍View层原理,等等。但是,跟前面看到的Java Spec相比,它没有那么规范和正式,描述也更随意一些,估计也算不上完备(但涉及到了技术的绝大部分)。
当我们对中某项具体技术存疑,或是有争论的时候,我们就需要来翻翻这份文档。因此,它基本可以归入Spec类型。
然后是 SDK的API :
这份API 的质量并不高,描述上过于简略,甚至模糊不清,其可读性跟前面提到的JDK 8的API 完全不在一个水平上。这也是一些开源项目的通病,不重视接口文档。
iOS开发
苹果在iOS开发方面给出的文档是相当丰富的,这也是一个闭源系统做得好的地方。
iOS开发的文档,很难区分出和Spec这两个层面。它由很多文档组成,每个文档描述系统的某一方面。通常是在一个文档中,既有教学的部分,又有完备描述的部分。
针对完全的新手入门的话,下面这个文档,算是真正的一个:
其它各个文档也是介于和Spec之间,更偏向Spec。比如:
然后是iOS的API :
如前所述,这份API 的可读性非常高,比 SDK的要强多了。很多前后相关的概念,在这份API 的描述中,都有体现。
当然,除了之外,iOS的文档也都可以通过XCode取到。
Redis
Redis的是我见过的最好的,它对初学者非常友好,不仅能读,还能执行。
Redis的Spec举例:
Redis的 :