极客时间已完结课程限时免费阅读

放学别走 | 如何画好领域分层图?

放学别走 | 如何画好领域分层图?-极客时间

放学别走 | 如何画好领域分层图?

讲述:安晓辉

时长08:58大小8.19M

你好,我是华仔。
第 19 讲中,我为你介绍了用于提升技术深度的链式学习法。链式学习法的第一步,就是要明确一项技术的深度可以分为哪些层,并画出领域分层图细节分层图
其中细节分层图基本上可以按照固定的模板去画(接口设计、设计原理、设计方案和实现源码),但是领域分层图并没有统一的模板,因为不同技术领域的分层方式可能会有很大差异。
我之前没有详细讲解领域分层图的画法,而是跟你说“尝试画图本身就是一个梳理结构、强化认知的过程”。
因为我想强调的是:画图本身的技巧和效率并没有那么重要,对你成长帮助最大的,是为了画出这张图而去整理、思考和探索的过程。

不用担心画得不准确

你可能会担心,如果领域分层图画得不准确怎么办?
首先,领域分层图本来就是需要迭代优化的,很少有人一开始就能画得非常准确。
实际的情况是,你先画一个初稿,然后通过整理、思考和探索,对相关技术的理解更加深刻和全面,发现原来存在的一些问题,比如分层关系不合理、某一层遗漏了一些技术点等,然后再进行修改,经过不断地迭代优化,最终得到比较准确的版本。
其次,领域分层图就算画得不够准确,你学习的过程也没有白费。
一般情况下,你不会错得太离谱,你学到的内容就算跟当前想学的技术关联没有那么强,但下次提升另一项技术的深度时,很可能就用上了。而且随着你积累的经验越来越丰富,以后再画领域分层图的时候就会越来越熟练。
当然,你可能过几个月就要参加晋升了,没有多少时间用来慢慢试错迭代;或者你真的对自己的探索能力没什么把握,必须掌握一个具体可靠的画图方法才能放心。
考虑到这些情况,这一讲我就分享一下画领域分层图的具体经验吧。

拿来主义

最简单的方法当然就是拿来主义,你可以找团队内部熟悉某项技术的高手来帮你画,也可以根据网上搜到的相关文章或者思维导图来整理。
这种方法的好处是耗时少,也不会走偏,但是它也有缺点。
首先,你自己的理解深度还是不够,因为你缺少了自己去探索的过程。
其次,对外界的依赖太高,你并不是刚好每次都能找到这样的高手,而网上的资料也存在不完整、老旧过时甚至错误的风险。
最后,这种方法往往只适合热门、成熟的技术领域,而对于冷门、新兴的技术领域,你能拿来的内容非常少,还是得靠自己去产出。

画领域分层图的步骤

那么,假设你对某个技术完全不了解,团队里也没有人熟悉,在网上又只能找到非常基础的资料,这个时候,你要怎么画领域分层图呢?
以下是我最近学习 ClickHouse 时的画图过程,供你参考。
第一步,搜集资料。
有官方文档的情况下,先看官方文档是最保险的,比如我看的就是 ClickHouse 的英文官方文档,它已经很全面了。
你可能会有疑问,如果我想学的技术不像 ClickHouse 这样有比较成熟的官方文档,该怎么办呢?
我的想法是,成熟的项目一定有成熟的文档。如果一个项目没有官方文档或者官方文档很烂,只能靠你自己看代码去摸索,那么我建议你先不要去学。
首先,这样学效率太低了;其次,这说明项目本身就有问题,要么是还不成熟,容易误导你,要么就是没什么人维护,出了问题也没人管你,无论哪种情况你都很容易踩坑。
当然,不同的学习对象有不同形式的资料,但不管什么类型的资料,我推荐你首先都要看权威资料,包括官方文档、经典书籍、研究论文等,比如 ClickHouse 的官方文档、《UNIX 环境编程》《TCP/IP 详解》和谷歌的大数据论文等,都属于各自领域的权威资料。
第二步,挖掘技术点。
我根据官方文档中的内容,挖掘出了一些相关的技术点。
ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).
Why Column-Oriented Databases Work Better in the OLAP Scenario?
Column-oriented databases are better suited to OLAP scenarios: they are at least 100 times faster in processing most queries.
这两段话涉及两个技术点,列式数据库(Column-Oriented Database)和 OLAP
There are two ways to do this:
A vector engine. All operations are written for vectors, instead of for separate values. This means you don’t need to call operations very often, and dispatching costs are negligible. Operation code contains an optimized internal cycle.
Code generation. The code generated for the query has all the indirect calls in it.
而这段话又涉及两个技术点,矢量计算(Vector)和代码生成(Code Generation)。
你可以看到,光是简单的一篇 ClickHouse 介绍文档,我已经挖掘出了至少 4 个关联的技术点。
第三步,针对技术点学习。
比如你已经挖出了列式数据库这个技术点,但是没有相关的积累,那么你可以立刻开始先学跟它相关的内容,也可以初步看完 ClickHouse 的资料之后再来学习。具体采用哪种方式,根据你的个人习惯来选择就行了。
我看到列式数据库这个技术点之后,就在网上找到了一篇不错的文章,里面又引出了 HBase、NSM、DSM 等相关的概念。当然,只看这一篇文章肯定是不够的,我会结合多篇资料,最后形成综合的理解。
第四步,画出初稿。
学习了解了这些重要的技术点之后,我尝试整理了 ClickHouse 领域分层图的初稿,如下所示:
第五步,迭代优化。
你可能会觉得这张图好像比较简单。不过没关系,在阅读资料和思考的过程中,我会继续迭代优化这张图,比如之后还可能加上矢量计算相关的 CPU 结构。
即使是这张简单的领域分层图,内容已经足够我学上几个星期了,我会以这张图为基础先开始学,学习的过程又会拓展我对这个领域的认识,促使我继续迭代优化。
当我把图片上的内容学完之后,我可以通过培训的方式给团队讲解 ClickHouse,回答他们的疑问,借助群众的力量来帮助自己加深理解,进一步迭代优化这张图。

