技术的正宗与野路子

面对一项新技术的时候,我们怎样去学习才能循序渐进,最终理解得深刻?

让我们先把可供自学的资料列出来,分析一下:

  • Tutorial(入门教程)。由该项技术的官网提供。通常是英文的。这份资料是给初次接触该项技术的人看的,一般是一步一步地教你完成某些例子。当我们说某项技术对于新手不太友好的时候,一般也是因为这项技术的Tutorial部分做得不够好。
  • Specification,简称Spec。这是集中体现该项技术的设计思想的东西,是高度抽象的描述。这个一般也是一份完备的、系统的描述,包 含该项技术涉及到的方方面面。这部分资料在不同的地方叫法不同,在相对简单的技术项目中,也可能没有;在另一些情况下,这部分资料混杂在其它文档资料之 中;它还可能以论文(paper)的形式出现。
  • API Reference。大而全的API索引和文档,针对不同的语言接口可能提供多份。当我们使用这项技术进行编程的时候,API Reference自然是个离不开的、总是要不停去查询的一份资料。
  • 别人写的技术博客。质量良莠不齐,到底有没有价值,我们要学会去分辨。
  • 技术书籍。跟技术博客类似,质量有好有坏。稍后我们和技术博客放在一起来分析。
  • Source Code。如果我们要学习的技术是开源的,那么很幸运,我们能得到源代码。这是一份终极资料。

为了让这些概念表达无误,我接下来多举一些例子。

Java语言

从来没有接触过Java语言的人,要想开始自学Java,从哪里开始呢?可以从Oracle官方提供的Tutorial入手:

这份资料《The Java™ Tutorials 》,集中体现了Tutorial类型的资料的特点。它从最开始的编译和运行环境搭建说起,教你写出第一个Hello World,再用介绍的方式将Java各种语言特性(变量、类、泛型、Lambda表达式、JavaBeans,等等)进行讲解,同时还有对于JDK里常 用API(集合类、多线程、IO等等)的介绍。

对初学者而言,需要的就是这样一份资料。即使你手头没有任何Java的入门书籍,读完这样的一份资料之后,一个新手基本就可以开始使用Java来编程了。

再看Spec:

这份文档,叫做《The Java® Language Specification》。是一份很典型的Spec,完备而规范。

任何讲Java语法的资料,包括各种书籍和前面提到的Tutorial,都只能涉及部分。而这份Spec,如果你能读通的话,那么与Java语言特性有关的所有一切,你就再也不用求人了。

JDK 8的API Reference:

用Java语言编程的时候,我们需要不断查阅的就是这份API Reference。我们平常一般是通过IDE来快速查看某个接口的文档说明。

Android开发

Android针对新手的Tutorial类型的资料,官网上称为Training:

这份资料是典型的Tutorial。它教你制作第一个Android App,并针对若干个主题进行一步一步的教学。

下面这份资料在Android官网上被称为:API Guides。

它实际上是一份介于Tutorial和Spec之间的文档。它有很多Spec的特点,比如它介绍Android中的抽象的四大组件的概念,介绍资源 尺寸的抽象(dp),介绍View层原理,等等。但是,跟前面看到的Java Spec相比,它没有那么规范和正式,描述也更随意一些,估计也算不上完备(但涉及到了Android技术的绝大部分)。

当我们对Android中某项具体技术存疑,或是有争论的时候,我们就需要来翻翻这份文档。因此,它基本可以归入Spec类型。

然后是Android SDK的API Reference:

这份API Reference的质量并不高,描述上过于简略,甚至模糊不清,其可读性跟前面提到的JDK 8的API Reference完全不在一个水平上。这也是一些开源项目的通病,不重视接口文档。

iOS开发

苹果在iOS开发方面给出的文档是相当丰富的,这也是一个闭源系统做得好的地方。

iOS开发的文档,很难区分出Tutorial和Spec这两个层面。它由很多文档组成,每个文档描述系统的某一方面。通常是在一个文档中,既有教学的部分,又有完备描述的部分。

针对完全的新手入门的话,下面这个文档,算是真正的一个Tutorial:

其它各个文档也是介于Tutorial和Spec之间,更偏向Spec。比如:

然后是iOS的API Reference:

如前所述,这份API Reference的可读性非常高,比Android SDK的要强多了。很多前后相关的概念,在这份API Reference的描述中,都有体现。

当然,除了developer.apple.com之外,iOS的文档也都可以通过XCode取到。

Redis

Redis的Tutorial是我见过的最好的Tutorial,它对初学者非常友好,不仅能读,还能执行。

Redis的Spec举例:

Redis的Commands Reference:

TCP/HTTP

网络协议与前面的都不同,它不是一个实现,而是一种标准。

网络协议的Spec文档很明显,就是它们对应的RFC。如果你的工作经常涉及到使用某个网络协议,恐怕就需要找来RFC通读一遍了。



再来说一下技术博客和技术书籍。

