「转」技术知识掌握的三个层次

前几天看到一个博文,里面说到了技术知识掌握的三个层次。我觉得划分的挺好,而且跟我自身的理解也很一致,所以就想按着这个划分,来写写自己的一些理解了。
1. 第一层次 what

what — what is it ?

这是最基础的层次,如果这个层次都达不到,那做技术工作几乎是无法胜任的。

顾名思义,在这个层次,你需要了解一个具体的技术是什么。

对于语言来说,是一个语言的基础语法。比如赋值语句,循环语句,变量的定义,类的定义,相较其它语言的一些独特性等。

对于基础知识来说,比如操作系统里面,线程,进程的概念,锁的概念;比如数据库里面,数据库表的定义,视图的定义,主键索引,辅助索引等。

对于一个框架来说,比如框架由哪些部分组成,能够提供哪些功能,有哪些API,有哪些类。一些常用的API或类适用于什么场景,需要怎么样的配置和传入怎样的参数等。简单来说,就是要会使用这个框架。

当然,一个框架有很多功能,不一定要全部掌握,但基础的,常用的,还是要会的。语言也是一样,对于很生僻,几乎不怎么用的,没掌握问题也不大,但基础的,常用的,就一定要掌握了。

以上都是特定领域技术知识的一些基础概念,掌握这些是达到第一层次的要求。

按照这个标准来说,大部分的程序员,都还处在第一层次,还在第一层次挣扎。

达到这个层次,做一个一般的程序员应该是没大问题的了,去面试,去到一般的公司,问题也不大。

很多同学在工作一段时间后,达到了这个层次天花板,然后就觉得自己没有提升了,也不知道怎么提升。这个时候,你需要做的不是转换方向或者寻求其他,而是应该开始考虑进阶第二层次了。
2. 第二层次 how

how it works !

顾名思义,它是怎么工作的。

比如 Java ,你写完一段Java 代码后,编译器会解析你的代码,将其转换成为字节码,然后虚拟机会装载字节码,并开始执行起来。

这里,你需要知道虚拟机是怎么运作的,怎么装载字节码,怎么分配内存,怎么回收内存等。

再比如 C/C++ , 你需要了解变量的内存是怎么分配的,内存是怎么布局的,指针在语言的实现层面是怎么一回事。

对于操作系统,数据库就更重要了。

在第一层次,你知晓了线程,进程的概念,也会用程序去fork 线程和进程。在第二层次,你需要知道线程,进程在操作系统里面是怎么一回事,是怎么工作的,用操作系统提供的观察工具来观察会有怎样一种表现,比如进程的调度,锁的竞争,CPU的消耗,等等。

第二层次是一个很宽泛的层次,细致来看,可以再分解出很多子层次。

比如,对于一门语言,框架,底层系统的运行机制的了解,细分下来,可以细分出很多不同的小层次。有人可能只是从原理上了解;有人可以深入到源代码的层级;有人除了源代码还可以根据运行表现推导出具体的实现。

我觉得能够从第一层次进阶到第二层次,一个人的技术生涯就可以被极大地延长,比如说,技术可以做到 40岁甚至 50岁。

所以在第一层次的同学,一定要想办法进阶到第二层次。
第三层次 Why

Why — Why is it like that 。

如果能到这个层次,我觉得对特定技术知识的掌握是到了一个很高的层次了。

举了个例子,语言的设计。一开始的时候有C语言,后面为什么发明了C++,有了C++之后,为啥有要来一个 Java ? 这是个可以深入思考的问题。

C++ 设计者甚至专门写了一本书来阐述背后设计的思考 :《C++语言的设计和演化》。 如果你能看懂并理解里面的内容,估计对程序设计语言的理解会深入很多。

对于操作系统,数据库,也是一样的道理。 你会去思考,为啥需要引入进程,引入线程的概念,他们是为了解决什么问题,如果不这么设计,会有更好的设计方法吗?

对于语言的各种框架,也可以进行这种思考,甚至可以拿同个领域不同的框架来进行对比分析。

当你可以站在设计者的层面去看待一个语言,一个框架,底层系统的时候,你的理解绝对是要超越很多人的,而且对这部分知识的掌握也要超过很多人。
最后

以上就是我理解的技术知识掌握的三个层次。这个划分不是什么官方标准,而是我个人经验的一个总结。这个划分,我觉得还是比较符合实际情况的,对于一些同学应该会有实际参考的意义,至少可以对比下自己对知识掌握的一个程度,也可以知道后面要往什么层次去进阶。

发表评论

邮箱地址不会被公开。

Paged comment generated by AJAX Comment Page