小结

现在,我们回顾一下这一讲的重点内容。
画领域分层图的技巧和效率并没有那么重要,对你成长帮助最大的,是为了画出这张图而去整理、思考和探索的过程。
画领域分层图最简单的方式是拿来主义,找团队内部熟悉某项技术的高手来帮你画,或者根据网上搜到的相关文章或者思维导图来整理。
如果拿来主义不能满足你的需求,或者你对自己有更高的要求,可以通过 5 个步骤来画领域分层图:搜集资料,挖掘技术点,针对技术点学习,画出初稿,迭代优化。

思考题

这就是今天的全部内容,最后留一道课后思考题给你吧。参考这一讲的方法,你能够把自己最近想提升的一项技术的领域分层图画出来吗?
你可以用文字的形式在留言区分享出来,让我来帮你把把关。相信经过深度思考的回答,也会让你对知识的理解更加深刻。
分享给需要的人,Ta购买本课程,你将得20
生成海报并分享

赞 23

提建议

上一篇
加餐四 | 学习基础技术:你对“基础”的理解准确吗?
下一篇
加餐五 | 《大厂晋升指南》推荐书单
unpreview
 写留言

精选留言(16)

  • Jason
    2021-01-22
    华哥,你说的学几个星期或者几个月,一般都每天持续投入多长时间? 我自己平时工作下班,不加班的话,一天有2个小时空余。周末虽然可以全天学习,但发现一天只能投入大概4个小时,其他包括吃饭,午休,中间看下手机,感觉效率利用挺低。你在学习感到疲倦时,怎么调整自己呢?

    作者回复: 你每天4小时已经很多了,不要全部用来学习,留些时间放松和锻炼,人脑和身体也都是要休息的,当自己疲倦时就不要逼着自己学,我不想学的时候就玩游戏、刷抖音、看剧:) 我一般每次学习30~60分钟,而且是2~3本书或者专栏一起学,也就是说每个大约15~20分钟,正好书籍一章或者专栏一课。 推荐你读读《认知天性》这本书,讲如何学习才高效的。

    共 2 条评论
    22
  • Monday
    2021-01-19
    既然华仔正在学习ClickHouse,借极客时间平台,请教下华仔。感谢感谢 背景:用户20W,MySQL数据大小1.5TB,月增量250GB,2021年年底预计用户会达到60W。现在MySQL已经支持不住了。计划做数据归档, 问题:并发低,响应时长要求1秒以内,尽量支持原来所有的查询(包含复杂的报表),可以选择ClickHouse来做归档库吗?(目前还有备选Postgres和ES)

    作者回复: 我也是刚学习 :) 根据你描述的场景,ClickHouse做归档应该可以,归档数据不需要修改,不需要事务,主要是读取,ClickHouse的特性非常匹配,而且支持SQL。 PostgreSQL和MySQL没有很大区别,都是OLTP,不适合大数据量归档数据。 ES是文档数据库,从MySQL迁移过去要改很多,成本很大。

    11
  • Monday
    2021-01-19
    学习Linux领域图不好画,所以只画了细节图 1、基本命令(用户管理/权限修改、软件安装/卸载、文档编辑、搜索、解压缩等) 2、文件系统 和文件I/O 3、进程和线程 4、网络和网络编程 5、系统调用 6、内核源码
    展开

    作者回复: Linux的领域图也可以画的,例如我给你一个参考: 第一层:Linux 第二层:操作系统原理 第三层:文件系统原理、计算机组成原理 第四层:CPU、磁盘、内存

    10
  • Geek_558387
    2021-02-10
    遗憾的是 认知天性确实是本烂书

    作者回复: 这本书前面几章还可以的,后面就写的有点乱了,另外一本《有效学习》我觉得写的还不错,你可以看看。

    5
  • Harvey
    2021-01-20
    你好,华仔: JVM的技能图谱 第一层:JVM基础 第二层:java 基础 第三层:操作系统 第四层:CPU、内存管理 本节总结 【1】拿来主义(找导师,找资源) 1)对于我而言能直接交流的牛人较少,只能通过专栏或者技术博客运用这个方法。 2)之前学习一个技能直接先找经典的书籍开始学习,没有看过论文。因此准备学习资源同时也可以参考业内专业人的博客,看别人又是怎么学习这个技能。前提是先积累几个业内专业人的技术博客,持续跟进。 【2】自我探索包括:找资源、列出技能点、画初稿、扩展、迭代。 1)思考:目前所了解的技能都是很成熟的技术,所以可以优先参考专业人的技术学习路径,在结合自己的知识结构做一些调整。 【3】行动: 1.找到3-5个JAVA领域的人的技术博客,持续跟进。 2.在学习一个技能的前期第一步:构建该技能的体系框架;第二步:构建技能图谱;第三步:构建技术细节。
    展开

    作者回复: 除非你是做JVM开发的,否则JVM一般是作为Java技术领域中的一层。

    4
  • favorlm
    2021-03-12
    java领域分层图 框架: springcloud springboot springmvc mybatis 程序设计: 设计模式 重构手法 性能调优与监控: jvm arthas jdk自带工具包 中间件: mysql pg redis 操作系统: linux 请老师点评
    展开

    作者回复: 中间件算不上java的领域分层图,领域分层图需要有关联,例如上层依赖下层。 你可以增加JVM可以独立为一层,因为JVM并不只是为Java服务的,它是一个独立的层。 编程语言:Java 框架: springcloud springboot springmvc mybatis 虚拟机:JVM 程序设计: 设计模式 重构 面向对象 性能调优与监控: jvm arthas jdk自带工具包 操作系统: linux

    3
  • 追梦青年
    2021-02-22
    想问下30来岁是待在腾讯阿里慢慢晋升重要,还是跳槽去头条拼多多赚钱重要

    作者回复: 哪里晋升机会好去哪里,30岁的时候跳槽还不会受年龄限制,如果熬到35岁了还没有晋升,那后面机会就更少了。

    共 2 条评论
    3
  • 终身学习者
    2021-02-25
    Ceph的领域分层图 应用技术:Ceph 核心原理:CRUSH算法、多副本、纠删码、故障检测、一致性、PG状态机 依赖组件:XFS、LevelDB 操作系统:CPU、MEM、IO、NET、FD等Linux系统管理部分 硬件相关:各种硬盘、阵列卡、物理机 开发语言:C/C++ 基础知识:分布式知识、存储基础知识 非常感谢大神!这个专栏太强了。 摘录: 列式存储的问题是写入开销更大,这是因为根据关系模型,在逻辑上数据的组织单元仍然是行,改为列式存储后,同样的数据量会被写入到更多的数据页(page)中,而数据页直接对应着物理扇区,那么磁盘 I/O 的开销自然增大了。
    展开

    作者回复: 互相学习 :)

    1
  • 走过路过
    2021-07-10
    自己收获最大的一章,这是一个通用的学习方法论,非常感谢华哥分享。通篇都是干活

    作者回复: 承蒙厚爱 :)

    1
  • escray
    2022-11-23 来自广东
    参考留言里面有关 Java 的领域分层图,我试着画一个 SpringBoot 版本的 框架:SpringBoot,Spring Framework 依赖:Reactor 技术栈:Servlet Stack(Servlet Containers、Servlet API、Spring MVC、Spring Data Repository<JDBC、JPA、NoSQL>),Reactive Stack 虚拟机:JVM 程序设计:重构、单元测试 性能调优与监控:JVM
    展开

    作者回复: Spring Boot还有运行容器,Tomcat、Undertow、Jetty

  • H
    2022-01-06
    我尝试回答一下: 我最近在看RocketMQ 我查看了一下官方文档,但有效信息不多,可能是我没发掘到,可以的话,劳烦华仔指导一下 第一层:RocketMQ 第二层:发布订阅机制、重试机制、故障规避机制 第三层:Netty 第四层:内存映射 感觉不对,但没方向,苦恼
    展开

    作者回复: 你先按照这个分层来学习,当学了一些内容后,你对分层的理解会进一步加深,再来更新分层

  • 李先生
    2021-09-12
    华哥,想知道关联的技术点学习,学习到一个什么样的度?

    作者回复: 从你工作中用到的技术往下挖3层

  • Kenneth。🌞
    2021-07-29
    华仔,想问下对于数据结构和算法领域分层如何划分,还是说通过脑图的方式把关联的知识点串联起来, 比如线性表 --> 栈,队列 --> 树,然后具体的数据结构下在衍生分支。

    作者回复: 算法本身只是一层,不适合再进行领域分层,算法更多是其它具体可落地可应用技术中的一层,例如Redis、Nginx、MongoDB等,这种是可以落地的技术。 你要系统的学习算法,用脑图整理一下就可以了,但这不是领域分层,只是算法知识体系化而已。

  • 杨丁
    2021-06-25
    华哥,可以给出你之前学习Mysql,Linux技术,网络等技术的领域分层图么

    作者回复: MySQL: 1)MySQL 语法(CRUD) 2)MySQL配置 3)数据库优化 4)Innodb存储引擎 5)数据库原理:索引、事务 这类图自己画不难,但是理解比光看别人给出的图会好很多,我建议你自己去画。

  • Geek_3b1096
    2021-04-05
    点赞点赞