|
1 |
| -开始之前,我希望大家都能够先花两分钟认真看完以下三个问题 |
2 |
| -因为只有理解了我们为什么要学习源码,那么,后续的文字才会是有感情的 |
| 1 | +本文作为Vue3源码系列的开篇词,以问答形式来诠释为什么程序员要学习源码 |
3 | 2 |
|
4 |
| -## 1. 为什么要学习源码 |
| 3 | +### 1. 为什么要学习源码 |
5 | 4 |
|
6 |
| -### 阅读优秀的代码的目的是让我们能够写出优秀的代码 |
| 5 | +#### 阅读优秀的代码的目的是让我们能够写出优秀的代码 |
7 | 6 |
|
8 | 7 | 其实就跟我们写作文一样,你看的高分作文越多,写出高分作文的概率就越大
|
9 | 8 |
|
10 |
| -大部分程序员都只会写代码(改,抄,简称: `stackoverflow`工程师),会阅读代码的很少,为什么呢?因为国内所有的教育,网课,培训都没有教你怎么去看代码,只教你怎么去写代码 |
| 9 | +大部分程序员都只会写代码(改,抄,`stackoverflow`工程师,代名词: 搬砖),会阅读代码的很少,为什么呢?因为国内所有的教育,网课,培训都没有教你怎么去看代码,只教你怎么去写代码 |
11 | 10 |
|
12 |
| -再者基于现在的程序员工作模式(模块化开发,只需要拿到需求做自己的部分),别说看源码,甚至就连项目里的代码都懒的看,我认识的很多程序员就是这样的,一个项目摸了两三年,你要问他项目中`webpack`都干了哪些事情,他的回答是不知道,并且告诉你,那些他从来都用不上,是他们`TD`负责的 |
| 11 | +再者基于现在的程序员工作模式(模块化开发,只需要拿到需求做自己的部分),别说看源码,甚至就连项目里的代码都懒的去看,我认识的很多程序员就是这样的,一个项目摸了两三年,你要问他项目中`webpack`都干了哪些事情,他的回答是不知道,反而趾高气扬的告诉你,那些他从来都用不上,看了也没什么用,也看不懂,这里省略内心千字脏文 |
13 | 12 |
|
14 |
| -阅读代码其实就咱们跟阅读一本小说一样,看过玄幻小说才能说出来修仙,看过都市的才能讲出来穿越,阅读主要目的是为了帮助我们积累素材,不要书到用时方恨少,看到美女我们应该能有一万种词语形容她,气若幽兰,美艳不可方物,一笑倾城,再笑倾国,而不是简短的两个字,我艹,美女! |
| 13 | +阅读代码其实就咱们跟阅读一本小说一样,看过玄幻小说才能说出来修仙,看过都市的才能讲出来穿越 |
15 | 14 |
|
16 |
| -- 那么为什么非要看源码呢? |
| 15 | +**阅读主要目的**是为了帮助我们**积累素材**,不要书到用时方恨少,看到美女我们应该能有一万种词语去形容,如气若幽兰,美艳不可方物,一笑倾城,再笑倾国,世间尤物,而不是简短的几个字,我艹,美女! |
17 | 16 |
|
18 |
| -前面有提到优秀的高分作文看多了你才能写出来高分作文,你天天看着0分作文,那么写出来的也自然是0分作文,什么样的作文是高分呢?这个很好区分,前期从众就好 |
| 17 | +- 那么为什么非要看源码呢? |
19 | 18 |
|
| 19 | +前面有提到优秀的高分作文看多了你才能写出来高分作文,你天天看着0分作文,那么写出来的大概率也自然是0分作文,什么样的作文算是高分呢?这个很好区分,前期从众就好 |
20 | 20 |
|
21 |
| -### 不给自己设限,不要让你周围人的技术上限成为你的上限 |
| 21 | +#### 不给自己设限,不要让你周围人的技术上限成为你的上限 |
22 | 22 |
|
23 | 23 | 很多时候,人会潜意识给自己设限
|
24 | 24 |
|
25 |
| -井底之蛙是大家应该都熟悉的故事,大多数时候我们会给自己画一个圈,将同事的技术跟自己的技术做对比,或者将`TL`的技术跟自己做对比,经常有人向我吐槽说,同事的技术不如他为什么工资比他高,`TL`的技术也不怎么样,为什么能成为`TL`,我现在告诉你为什么,就因为你一直在纠结这样的问题 |
| 25 | +井底之蛙是大家应该都熟悉的故事,大多数时候我们会给自己画一个圈,将同事的技术跟自己的技术做对比,或者将`TL`的技术跟自己做对比,经常有人向我吐槽说,同事的技术不如他为什么工资比他高,`TL`的技术也不怎么样,为什么能成为`TL`,现在给你的回答是,**"因为你以为的并不是你以为的"** |
26 | 26 |
|
27 |
| -我们完全没有必要把时间花费在这种没有意义的事情上面,改变不了环境就改变自己,要学会破圈,为什么总有人说北上广深适合创业,难道是因为这边的风水适合创业?显然不是,在北上广深无非就是让你的人脉更优质一些,上限更高一点,你的圈有多大,未来的想象空间才会更大 |
| 27 | +我们完全没有必要把时间花费在这种毫无意义的事情上面,改变不了环境就改变自己,学会破圈,为什么总有人说北上广深适合创业,因为北上广深的风水爆炸还是空气新鲜?显然都不是,在北上广深无非就是让你的人脉更优质一些,上限更高一点,**你的圈有多大,未来的想象空间才有可能更大** |
28 | 28 |
|
29 | 29 | - 你一直将自己跟同事对比,那么你同事的上限就是你的上限
|
30 | 30 | - 你拿尤大跟自己对比,那么尤大的上限就是你的上限
|
31 | 31 |
|
32 |
| -### 功利性的阅读源码 |
| 32 | +#### 功利性的阅读源码 |
33 | 33 |
|
34 |
| -功利性即指有目的性的,首先你要知道你想得到什么? |
| 34 | +功利性即指有目的性的,明确知道自己干完某一件事后能得到什么样的回报,所以首先你要知道你想得到什么? |
35 | 35 |
|
36 | 36 | 看每一本书都有明确的目的,想学会理财,就得看理财相关的书,想学点技术,就得看点技术相关的书
|
37 | 37 |
|
38 |
| -看源码也是一样,你想看一下`vue.use`后发生了什么,或者是你说现在面试都需要会看源码,你看点源码就是为了面试,这都很好,两个例子功利性都很明显 |
| 38 | +看源码也是一样,你对`vue.use`之后发生了什么比较好奇,或者是你觉得现在面试都需要会看点源码,这都很好,至少你有明确的诉求 |
39 | 39 |
|
40 |
| -凡事只要有了功利属性,才容易走的更远,如果你说现在大家都在看源码,你也想看看,然后一鼓脑扎进去,这个功利性就不明显,你很难坚持下去 |
| 40 | +**凡事只要有了功利属性,才更容易走的下去,否则就是真香警告** |
41 | 41 |
|
42 | 42 |
|
43 |
| -## 2.源码应该怎么阅读 |
44 |
| -### 点对点源码阅读 |
45 |
| -这种情况一般是自己写需求遇到问题了或者突然一时兴起想一探究竟的同学,咱们可以直接粗暴的找到源码的仓库,直接在该仓库搜索该关键字,然后根据模糊搜索的结果再结合自己的理解选择合适的结果,以下以`Vue.use`为例,如下图 |
| 43 | +### 2.源码应该怎么阅读 |
| 44 | +#### 单点突破 |
| 45 | +这种情况一般在是自己写需求遇到问题了,或者突然一时兴起想看看内脏的同学,可以直接粗暴的找到源码的仓库,直接在该仓库搜索关键字,然后根据模糊搜索的结果再结合自己的理解选择合适的结果,以下以`Vue.use`为例,如下图 |
46 | 46 |
|
47 | 47 | 
|
48 | 48 |
|
49 |
| -我们可以看到第一个结果就是`.spec` (Standard Performance Evaluation Corporation,标准性能评估机构bai) 可以直接理解测试代码,优秀的开源代码的标配,直接代表着代码的稳健性 |
| 49 | +我们可以看到第一个结果就是`.spec` (Standard Performance Evaluation Corporation,标准性能评估机构bai) 可以理解为代码的试金石,优秀开源代码的标配,直接代表着代码的稳健性 |
50 | 50 |
|
51 |
| -点进去我们看到的代码如下,从图中我们就能大致的猜到`Vue.use`的一些使用场景及边界值,能看到参数不但可以接收对象还能接收函数 |
| 51 | +点进去我们看到的代码如下,从图中我们就能大致的猜到`Vue.use`的一些使用场景及边界值 |
52 | 52 |
|
53 | 53 | 
|
54 | 54 |
|
|
57 | 57 | 
|
58 | 58 |
|
59 | 59 |
|
60 |
| -### 系统的阅读 |
61 |
| -即指整个项目的源码阅读,这种方式比上面的点对点价值就要大很多,不仅可以知道执行一个Api时具体发生了什么,更重要的能学习到整体的设计思想,架构理念 |
| 60 | +#### 系统阅读 |
| 61 | +即指以项目为维度的源码阅读,这种方式比上面的单点突破价值就要大很多,读完之后,不仅可以知道执行一个Api时具体发生了什么,更重要的是能学习到项目整体的设计思想和架构理念 |
62 | 62 |
|
63 |
| -同时阅读难度也会有相应提高,给你四个建议 |
| 63 | +当然,阅读难度也会有相应提高,这里给你四个建议 |
64 | 64 |
|
65 |
| -- 决心(万事把决心放第一不会错) |
66 |
| -- 对你所阅读的代码框架要有基本的了解 |
67 |
| -- 设定一个计划并自我监督总结 |
| 65 | +- 决心(事事把决心放第一) |
| 66 | +- 对你所阅读的代码框架要有基本的了解(不然你读个啥) |
| 67 | +- 设定一个计划并自我复盘总结 |
68 | 68 | - 循序渐进,任何事情需要一个过程,由易到难,由浅入深
|
69 | 69 |
|
70 | 70 | #### 具体方案
|
71 | 71 |
|
72 | 72 | - 选择合适的工具让代码先跑起来
|
73 |
| -- 理清楚代码组织的关系及用途 |
| 73 | +- 理清楚代码组织关系及用途 |
74 | 74 | - 利用好单元测试
|
75 | 75 | - 利弊权衡(该跳就跳,长期处于蒙的状态很容易走进死胡同,可以标记回头再看)
|
76 | 76 | - 利用搜索引擎(可以结合网上的源码分析资料理解)
|
77 |
| -- 多跟自己交互(多带问题阅读) |
| 77 | +- 多跟自己交互(带问题阅读) |
78 | 78 |
|
79 |
| -## 3.本地怎么调试源码 |
| 79 | +### 3.本地怎么调试源码 |
80 | 80 |
|
81 |
| -科普一下`SourceMap`这个东东吧,分开念`Source` `Map`,一句话理解就是一段维护了前后代码映射关系的`json`描述文件,具体故事可以泡杯茶慢慢讲了,这里不过多描述,感兴趣的自行查阅相关文档 |
| 81 | +科普一下`SourceMap`这个东西吧,分开念`Source` `Map`,一句话理解就是一段维护了前后代码映射关系的`json`描述文件,具体故事可以泡杯茶慢慢讲了,这里不过多描述,感兴趣的自行查阅相关文档 |
82 | 82 |
|
83 | 83 | 有了`sourcemap`文件后,你想`debugger`还是`console`,就可以随意了
|
84 | 84 |
|
|
93 | 93 | 
|
94 | 94 |
|
95 | 95 |
|
96 |
| -### 最后 |
97 |
| -感谢你的坚持阅读,接下来让我们一起遨游在源码的海洋里吧! |
| 96 | +#### 最后 |
| 97 | +接下来让我们一起遨游在源码的海洋里吧! |
98 | 98 |
|
0 commit comments