现在网上的技术文章空前繁荣,想读都读不过来。胡峰同学在他的微信公众号“瞬息之间”上,发过一篇文章《技术干货的选择性问题》,讨论的就是技术人员在当前技术文章爆炸的情况下如何取舍的问题。

在这里,我们从另一个角度来讨论一下这个问题。如果一篇技术文章,仅仅是对于所涉及技术的官方文档(Tutorial或Spec)的复述,甚至只是 个翻译,那么就价值不高。换句话说,如果我们能通过阅读官方文档学到同样的知识,那为什么要看你写的技术文章呢?官方文档自然更权威,直接阅读它能确保不 会遗漏重要的东西。

那什么样的技术文章才有价值呢?大概可以说(未必那么准确),那些包涵了实践经验的,能将各个技术点综合起来产生思考,从而给人以启迪的。简单来说,就是有深度的。

当然,技术书籍也大体如此。



我们回过头来再看一下,各个学习资料之间的层次结构。

每当我们接触一项新的技术的时候,我们都要把手头的资料按照类似的这样一个金字塔结构进行分类。如果我们阅读了一些技术博客和技术书籍,那么也要清楚地知道它们涉及到的是金字塔中的哪些部分。

最开始,一般读完Tutorial之后,就基本能上手做一些开发工作了。然后一边开发,一边查阅API Reference。注意,从这时候起,你的老板就开始向你付工资了,因为你的工作已经能够产出成果了。

但是,工作一段时间之后,我们发现,似乎身边的技术牛人学东西都比较快,而且在很短的时间内就能对某项新技术达到很深的理解。这是为什么呢?

这并不是因为技术牛人阅读技术资料阅读得快,而是他们知道阅读正确的资料,从而很快能达到知识金字塔更高的一层。

我见过的很多技术牛人,他们如果不是把一项技术至少理解到Spec那个层次,他们是不敢随便写代码的。相反另一些人则从网上随意拷贝代码,并在自己 不能完全理解的情况下用到项目中去。技术牛人们当然也参考网上的代码,但他们通常会确保它的每一部分都能安放在知识金字塔的某一部分,他们不容许那种不属 于任何体系的知识孤岛的出现。

我们现在可以这样总结,技术的“野路子”,其实是知识结构的不完整和不系统造成的一种状态。只有当你冲破知识金字塔层层的障碍,迈向更高层次的时候,老板才开始向你付高价。



我们的大脑好比内存。

既然是内存,就装不下所有的知识。但应该能装下对于知识的索引,否则我们便没法工作了。

那么,这里就有一个选择性的问题:我们选择哪部分知识加载到“内存”里呢?

显然,应该优先选择重要的,对我们最有用的信息。

对于那些最核心的技术,我们应该做到:

  • 通读Spec。读完就不再困惑。
  • 重要部分的API Reference要通读。里面包含了很多跟实现有关的信息。
  • 如果工作需要,还可能需要读到Source Code。特别是对于平常一直在使用的SDK,不一定从头到尾把源码读通,这样工作量太大且效率不高,但一定要把你的开发环境设置成一点击某个调用的方法就能跳转进源码实现。只有这样,你才能把平常开发的时间利用起来,随时随刻都点过去看源码。

对于剩下的知识里80%的部分,应该至少理解到Spec层次。只有这样,我们才能游刃有余地去使用它。

通读重要的Spec,在很多情况下,其实还是很有难度的。这需要毅力,和一点点英语基础。

按本文前面提到的例子,做Java的人有谁读过Java Spec?做Android的人有谁把developer.android.com上的API Guides都能通读下来?而做iOS的人,developer.apple.com上的各个Programming Guide又完整地读过几个?对于经常调用的SDK,你会有计划地去通读其中重要部分的API Reference吗?

能够把这一套做下来的,有可能不成为技术牛人吗?



到了文章最后了,总感觉还有些意犹未尽,脑海中似乎有些东西还是没有表达出来,也不确定本文描述的学习方式是不是适用于每位读者。仔细想想也难怪,学习本来就是一个复杂的问题,每个人并不是完全一样的套路。

但是,不管本文介绍的方法是“正宗”的路子,还是属于“野路子”,我在这里想要强调的一点是很明确的,那就是:要把知识梳理成系统的结构,要让头脑中的知识层次清楚,为此,我们需要阅读恰当的东西,需要不断地练习,需要克服种种困难。

成长没有捷径可走。需要的是一个一个坚实的突破。

时间: 2024-08-07 10:30:52

技术的正宗与野路子的相关文章

【转载】技术的正宗与野路子

http://kb.cnblogs.com/page/554496/ http://zhangtielei.com/posts/blog-programmer-learn.html 黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. "九阴神抓"本是<九阴真经>中的上乘武功,但当初梅超风夫妇由于拿到的<九阴真经>不完整,学不到里面的内

技术的正宗与野路子_转

黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. "九阴神抓"本是<九阴真经>中的上乘武功,但当初梅超风夫妇由于拿到的<九阴真经>不完整,学不到里面的内功心法,硬是把这门上乘武功练到了邪路上,于是就成了"九阴白骨爪".周芷若为求速成,也练就了这门邪功. 但黄衫女子乃出身武林名门(相传是杨过和小龙女的后人),自然修

转载:技术的正宗与野路子

* 参考文章:http://mp.weixin.qq.com/s?__biz=MzA4NTg1MjM0Mg==&mid=2657261357&idx=1&sn=ebb11a1623e00ca8e6ad55c9ad6b2547#rd * 面对一项新技术的时候,我们怎样去学习才能循序渐进,最终理解得深刻? 让我们先把可供自学的资料列出来,分析一下: Tutorial(入门教程).由该项技术的官网提供.通常是英文的.这份资料是给初次接触该项技术的人看的,一般是一步一步地教你完成某些例子.

野路子码农系列(2)Python中的类,可能是最通俗的解说

啥叫佩奇?啥叫类?啥叫面向对象?后面两个问题以前在大学里"祖传谭浩强"的时候我经常会有所疑问.老师说着一堆什么public, private,我都是一脸懵逼,啥叫私有?为啥要私有?然后就神游天外了-- 后来由于一直接触数据挖掘类的内容,写得那根本不是程序,都是脚本,而且基本上也用不到类这种东西.直到前几天,在一个项目中,我需要对8个分类分别应用同一个模型,我才又回想起了被类支配的恐惧.本文即劫后余生的产物,没有网络上哪些看到想吐的Foo, Bar,只有最通俗易懂的语言. P1 起因 正

有哪些野路子电脑技能让非程序员感到神奇?

程序员这个群体在外行人眼里总是看起来很神奇.以前觉得学计算机的同学用快捷键就可以玩转桌面的文件自由切换感觉好屌,用DOS命令设置电脑自动关机更是膜拜到直呼大神,当时的感觉就像下图一样. 当然,现在小编对程序员依然很膜拜,每次遇到与电脑有关的难题,第一时间就去找公司的程序员,他们总有办法给解决,小编对公司的全栈工程师都是直呼大神的. 今天,小编就和大家分享几则程序员被人膜拜的趣事和那些除编程之外的神奇技能.如果你也有这方面趣事请参我们的分享吧,直接在评论区回复即可. @mu mu 大学的时候,系里

iOS 【野路子】获取WKWebView内容高度做H5原生连接

前言:是这样的,刚写完上一篇文章还没缓过神来,上一篇文章我还提到了,想和大家聊聊原生+H5如何无缝连接的故事.结果我朋友就给我发了两篇他的作品.他的做法也都有独到之处.好的文章都是这样,让你每次看都能有新的收获,我们也都致力于写一些能帮别人解决问题的文章,下面我用另一种方式来完美实现这个问题.毕竟之前大家都是根据UIWebView写的,我来说说换成WK之后的区别,主题思路也不同哦~ 插两个链接,是我朋友的大家也可以做个对比 iOS [终极方案]精准获取webView内容高度,自适应高度 iOS

《这本书能让你戒烟》:野路子戒烟法。也许读者是否戒烟成功已经不重要了,重要的是这本书的销售非常成功。三星推荐

作者在书中说,自己是非专业人士,但是吸了33年的烟后来戒了.然后开了戒烟门诊,帮数千人戒了烟,然后把经验写成了这本书. 整本书内容不多,基本几个观点反复说:戒烟很容易,戒烟不会损失什么,烟瘾不算个事. 有没有人看了这本书戒了烟,个人存疑.至少在微博上搜的话没看到有真实的用户说看了之后能戒烟. 不过这本书已经是畅销书了.也许对作者来说,这才是最重要的. 从电子书的热门标注来看,大部分人读者只看到了一半,这已经是超出正常水平了. 书中一个比较明显的逻辑漏洞:大部分时间说吸烟很容易戒,有时候又说吸烟是

野路子出身PowerShell 文件操作实用功能

本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种搜,各种Demo,各种修改,花了半天时间,最后还是拼凑出来能达到效果了.本身对PowerShell并不熟悉,可能有些弯路,实现的也比较烂,总之是把各种小功能拼凑在一起,最后还是拼凑出来能达到效果了.如下是原始Demo,比较幼稚,权当是自己记录的笔记了 1,文件信息统计 如下文件夹下面有六个文本文件,

野路子出身PowerShell 文件操作实用功能 MSSQL123

因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职, 索性就网上各种搜,各种Demo,各种修改,花了半天时间,最后还是拼凑出来能达到效果了. 本身对PowerShell并不熟悉,可能有些弯路,实现的也比较烂,总之是把各种小功能拼凑在一起,最后还是拼凑出来能达到效果了. 如下是原始Demo,比较幼稚,权当是自己记录的笔记了 1,文件信息统计 如下文件夹下面有六个文本文件,统计这个文件夹下面的文件名称到一个日志文件 将这个文件夹下的文件信息统计出来,存在一个指定路