This commit is contained in:
louzefeng
2024-07-11 05:50:32 +00:00
parent bf99793fd0
commit d3828a7aee
6071 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,103 @@
<audio id="audio" title="16 | 导学:你应该掌握哪些学习方法?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/5c/fb/5c116ae4fa4b6f120936b5f59f0c63fb.mp3"></audio>
你好,我是华仔。
从今天开始,我们进入到课程的第三部分,学习方法。
我相信绝大部分人都是愿意通过学习来提升自己的,但是在你学习的过程中,肯定会遇到很多困难。比如在之前的课程中,就有同学提出了非常典型的问题:<br>
<img src="https://static001.geekbang.org/resource/image/f1/a1/f1146ee66f4058818cd5676cb889f3a1.png" alt=""><br>
不知道你是不是也有这样的感受:光是上班累得要死,还要陪对象吃饭逛街看电影,或者送孩子去上培训班,根本就没什么时间学习;等到哪天好不容易有点空余时间,又因为没有计划,只能随便找本书或者上网水水论坛看看;就算知道要针对某个技能专门提升一下,也不知道怎么学才能达到精通水平;过段时间回头一看,前几周学的东西又忘得差不多了;跟别人交流一下子就暴露了水平……
其实你遇到的这些学习相关的困难,我在过去的职业生涯中也都遇到过。为此,我看了很多书来学习各种学习技巧,同时我自己也尝试总结了一些更加适合互联网行业的学习技巧。经过多年的实践检验和筛选,我逐步形成了一套系统的学习方法。
现在,我就把这一套方法分享给你,让你能够用最少的时间实现最好的学习效果。
## 指导原则和关键问题
我认为一套系统的学习方法,既需要一个统领全局的宏观指导原则,让人能够一目了然地理解它的核心内容,同时也要能够回答以下四个关键问题:
1. **时间从哪里来?**如果没有足够的时间投入,再好的理论也只是纸上谈兵。
1. **学什么?**找到正确的学习方向,明确了学习的目标,才能做到有的放矢。
1. **怎么学?**不同的学习目的应该有不同的学习方法,保证学习的投入产出比。
1. **怎么保证学习效果?**如何解决“学了用不上,学了就忘”两个常见影响学习效果的问题。
按照这个思路,我将这套学习方法的大纲整理如下,方便你了解。<br>
<img src="https://static001.geekbang.org/resource/image/c8/9b/c8b4b226a23134bd423a75011166189b.jpg" alt="">
接下来,我逐个简要介绍一下。
## 简介
### 指导原则10000小时定律
总的指导原则是10000小时定律它是一个很出名的用于专业领域提升的理论有大量的相关资料可以参考例如《异类》《1万小时天才理论》等其核心思想是如果你想要在专业领域不断提升自己的能力必须投入足够的时间。
### 找时间:海绵学习法
10000小时可不短相当于平均每天3小时持续10年时间。我们平时光是工作就已经“累成狗”了可能还有家人需要照顾怎么才能找到自己的10000小时呢这就要靠海绵学习法了。
海绵学习法是我原创的一个时间管理方法,它可以让你轻松地挤出时间,既不会对工作、家庭和娱乐有明显的影响,又能够兼顾学习。
### 学什么:三段分解法
有了时间之后,我们要学什么呢?怎么才能制定合理的学习目标呢?如何制定可行的学习计划并能够真正落地呢?这就要靠三段分解法了。
三段分解法是我原创的制定学习目标和计划的方法它基于职业等级体系将10000小时逐级分解最终落实到可以实施的各项学习行动。
### 怎么学:链式&amp;环式&amp;比较学习法
确定目标和计划后我们具体要怎么提升技术能力呢在职级详解部分你已经了解到技术能力可以拆解成三个维度技术深度、技术宽度和技术广度。我在第9讲解释过这三个维度的区别。
针对技术能力的不同维度我原创了3个不同的学习方法
- **链式学习法**适合提升技术深度,通过自顶向下逐步深入的方式,将关联技术逐一掌握。
- **比较学习法**适合提升技术宽度,通过比较相似的知识或者技能,全面掌握单个领域的技术。
- **环式学习法**适合提升技术广度,通过学习业务闭环流程中相关技术,全面掌握多个领域的技术。
### 保证效果Play学习法、Teach学习法
就算用对了方法,我们在学习过程中还是会遇到一些难以解决的困难,这些困难会导致我们学习效果不好。
第一个常见困难是,如果平时不学,真正要用的时候又来不及临时学;但如果平时学了,可能要等很久才能在工作找到的实践机会,到时候技术可能都生疏了。
第二个常见的困难是,学完之后感觉学得不深,跟别人讨论的时候,或者在晋升答辩环节被问到的时候,就发现很多东西明明学过,却说不出个所以然来。
针对这两个常见影响学习效果的问题,我通过学习和实践,归纳提炼出如下两种学习方法:
- **Play学习法**可以用来解决工作中暂时没有实践机会的问题,学以致“玩”,通过“玩耍”的方式来应用。
- **Teach学习法**可以用来解决学得不深的问题,教学相长,通过“教学”的方式来加深理解。
## 组合使用
最后,我还想补充一点,这些学习方法是相辅相成的,你可以根据你当前的级别和实际工作内容,把它们组合起来使用,具体的方式如下:
第一步,无论你当前是什么级别,先用“三段分解法”来规划你的学习目标和计划。
第二步,使用“海绵学习法”来找到你可以用于学习的时间。
第三步,根据学习目标采取相应的学习方法。
- 如果你是Java后端P5/P6/P7级别你的技术提升以技术深度为主你可以采取“链式学习法”来学习MySQL以提升技术深度
- 如果你是P7/P8级别除了技术深度外还需要提升技术宽度你可以采取“比较学习法”来学习PostgreSQL、MongoDB和Elasticsearch等存储系统
- 如果你是P8/P9级别你可以采用“环式学习法”来学习跨领域的技能比如学习vue、小程序和人工智能等业务闭环流程涉及的技术领域。
<img src="https://static001.geekbang.org/resource/image/5c/85/5c5c54f21f09yyc7967e7b690028a285.jpg" alt="">
当然并不是说每个级别都只能用指定的学习方法例如Java后端P6/P7的技术人员一样可以使用“环式学习法”从整体上概要地了解前端的基本原理。
第四步采用“Play &amp; Teach学习法”来加强效果。
## 小结
现在,我们总结一下这一讲的重点内容:
1. 一套系统的学习方法既需要一个总的指导原则也需要回答4个关键问题时间从哪里来学什么怎么学怎么保证效果
1. 在我总结的这套学习方法中10000小时定律提供了指导原则海绵学习法解决了时间从哪里来的问题三段分解法解决了学什么的问题链式、环式和比较学习法解决了怎么学的问题Play和Teach学习法解决了怎么保证学习效果的问题。
1. 学习方法是相辅相成的,你需要基于当前的级别和工作内容,把多个方法组合起来使用。
## 思考题
这就是今天的全部内容,留一道课后思考题给你吧。你在学习过程中遇到的最大困难或者困惑是什么?你尝试了什么解决方法呢,效果怎么样?
欢迎你把答案写到留言区,和我一起讨论。相信经过深度思考的回答,也会让你对知识的理解更加深刻。<br>
<img src="https://static001.geekbang.org/resource/image/f8/da/f88ef84d86c7f15f55c3a8a134f01bda.jpeg" alt="">

View File

@@ -0,0 +1,141 @@
<audio id="audio" title="17 | 海绵学习法怎么找到你的10000小时" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/3e/f0/3efba917147274935483c383e7f161f0.mp3"></audio>
你好,我是华仔。
上一讲我简要地介绍了自己总结的一套系统的学习方法,而它的指导原则就是**10000小时定律**。
10000小时定律的走红跟畅销书作家马尔科姆·格拉德威尔Malcolm Gladwell有很大的关系。2008年他在《异类》这本书里介绍了安德斯·艾利克森Anders Ericsson教授的研究成果并提炼出了这个定律要想成功就必须要有10000小时的投入。
## 10000小时定律意味着什么
### 1. 成为专家需要10年
单纯说10000小时我们可能没有一个直观的概念。其实艾利克森在“[The Role of Deliberate Practice in the Acquisition of Expert Performance](https://www.researchgate.net/publication/224827585_The_Role_of_Deliberate_Practice_in_the_Acquisition_of_Expert_Performance)”这篇论文中总结前人的研究成果时,曾经提到过一个**10年定律**
如果一个作曲家从6岁开始练习那么他的第一个成名作品发表时间不会早于16岁如果他从69岁开始练习第一个成名作品会在大约22岁左右发表。
经过学者们的不断研究10年定律已经在不同的领域得到了证实包括音乐、数学、网球、游泳和长跑等。
如果我们把10000小时换算一下就会发现这两个定律基本上是一致的平均一天投入3小时一年投入365天那么10年算下来就是10950小时。
所以10000小时定律意味着**成为某个领域的专家需要花费10年时间。**
### 2. 5000 + 5000 不等于 10000
10000小时定律所说的“成功”或者“成为专家”是指在某一个领域而不是所有领域一通百通。
所以专业聚焦对于10000小时定律的落地非常关键如果你从A领域转行到B领域而它们的差异又比较大的话那么你分别在这两个领域投入的时间是不能累加的相当于以前在A领域的积累被浪费掉了。
换句话说分别在两个不同的领域投入了5000个小时的人才在专业度上比不过专注在某一个领域投入了10000个小时的专家。所以分清楚同一个领域和不同的领域是很重要的。
#### 互联网行业的领域划分
具体说到互联网行业的话,典型的领域划分如下图所示:
<img src="https://static001.geekbang.org/resource/image/c6/ed/c6b6d8e199de8724502684e2ff2c73ed.jpg" alt=""><br>
(注意,这张图并不是完整的领域划分,比如“运营”和“测试”肯定也有各自的子领域,这里为了简洁地描述问题,只展开了“技术-开发-客户端”这条线作为例子。)
从图片中我们可以看到一级领域有产品、运营、技术、项目经理和市场等技术下面的二级领域有开发、测试和运维等开发下面的三级领域有前端、客户端和服务端等客户端下面的四级领域主要是iOS和Android。
一级领域的技术和运营属于两个不同的领域,应该是没有争议的;二级领域的开发和测试属于两个不同的领域,应该也是普遍共识。
但是像前端和客户端、iOS和Android这种它们是分别属于两个领域还是属于同一个领域不同的技能呢人们可能会有不同的意见比如最近几年流行的“全栈开发”就提倡前端、客户端和服务端的开发都要掌握。
那么我们的10000小时到底是投入到哪个级别上才最有效果呢是四级领域iOS还是要在三级领域客户端又或者是二级领域开发呢
我建议在三级领域这个级别进行投入。因为判断是不是同一个领域的方法,就是看**面对的问题和采取的思维方式是否类似**,至于工具本身,并不是区分的标准。
以客户端领域为例无论是iOS开发还是Android开发面对的问题都是如何在移动设备上做好和用户的交互都需要考虑用户交互、App性能优化和App生命周期管理等。
从这个角度来说,客户端和前端其实也可以算同一个领域,因为前端面对的问题和采取的思维方式和客户端其实是类似的。这也是现在很多团队提倡的“大前端”概念的原因,毕竟两者关注的都是“用户体验和交互”这个领域。
但是服务端就很难和客户端归为同一个领域因为这两个领域面对的问题和采取的思维方式都是截然不同的。客户端关注的是用户体验和交互服务端关注的数据处理和系统架构。这就和跑步很像短跑名将博尔特可以参加100米、200米和4*100米的短跑比赛但是他不会参加5000米或10000米的长跑比赛。
在互联网行业发展明确领域的边界非常关键。因为这将影响你的发展路线是在某个领域投入10000个小时的专家还是在好几个领域分别投入几千小时的多面手。
虽然多面手可能在某些特定场景下也能够发挥很大的作用,但如果你想在大公司按照职级体系正常发展的话,专注某一个领域往往会更有优势。
当然如果你已经达到了P9以上级别必须要整合跨领域的技术来打造成熟的业务作品那肯定是要在至少精通某一个领域的基础上继续跨领域学习的。
### 3. 工作时间外也要主动提升
刚才我们说到10000个小时相当于连续10年平均每天投入3个小时。
你可能会有问“我每天工作10个小时这样算下来岂不是不到4年就可以成为大牛了
很明显这是不太可能的。原因在于工作中的很多时间都是在做一些重复的事情只是让已经掌握的技能变得更熟练而已边际效益是越来越低的。所以工作1个小时不等于学习1个小时。
这就像你练小提琴每天都只练习《生日快乐歌》这个曲子就算练10年也不可能成为专业小提琴手。你必须先练习某个难度的曲谱熟练后再来练习下一难度的曲谱这样逐步提升难度最终才能成为专业的小提琴手。
同样的道理,如果你想要高效地提升自己,就必须不断地主动学习新的、复杂度更高的技能,等到工作中用得上的时候,抓住机会在实践的过程中练习,获得经验教训,进一步加深对技能的理解和掌握。如此循环往复,一步一步地提升自己的能力。
以我个人的经验来看1天的上班时间大约相当于2个小时的有效提升时间。当然这个数值不是绝对的对于不断拓展创新的工作大于2个小时对于重复性比较高的工作小于2个小时。
因此我建议你除了上班时间外尽量保证每天能够有1个小时的主动提升时间。
平均每天1个小时看起来好像不多但对于大部分人来说是很难做到的。互联网行业的人加班累成狗感觉身体天天被掏空周末又要通过各种娱乐活动放松自己成家的还有家庭要照顾……总之就是感觉钱总是不够时间也总是不够。
很多人面对这种情况干脆就放弃学习了;也有的人意志力强一点,会强迫自己去牺牲休闲娱乐的时间投入到学习中,但他们也很难坚持,通常都是三分钟热血,劲头一过就恢复了原样。
## 海绵学习法
那么,怎么解决时间不够这个问题呢?“海绵学习法”就是针对性的解决方法。
我把这个方法取名为“海绵学习法”,其实是借用了鲁迅的名言——“时间就像海绵里的水,只要愿意挤,总还是有的。”
海绵学习法的关键就是“挤时间”。它既不需要我们放弃所有的休闲娱乐,也不需要在累成狗的时候强行“打鸡血”逼着自己去学,而是让我们通过长期坚持的方式,达到“积少成多、聚沙成塔”的效果。
下面,我们来就看看日常工作和生活中,有哪些地方可以挤出时间来学习。
### 早晨30分钟
首先我们可以把起床的闹钟提前30分钟比如原来07:30的闹钟可以改为07:00。不用担心提前30分钟起床会影响休息质量习惯以后早起30分钟不但不会影响一天的精力甚至可能反而让人更有精神。
早起的时间可以用来看书30分钟基本上足够看完一本书的一个章节了。
### 通勤2小时
然后是通勤大城市的上班通勤时间在1个小时左右每天往返就有2个小时了。
你可以根据通勤方式选择对应不同的学习方式。如果做公共汽车或者自己开车上下班,可以听书籍和线上课程的音频;如果坐地铁,除了听音频,也可以看电子书和线上课程,要是有座位,还可以看纸质书。
### 上班第一个30分钟
刚到工位的第一个30分钟或者开完晨会后的30分钟这时候一般也没什么会议也很少有人来打扰大脑又是最活跃的时间所以学习的效果非常好。
不用担心这30分钟会影响项目进度一天当中总会有其他事情浪费30分钟以上的时间比如不必要的会议、低效的沟通、玩手机摸鱼等。如果担心影响项目进度你可以在别的事情上提高效率。
### 睡前30分钟
大部分人在睡前都会进行一些休闲娱乐活动来放松自己比如玩游戏、追剧、看电影、刷短视频等。对于忙碌了一天的劳动者来说适当的放松是必不可少的我们不必完全放弃这些活动只需要从中挤出30分钟就行了。
比如少玩2局王者荣耀30分钟就挤出来了从整个赛季来看完全不会影响你的段位少看一集电视剧也能够节省30分钟以上的时间至于少刷30分钟的短视频就更加没什么影响了。
### 周末2小时
大部分人周末都会安排一些耗时很长的活动比如购物、逛街、聚会、看电影、旅游和睡懒觉等。只要你有意识地挤时间很容易就能挤出2个小时比如购物、逛街和聚会的时候控制时间、早点回去减少一些“无效社交”的时间旅游的时候做好时间规划本来准备睡10小时懒觉改为睡9小时……
### 关键还是意志力
这些方法对你原来的工作和生活影响很小但只要长期坚持积累的时间规模和个人的成长速度都是非常可观的。我通过这种方式一年阅读的非技术书籍可以达到80本以上技术相关的书籍可以达到20本以上。
当然,这些方法仍然需要我们稍微克服一下人性的弱点,只是用不着“头悬梁锥刺股”这样夸张而已。但是如果你连少打一局游戏、少刷一集剧这样的意志力都没有,那么无论多么有效的方法对你来说都是没有意义的。
## 小结
这一讲我跟你分享了如何将10000小时定律具体落地的第一个关键方法海绵学习法。通过海绵学习法我们可以做到既不对工作、家庭和休闲有较大影响又能够保证足够的时间来提升自己。
现在,我们回顾一下这一讲的重点:
1. 按平均每天投入3小时计算10000小时定律意味着成为某个领域的专家需要花费10年时间。
1. 不同的领域,面对的问题和采取的思维方式也不同,投入的时间是不能叠加的。
1. 上班时间不能直接等价为有效的提升时间我们每天下班后还应该主动投入1个小时来学习。
<li>海绵学习法不需要完全放弃休闲娱乐也不需要强行打鸡血只需要稍微克服一下人性的弱点长期坚持积少成多。挤时间的来源包括早晨30分钟、通勤2小时、上班第一个30分钟、睡前30分钟和周末2小时等。<br>
<img src="https://static001.geekbang.org/resource/image/9d/b5/9d9e58c0c74b1ded3e7de3bcac23b6b5.jpg" alt=""></li>
## 思考题
这就是今天的全部内容,留一道课后思考题给你吧。分析一下你目前每天的时间分布,你觉得自己可以从哪些地方挤时间?大约能挤出多久?
欢迎你把答案写到留言区,和我一起讨论。相信经过深度思考的回答,也会让你对知识的理解更加深刻。<br>
<img src="https://static001.geekbang.org/resource/image/ed/43/edc45790aea57e5534a04366cd7d5143.jpeg" alt="">

View File

@@ -0,0 +1,108 @@
<audio id="audio" title="18 | 三段分解法怎么利用10000小时成为大牛" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/9f/70/9f2b1c7yy5c90d7c5886d26b26704e70.mp3"></audio>
你好,我是华仔。
10000小时定律虽然理论上很简单但真正要落地实行也并不那么容易。上一讲我介绍了怎么通过海绵学习法来获取你的10000个小时但是就算有了时间你也很难十年如一日地坚持学习。
能否坚持当然要看你对自己的事业是否有“激情”。但如果只靠激情来支撑持续10年依然是一个很大的挑战。因为我们的大脑在进化的过程中已经形成了需要不断的正反馈才能保持兴奋的机制也就是说与其在第10年给一个大奖励还不如每个月都给一个小奖励。所以除了激情你还需要“先定一个能达到的小目标”。
那么具体要怎么制定小目标呢这一讲我就为你介绍一个三段分解法带你把“10年成为大牛”这个大目标分解成一个个可以在短期内达成的小目标。
## 第一段:分解“等级”
第一段分解,是在当前状态和最终的目标状态之间,分解出中间的等级。
10年成为大牛这个目标虽然比较长远比较宏大但并不意味着在成为大牛之前我们一直停留在菜鸟阶段原地踏步。在菜鸟和大牛之间其实有几个关键的里程碑这些里程碑就是中间的等级。
大部分的专业领域都有比较正式的等级划分标准例如钢琴专业从1级到10级跆拳道从白带到黑带。对于互联网的领域来说虽然没有通用的专业等级标准但不同的公司都会有类似的职级体系你可以直接以公司的职级体系来划分中间等级。
以跨越式职级为例从P5到P9你经历的等级包括以下这些
1. P5职场新手工作13年需要别人带你完成任务。
1. P6项目能手工作35年能够独立完成任务。
1. P7团队专家工作48年能够带领小团队实现目标。
1. P8领域专家工作8年以上能够带领多个团队实现目标。
1. P9业务导演工作10年以上能够导演成熟落地的作品。
我们可以看到虽然说至少10年才可能成为P9这个级别的大牛但是你3年就可以达到P65年就可能达到P78年就可能达到P8在这个过程中你一直在成长和提升早就不是当初的菜鸟了。如果对你来说不是非得赚它一个亿才算小目标那么你已经可以活得比较滋润了。
分解出中间的各个等级之后,我们核对一下自己目前所处的位置,然后瞄准下一个最近的等级,继续第二段的分解。
## 第二段:分解“技能”
虽然朝下一个等级努力的时间是23年跟10年比起来已经缩短了不少但是这个时间还是比较长的。为了更好地利用这23年时间我们需要进一步分解。
第二段分解的目标就不是等级了,而是技能,也就是为了达到下一个等级的要求,你需要针对哪些技能做专项提升。
如果你所在的公司已经有成熟的职级体系,你可以参考[第5讲](https://time.geekbang.org/column/article/317086)的COMD能力模型整理出当前级别和下一级别的能力要求矩阵这样就可以一目了然地看出具体的能力差距项有哪些了。
如果你所在的公司目前没有成熟的职级体系,或者你准备跳槽到某个心仪的公司,你也可以采取一个取巧的方式来明确能力项差别,这就是直接查看公司的招聘要求。
以阿里巴巴招聘网站上的“Java开发专家”这个职位为例[招聘要求](https://talent.alibaba.com/off-campus-position/633530?spm=a1z9iw.13825095.0.0.58093ae746s7pt)如下:
<img src="https://static001.geekbang.org/resource/image/90/32/904733c50a83c0a96075fbeb4b025a32.jpg" alt="" title="引自阿里巴巴集团招聘网站">
可以看到“Java开发专家”对标阿里P7要求的技能包括Java、Spring、SOA、MySQL、Hibernate和Linux/Unix等。多查看一些类似的职位描述不同公司、不同业务线你就能获得“Java开发专家”的大概要求的技能范围。
但实际上真实的技能要求会比职位描述更加细致比如“熟练掌握Java编程技术”到底意味着什么职位描述是不会写得特别清楚。我个人的习惯是将这些要求整理为一个思维导图详细列出每个技术点。
<img src="https://static001.geekbang.org/resource/image/67/b9/679bf5c13a2be7a5636d39855b3fd2b9.jpg" alt="">
注意这张图只是一个示例并不是说所有Java开发专家都一定是这个要求比如互联网行业和电信行业的要求就不一样你需要根据自己的行业和技术方向整理出适合自己的思维导图。
有了这样一个思维导图后,我们就可以开始真正进行第二段分解了。分解的方法很简单,**哪里不懂补哪里!**比如你感觉自己现在的数据库水平很一般只会写CRUD语句其他的东西都不懂那么你就专攻数据库这一部分通过一段时间的专项提升来拿下这个技能。
**专项提升某个技能的持续时间既不能太短也不能太长一般建议在6个月左右。**
时间太短容易陷入为了“完成任务”而去学的误区没有真正得到有效提升。例如我曾指导一个下属学习MySQL结果他就看了几个PPT就说自己学完了其实还远远没有熟练掌握MySQL相关技能。
时间太长的话其他技能就来不及提升了要是你2年时间都用来提升数据库那操作系统怎么办网络怎么办所以6个月为一个周期基本上刚刚好。
举个例子如果你目前岗位是Java后端开发级别是P5如果晋升到P6需要掌握数据库、Linux操作系统、网络编程的技术最终的二段目标分解如下
1. 2021.012021.06:提升数据库水平
1. 2021.012021.06提升Linux水平
1. 2021.062021.12:提升网络和网络编程水平
当然二段目标的提升顺序并不是一成不变的很多时候你还需要根据工作内容进行调整。比如主管最近正好安排你来负责优化系统性能降低机器负载那么你完全可以把“提升Linux水平”挪到“提升数据库水平”之前。
## 第三段:分解“行动”
第二段分解之后我们得到了6个月左右的技能提升目标接下来要做的就是通过第三段分解将技能提升目标分解为具体要做的事情然后按照计划执行。
比如说你的二段目标是“提升Linux水平”。那么怎样才能提升呢你可以上网搜索知乎是个好地方也可以去问有经验的朋友把二段目标细化为12个月的三段目标。
以我刚加入UC的情况为例之前我在华为的时候是在Windows平台上用VC6进行开发而到了UC之后是在Linux平台上用C++开发。所以我当时就确定了“提升Linux水平”这个目标然后通过上网查、找别人问等方法最终将这个目标分解为4个行动
1. 1.5个月通读《UNIX环境高级编程》
1. 1.5个月通读《Linux系统编程》
1. 2个月通读《UNIX网络编程 卷1》
1. 1个月Linux常用命令实战包括tcpdump、ps和top等
把6个月的技能提升目标进一步分解成12个月的具体行动目标之后实施起来就简单多了。我每12个月只需要专注做好一件事每次完成后都很有成就感既感觉自己的水平有了提升又佩服自己能够坚持按计划完成任务。这样的双重激励让我更有动力去完成下一个目标。
当然,**在具体落地的时候,你还需要进一步分解到周**,比如下周看完某本书的哪几个章节。但是在做计划的时候,我建议你先分解到月就可以了,因为一开始就直接分解到周还是比较耗费时间的,而且如果出现计划之外的事情,调整计划本身花费的时间和精力成本也比较高。
最后我大约花了2年的时间将Linux、网络和MySQL三个重点技能从一无所知提升到高级的水平。很多同事都问我之前在华为是不是就是做这方面的因为他们觉得短时间能达到这个水平是不太可能的。
## 小结
这一讲我跟你分享了三段分解法。虽然我举的例子都是技术领域的,但是这个方法在其他很多领域也都适用,比如说产品和运营等。
通过这个方法,你可以把宏大的目标逐步分解成可以落地的日常行动,一边“仰望星空”,朝着最终的方向前进,一边“脚踏实地”,一步一个脚印地去实现它。
现在,我们再回顾一下三段分解法的要点:
1. 第一段是分解等级参考专业领域的等级划分标准或公司的职级体系在当前状态和大牛之间划分出35个中间等级把10年的宏大目标分解成23年的一段目标。
1. 第二段是分解技能参考COMD能力模型和招聘网站的职位描述整理下一个等级的技能需求列出自己需要重点提升的35个技能点把23年的一段目标分解成6个月左右的二段目标。
1. 第三段是分解行动参考同行在网上发布的经验和朋友的建议确定提升单项技能的35个具体行动把6个月左右的二段目标分解成12个月的三段目标。
1. 虽然最终执行计划的时候要落实到周,但是制定计划的时候分解到月就行了,这样做的好处是,计划调整起来更加方便灵活。
<img src="https://static001.geekbang.org/resource/image/40/92/401bef01f6c51a5a3903f0a6296e6992.jpg" alt="">
## 思考题
这就是今天的全部内容留一道课后思考题给你吧。以后端Java开发为例P5/P6/P7/P8都有“Java编程技术”的相关要求那我们为什么不在P5的时候就安排时间全部学完彻底掌握这项技术呢
欢迎你把答案写到留言区,和我一起讨论。相信经过深度思考的回答,也会让你对知识的理解更加深刻。<br>
<img src="https://static001.geekbang.org/resource/image/cb/63/cb6b68a09f3be4e632e80ea5c9d70063.jpeg" alt="">

View File

@@ -0,0 +1,251 @@
<audio id="audio" title="19 | 链式 & 比较 & 环式学习法:怎么多维度提升技术能力?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/29/a8/29a6bb397d6d81d7e3e09a8fbabe39a8.mp3"></audio>
你好,我是华仔。
上一讲我介绍了三段分解法教你把“10年成为大牛”这个宏大的目标分解成12个月的可落地计划然后再按周来执行实际的行动。
但是,不同级别的**核心要求**是不一样的,晋升时评委的**考察重点**也不一样,所以在成长过程中,我们主要提升的**技术维度**也在发生变化。
一般来说P5/P6/P7主要提升**技术深度**P7/P8主要提升**技术宽度**P8/P9主要提升**技术广度**。(我在[第11讲](https://time.geekbang.org/column/article/323388)和[第16讲](https://time.geekbang.org/column/article/328359)分别以前端和Java后端为例解释了这三个维度的区别。
这三个不同的技术维度,分别适合用不同的方法来提升,这一讲我就会为你一一介绍,让你的学习更有针对性,在回答晋升评委提问的时候也能做到游刃有余。
## 链式学习法:提升技术深度
提升技术深度,最好使用**链式学习法**。
如果你参加过晋升答辩,一定经历过评委的“追命连环问”,比如:
1. 你在讲解PPT的时候提到某个项目使用了Netty技术评委首先会问你Netty的一些技术点
1. 当你回答说Netty的本质是Reactor网络模型时评委又会问你Reactor网络模型的原理
1. 当你回答说Reactor的基础是Java NIO的时候评委又会问你Java的NIO/BIO的技术细节
1. 当你回答说Java的NIO在Linux平台上是基于epoll来实现时评委又问你Linux的epoll/select等的原理。
……
面对这种“打破砂锅问到底”的方式,如果平时没有充足的准备,你很可能会卡住。
所谓“链式学习法”,顾名思义,就是学习的过程好像从水里拉起一根链条,拉出一环后面又接着一环,最后将整个链条全部拉出来。
当知识联结成锁链,**环环相扣**,你对技术的理解就很透彻,评委问到底,你就能答到底。
但是知识的锁链不是胡乱连接的,环环相扣的方式很有讲究。常见的方式有两种:
第一种是**自顶向下、层层关联**,打通一项技术的领域分层。
第二种是**由表及里、层层深入**,打通一项技术的细节分层。
以Netty网络编程为例相关领域一共可以分为6层要么上层依赖下层比如Netty依赖Java网络编程Java网络编程在Linux上又依赖Linux提供的网络编程接口要么下层是上层的应用和实现比如TCP/IP是原理而Linux网络调优和工具是TCP/IP的具体应用。它的领域分层图如下所示
<img src="https://static001.geekbang.org/resource/image/54/57/548db8fba0254d6d7886b906b8677c57.jpg" alt="">
注:
1. 以上图示仅为示例你需要根据自己的实际工作情况来分析。如果你是在Windows平台上做开发那么上图“操作系统”这一层就要改为“Windows网络编程”“工具&amp;配置”这一层就要改为“Wireshark”之类的。
1. 具体分层关系并没有业界统一的标准,比如“工具&amp;配置”这一层,如果你认为应该放在“计算机网络”那一层的上面,其实也是可以的。
同样以Netty网络编程为例技术细节可以分为4层它的细节分层图如下所示<br>
<img src="https://static001.geekbang.org/resource/image/23/42/23bc815ee7bee6ed03493bbdec0a9842.jpg" alt="">
### 链式学习法的步骤
链式学习法的第一步,就是要**明确一项技术的深度可以分为哪些层**。
具体来说,就是画出“领域分层图”和“细节分层图”。一开始你可能会觉得画不出来,这恰恰说明你对深度的理解还不够,而尝试画图本身就是一个梳理结构、强化认知的过程。
画出了两张图之后,第二步就是要**明确你自己要学到哪一层**。
学得太浅达不到提升深度的目的学得太深又会耗费太多的时间和精力。以Netty网络编程为例从我自己实践和指导别人的经验来看领域分层图的6层不用都学大部分人学个35层就够了不过细节分层图的4层还是建议你每一层都学。
确定学到哪一层之后,第三步就是要**明确每一层应该怎么学**。
在领域分层图中,越往上越偏应用,实际工作中用得越多,越往下越偏原理(包括相关的工具和配置),实际工作中用得越少。所以总的原则是,在上层投入更多时间,更关注细节和熟练使用,在下层投入相对少的时间,更加关注原理和简单应用。
比如对于Netty网络的领域分层图如果你不是Netty项目的开发人员而是只想使用Netty来搭建自己的系统那么“Linux网络编程”这一层你只要掌握select/epoll等技术原理和优缺点就行了epoll提供的API你有时间可以大概看看没时间不看也可以但是对于Netty本身提供的API则是越熟练越好。
在细节分层图中,你需要详细地学习每一层。要注意的是,对于“实现源码”这一层,你不需要去掌握每一行源码,只要掌握关键源码就行了,也就是和设计原理以及设计方案相关的源码。
### 链式学习法的优点
链式学习法主要有两个优点:
**1. 促使我们主动提升**
大部分人在实际工作中很多技术都只接触到了领域分层图和细节分层图中的前2层没有进一步地去了解。
而如果采用链式学习法,你就会意识到,使用一项技术完成了工作,并不意味着你就完全掌握了这项技术。你还需要把刚刚自己用到的技术作为切入点,画出完整的领域分层图和细节分层图,然后逐一攻破,这样才能提升深度,达到精通水平。
**2. 将知识和技能系统化**
明确知识和技能点之间的关联关系,有助于更好的理解和应用这些知识和技能。
例如如果我们要在Linux平台上基于Netty开发并发10万连接的高性能服务器既要深入掌握Netty的技术细节又要深度掌握领域深度相关的技术包括
- Netty技术细节需要设置Netty的相关参数ChannelOption.SO_BACKLOGChannelOption.TCP_NODELAYChannelOption.SO_REUSEADDR等
- Java网络编程调试的时候需要知道Java的网络编程API等等。
- Linux网络工具需要使用Linux网络工具定位问题。
- Linux操作系统配置需要修改Linux的最大文件句柄数、需要优化Linux的TCP/IP参数net.ipv4.tcp_tw_reusenet.ipv4.tcp_keepalive_time等
只有使用链式学习法,你才能系统地了解到这些关联的知识和技能,以及如何将它们串起来。
### 链式学习法小结
现在,我们回顾一下链式学习法的重点:
1. 链式学习法是让知识形成锁链,环环相扣,主要用来提升技术深度。
1. 链式学习法的步骤包括:明确一项技术的深度可以分为哪些层,明确要学到哪一层,明确每一层应该怎么学。
1. 链式学习法的优点有:促使我们主动提升,将知识和技能系统化。
## 比较学习法:提升技术宽度
提升技术宽度,最好使用**比较学习法**。
如果你有过晋升P7或者更高级别的经历肯定被问到过大量跟“Why”有关的问题比如
1. 为什么选择Redis为什么不用Memcache
1. 为什么选择MySQL而不是Redis
1. 选择Flink的理由是什么除了Flink本身的技术特点外还需要你回答为什么选择Flink而不是Spark或者Storm。
……
这些问题大部分都是考察你思考、判断和决策的逻辑和过程。如果你只有技术深度而没有技术宽度,这时就会陷入窘境:单个技术细节你都很熟悉,但是却无法解释为什么用这个,而不用那个。
所谓比较学习法,就是**横向比较**同一个领域中类似的技术,梳理它们异同,分析它们各自的优缺点和适用场景。
这样你就能加深对整个领域的理解,评委问的每个为什么,你都能回答得有理有据。
### 比较学习法的步骤
比较学习法的具体操作步骤如下:
1. 先用链式学习法掌握某个领域的一项技术,将这个领域的关键技术点整理成表格。
1. 基于整理好的技术点,学习这个领域的另一项技术,将它们在技术点上的差异整理成思维导图。
1. 找出差异较大的技术点,将背后的原理和对应用场景的影响整理成表格。
接下来我以缓存领域的Memcache和Redis为例说明一下比较学习法的用法。
1. 先用链式学习法掌握Memcache技术整理出缓存领域的6个关键技术点。
<img src="https://static001.geekbang.org/resource/image/eb/c2/eb3df4f69971911d36ddb0d567acbdc2.jpg" alt="">
1. 基于这6点快速掌握Redis技术整理出Memcache和Redis在这些点上的差异。
<img src="https://static001.geekbang.org/resource/image/9e/b8/9e0d6028ce907c18899f07499f697cb8.jpg" alt="">
<li>找出差异较大的技术点,包括并发方案、数据结构、高可用和持久化,整理出它们背后的原理和对应用场景的影响。<br>
<img src="https://static001.geekbang.org/resource/image/db/b6/db62d4f4f8f194cdc5fe895f2da69ab6.jpg" alt=""></li>
注:表格内容仅为示例,实际内容不止这么多,如果你有兴趣,可以上网搜索或者自行补充完整。
### 比较学习法的优点
比较学习法主要有三个优点:
**1. 学得快**
同一个领域的技术在功能上大都是类似的区别往往在于实现方案和细节。所以当你掌握了一项技术之后再去同一个领域的另一项技术就不需要从0开始了因为基础的部分你已经学会了只要重点关注它们的差异点就能够快速掌握。
**2. 学得全**
整理关键技术点和制作思维导图的过程,会促使你把一个领域的技术体系化,更全面、更系统地掌握这个领域。
**3. 学得深**
从差异点到背后的原理再到应用场景的思考过程,会让你对技术的取舍之道理解得更深,在每一次技术选择时都能给出让人信服的理由。
### 比较学习法小结
现在,我们回顾一下比较学习法的重点:
1. 比较学习法是横向对比,让选择有理有据,主要用来提升技术宽度。
1. 比较学习法的步骤包括:整理领域关键技术点,整理不同技术的差异点,整理差异点背后的原理和对应用场景的影响。
1. 比较学习法的优点有:学得快,学得全,学得深。
## 环式学习法:提升技术广度
提升技术广度,最好使用环式学习法。
很多人一听要提升广度,就以为学得越多越好,想到什么牛就学什么,看到什么热就追什么。学了一段时间,感觉学了很多,但好像啥也不会,网撒得很广,却没捞到几条鱼。
所谓环式学习法,就是构建一个完整的闭环过程,将多个领域的“鱼”一网打尽。
技术上常见的闭环是**功能环**代表某个功能的处理过程。以一个最简单的“用户登录”为例如果它的实现方式是前端在手机App上用做登录页面后端用了微服务架构来存储那么就可以构建这样一个功能环
<img src="https://static001.geekbang.org/resource/image/c7/53/c760fcec2b2f8143c173d5460849e053.jpg" alt=""><br>
注意:
1. 上图仅为示意,你可以根据实际情况自己完善,比如拆分为更多环,或者每个环增加更多的技术点。
1. 上图我是用PPT画的你也可以根据自己的喜好采用其他画图工具比如UML类工具。
这里要说明一点,环式学习法更加适合**业务系统相关**的技术人员,而不太适合**中间件**(数据库、缓存、消息队列和服务中心等)相关的的技术人员,因为中间件的技术更加专注于深度和宽度,和具体的业务关系不大,对技术广度的要求并不高。
当然如果你已经达到了P8+/P9这个级别无论什么领域都可以采用环式学习法来学习跨领域的技术。
除了功能环以外,还有很多构建闭环的思路,比如业务上常见的“业务环”,它代表某个业务的处理步骤,以及管理上常见的“流程环”,它代表某件事情的处理步骤。
所以,环式学习法不但可以用来提升技术广度,也可以用来提升业务能力和管理水平。
### 环式学习法的步骤
环式学习法的第一步,就是**把闭环画出来**。
具体的画法是将完整的闭环分为几个关键的环节,然后标出每个环节的关键内容。
就拿“用户登录”这个功能环来说它可以分为前端、客户端、网络层、机房入口、Nginx、用户中心、安全中心和数据中心总共8个环节每个环节又会涉及不同的技术比如客户端涉及JsBridge和OkHttp用户中心涉及微服务、MySQL和Redis等总共涉及的技术有18项。
通过这么一个简单的功能环,你就可以看出技术广度的边界和范围;而且这些技术都是业务上实际用到的,你完全不用担心自己是没有目的地乱学。
环式学习法第二步,就是**由近及远,逐步攻克闭环上的各个节点**。
就算是同一个闭环不同领域的人学习顺序也是不同的。还是以用户登录这个功能环为例前端的人先需要学客户端的JsBridge和OkHttp等知识然后再去学服务端相关的知识而服务端用户中心的人需要先学Nginx和安全中心相关的知识之后再逐步扩展到客户端和前端。
通常来说,职业等级越高,技术广度的要求也越高,所以功能环上要求掌握的相关技术也越多。
对于单个技术你还是需要用链式学习法来学习但是因为数量太多全部严格按照链式学习法的要求来学是不太现实的。我的建议是可以先不去研究源码只要学习接口设计、设计原理、设计方案这3层就行了在合适的时候或者有时间的时候可以看看核心源码加深理解。
### 提升业务能力也很重要
很多技术人员有一个误区,认为业务设计是产品经理的事情,产品经理设计好了,技术人员再把自己负责那部分做好就行了。
这种想法会让你在工作中非常被动,而且可能吃大亏。常见的吃亏场景包括:
1. 讨论需求的时候,因为不懂业务,就算产品的业务需求不合理、实现代价很高,你也发现不了。结果到了设计甚至是编码阶段,你才发现自己做得累死累活,效果还不好。
1. 处理线上故障的时候,因为不熟悉业务,只能被动接受别人的分析和推断,很容易背锅。
1. 因为不熟悉业务,无法承担整体需求分析和方案设计这种任务,导致个人能力得不到锻炼,失去很多晋升机会。
无论是前端、客户端还是服务端的技术人员,最好都花点时间,通过业务环来了解业务的整个流程。
以下是用户登录的业务环,供你参考。
<img src="https://static001.geekbang.org/resource/image/f5/3d/f577fe775c26ebacdfd4b2f01d14363d.jpg" alt="">
注意:上图仅为示例,省略了很多分支和细节,实际的业务流程图比这个要复杂,你可以直接参考产品经理的需求文档。
### 环式学习法的优点
环式学习法有两个优点:
**1. 培养全局视野**
在画出完整闭环的过程中,你可以端到端地了解全流程涉及哪些系统或者模块,每个模块的关键技术是什么,从而培养出全局的视野和能力。
**2. 避免盲目地广撒网却捞不到鱼**
环式学习法划定的范围是实际工作的闭环,能够形成一套有效的组合拳,而不是东一榔头西一棒槌的胡乱搭配,能够大大提升学习效率。所以你只要对照环来提升就可以了,不用再担心广撒网却捞不到鱼了。
### 环式学习法小结
现在,我们回顾一下环式学习法的重点:
1. 环式学习法是构建闭环,打出组合拳,主要用来提升技术广度。
1. 环式学习法的步骤包括:先把闭环画出来,然后由近及远,逐步攻克闭环上的各个节点。
1. 环式学习法的优点有:培养全局视野,避免盲目地广撒网却捞不到鱼。
<img src="https://static001.geekbang.org/resource/image/09/22/092257f1bfeb40ca2948c3ba708a4d22.jpg" alt="">
## 思考题
这就是今天的全部内容,留一道课后思考题给你吧。在你的面试或者晋升的过程中,有没有因为某个专业方面的问题没答上来而留下遗憾的经历?学完今天的内容后,你觉得可以用什么方式来学习,避免以后再留下类似的遗憾呢?
欢迎你把答案写到留言区,和我一起讨论。相信经过深度思考的回答,也会让你对知识的理解更加深刻。<br>
<img src="https://static001.geekbang.org/resource/image/9b/28/9bdd22f6c05a81abc61f6af57cee2628.jpeg" alt="">

View File

@@ -0,0 +1,171 @@
<audio id="audio" title="20 | Play & Teach怎么摆脱“从入门到忘记”的学习困境" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/01/ab/013f9a9518dcfe611135f38d2a0ddfab.mp3"></audio>
你好,我是华仔。
上一讲我们学到了,针对不同技术维度的学习目标,可以分别采用不同的学习方法。
不过就算你用对了方法,在学习过程中往往还是会遇到一些难以解决的困难,导致学习变成了“从入门到忘记”。
那么,怎么摆脱这种的学习困境,保证学习效果呢?这一讲我会为你介绍两种方法。
## Play学习法
从科学学习的角度来看,**学以致用**的效果是最好的,光学不练学得不深,时间一长可能就忘记了。
但我们在实践中会遇到一个常见的困难,那就是团队当前的工作任务当中并**没有相关的实践机会**。这种情况下,你学习某个技术就会陷入两难的困境:如果学的话,得不到实践,学得不深;如果不学的话,真的要用的时候又来不及了。
这时候怎么办呢?完全放弃肯定是不可取的,因为机会都是留给有准备的人,如果来了一个新的任务正好要用到某个技术,到时候肯定是团队内谁有准备就安排谁,不会等到某个人学习完了再安排任务给他。
所以,我们需要找到一种方法,在暂时没有实践机会的情况下也能学好技术,这就是**Play学习法**。
所谓Play学习法就是**通过模拟实践中的场景来进行学习和训练。**
华盛顿国家儿童博物馆有一句著名的馆训:**What I hear, I forget. What I see, I remember. What I do, I understand.**
Play学习法就是主动创造Do的机会来提升自己对新技能的理解和记忆。
如果你喜欢看动物世界之类的节目,应该有这样的印象:狮子这类肉食动物,在成年以前特别喜欢玩耍打闹,这并不是贪玩,而是在练习捕猎的技巧,为成年后的真实捕猎做好部分准备。
Play学习法就和肉食动物的这种玩耍学习非常像。它的做法比较简单主要分为三个步骤
1. 按照链式学习法的方式学习某项技术。
1. 列举常见的场景,搭建模拟场景。
1. 在模拟场景进行测试、体验和练习。
常见的模拟场景以及相应的作用如下表所示:
<img src="https://static001.geekbang.org/resource/image/db/85/dba92075a01d457d81e28d15fa22c385.jpg" alt="">
Play学习法不但能够让你在没有实践机会的时候也能够比较好地掌握一项技术而且它跟直接在工作中实践的学习方式相比还有一个独特的优势**你可以模拟各种在实践工作中很难出现、但只要出现就可能导致故障的场景。**
比如为了验证ZooKeeper的集群选举功能模拟的时候可以采取拔网线、直接杀进程、删除存储文件等各种非常规的手段。
这些手段在线上运行肯定不敢手动去搞,甚至就算在开发阶段的测试环境中也不敢随便搞,因为一旦搞挂了恢复不了,就有可能导致项目延期,个人会需要承担责任。
而如果采用Play学习法的话我们就可以通过模拟场景来积累相关的经验和技能等到线上真正出现类似问题的时候就能够快速地处理。
Play学习法能够帮助我们更好的学习技术但这并不意味着它能够完全取代工作中的实践工作中的实践仍然是非常重要的提升自己的方式。
这就像小狮子光是通过玩耍打闹,还不能完全熟练地掌握捕猎技巧一样,年轻的狮子刚开始的捕猎的时候,成功率都是很低的。要成为真正的捕猎能手,还需要很多次实战的磨练。
如果说精通一项技术是100分的话通过链式学习法你可以达到60分通过Play学习法你可以达到70甚至80分但如果想达到80分以上实践是必不可少的。
### Play学习法小结
现在我们回顾一下Play学习法的重点
1. Play学习法是通过模拟实践中的场景进行训练。
1. Play学习法的步骤包括按照链式学习法的方式学习某项技术列举常见的场景搭建模拟场景在模拟场景进行测试、体验和练习。
1. Play学习法的独特优势在于可以模拟各种在实践工作中很难出现、但只要出现就可能导致故障的场景。
## Teach学习法
除了缺少实践机会之外,我们在学习的时候还会遇到另一个常见的困难,那就是学得不深,理解不够透彻。
很多人都有类似的经历:自己学习某项技术的时候感觉学的差不多了,甚至都已经在工作中具体实践了,但是一旦跟别人讨论,或者在晋升的时候面对评委的提问,又会感觉很多东西都没有完全掌握。
这种现象背后的原因是每个人的知识和技能都是有一定局限性的不同的人理解会不一样关注点会不一样所以在讨论或者PK的时候自然会遇到各种各样的问题。就算你有实践机会也不太可能一两次就把一项技术相关的知识全部用到总会有认知的盲区存在。
<img src="https://static001.geekbang.org/resource/image/89/c8/8919f65f0b0480yy8a978b7d3c6270c8.jpg" alt="">
我想你肯定不希望自己在晋升答辩的时候连自己熟悉的内容都回答不好。那要怎么办呢Teach学习法就可以帮助你加深理解。
所谓Teach学习法就是**通过教别人来提升自己**。
- 印度有句谚语:**To learnread. To knowwrite. To masterteach.**
- 中国也有一句成语:**教学相长**。
结合这些智慧我们可以总结出学习的四个主要方法Read、Write、Do、Teach。前面介绍的Play学习法是关于Do的而Teach学习法对应的则是Write和Teach。
我之所以把Write也算作Teach学习法的一部分是因为教别人有两种方式一种当面给别人进行培训另一种是写成资料给别人阅读比如书籍和在线课程。
所以Teach学习法包括两种形式写作和培训。
### 写作
很多人一听到“写作”两个字,第一反应就是要有文学天分,自己没有文学天分,所以文章就写不好,这其实是一个很大的误区。
技术文章的写作不是文学创作,不需要优美的文笔和有吸引力的情节,看技术文章的读者关注的也不是文字是否优美,情节是否吸引人,而是讲得清不清楚,讲得对不对。
如果你想写一篇技术文章,但是感觉不知道怎么写,那主要的原因不是不会写文章,而是还没有完整地掌握这个技术,不知道哪些是重点,不了解整个体系,对体系里面的各个部分的协作关系不清楚。
那么,是不是一定要等到把某个技术彻底搞明白后才能动笔呢?其实不需要,因为写作本身就是帮助我们学习和梳理的一个过程。比如我在写《从零开始学架构》这本书的时候,并不是把书中的每个内容都研究得一清二楚了才开始动笔的,而是先有了一个整体的构思,然后在写作的过程中边写边完善,有的内容是突然灵感爆发加上去的。
写作对学习的帮助主要体现在以下两个方面:
**第一,写作有助于系统地整理技术体系。**
当你开始准备写作的时候肯定需要思考整体的结构应该如何设计而这个思考的过程其实就是整理技术体系的过程。比如知名博主程序猿DD的[Spring Boot2.X教程](http://blog.didispace.com/spring-boot-learning-2x/)的结构设计就清晰地反映出了他整理出来的技术体系。
只有当你脑海中形成了完整的技术体系,才能知道应该先讲什么,后讲什么;哪些是重点,哪些可以简单带过;是一篇文章讲完,还是讲一个系列。
<img src="https://static001.geekbang.org/resource/image/6d/8a/6d517e5b88a251d1bd01dbe014ffe38a.png" alt="" title="程序猿DDSpring Boot2.X教程目录部分">
**第二,写作有助于了解细节。**
写作看起来只是把自己知道的东西用文字表达出来,但其实你在写作的时候大脑无时不刻都在思考:
这是什么意思?<br>
这样说对么?<br>
这里要给别人讲么?<br>
为什么要这么说?<br>
怎么样才能表达清楚?<br>
……
所以,写作可以让你主动思考各种细节,一旦发现有疑问的地方,就会停下来去查证和研究。
我在写CAP原理相关的内容之前也觉得自己在这方面已经理解得很清楚了但是真正写的时候看到“All nodes see the same data at the same time”这句话却自然而然地产生了一个疑惑
**通过网络复制总会有时间差就算是1ms差异那也不满足“at the same time”的说法那么这里为什么这么说呢**
经过研究和查证我才了解到这里的说法确实不严谨。第一个原因是在事务执行过程中节点间的数据是不一致的第二个原因是CAP定理是忽略了网络延迟的参考[《CAP 理论十二年回顾:"规则"变了》](https://www.infoq.cn/article/cap-twelve-years-later-how-the-rules-have-changed/))。
等到我在写这一讲介绍这个例子的时候又想到了第三个可能的原因CAP同时也忽略了复制的代价比如将1K数据从A节点传输到B节点B节点将1K数据写入存储也是需要时间的。
当然,绝大部分相关技术在网络上已经有很多文章了,那我们直接搜一篇看不是更香吗?为何非得要自己费时费力来写类似的内容呢?
原因在于当我们看别人写的内容时我们采取的方式其实是“read”能吸收的可能只有3050%而自己写出来的话即使内容是类似的也能够让自己对技术的掌握程度达到6070%。
可是,写作是需要投入时间的。如果每一项技术我们都用写文章的方式来学的话,时间确实会不够用。那么,哪些技术应该自己写文章,哪些技术可以通过看书或者上网搜文章来学习呢?
核心的指导原则就是,**看技术和自己工作的相关度**,对于强相关的核心技术,自己写文章来学;而对于弱相关的非核心技术,可以通过阅读资料来学习。
比如对Java服务端开发来说JVM垃圾回收就是强相关的技术而Linux系统编程就是弱相关的技术而如果是在Linux平台用C/C++开发的话Linux系统编程就是强相关的技术Java的技术就是弱相关的技术。
### 培训
写作的时候,我们没有时间要求,没有现场压力,一句没写好可以重写,今天写不出来可以等到明天再写。
但是培训就不同,培训的时间是有限的,有现场压力,听众可能会提出各种意想不到的问题,所以培训对你的能力要求更高,但是锻炼效果也更好。
首先要完成一场培训你需要写培训材料。培训材料的准备过程就是一个写作的过程写PPT这类培训材料跟写Word文档比起来也更能够锻炼你的总结、归纳和提炼的能力。写作带给你的帮助培训也可以提供。
其次,培训需要你在有限的时间内讲清楚一个主题,你必须对这个主题掌握到一定的程度才可以做到,这就会强迫你去思考跟主题有关的各种信息和可能的问题;
另外,培训过程中,你会和听众进行各种交流,这些交流本身既能够促进你对培训内容的理解,也能够锻炼你的临场反应能力。
除了以上这些作用,培训还有一个好处是其他所有学习方法都不具备的,那就是**为晋升答辩积累现场经验**。
很多人晋升答辩失败临场表现差也是一个重要的原因比如说话紧张讲PPT的时候忘词问答的时候没有听明白评委问题就急于回答等等。
有的人归结于自己天生口才不行心理承压能力太差其实没有那么严重毕竟晋升答辩不是TED演讲评委也不是来看脱口秀的。答辩的临场表现不过关主要还是因为平时缺少训练。
我之前带团队的时候对于手底下准备申请晋升的人我基本上都会强制要求他们做几次培训。通过这种方式训练34次以后他们就很少在答辩的时候出现因为表达和临场发挥的问题而失败了。就算还是有一点点紧张但因为之前通过培训锻炼了心理素质所以不会影响到答辩效果。
### Teach学习法小结
现在我们回顾一下Teach学习法的重点
1. Teach学习法是通过教别人来提升自己。
1. Teach学习法包括两种形式写作和培训。
1. 写作有助于系统地整理技术体系和了解细节。
1. 培训具备写作的优点之外,还能够强迫你去思考跟主题有关的各种信息和可能的问题,促进你对培训内容的理解,锻炼你的临场反应能力,为晋升答辩积累现场经验。
<img src="https://static001.geekbang.org/resource/image/c8/37/c895a84fd184575yya13b05fed31ac37.jpg" alt="">
## 思考题
这就是今天的全部内容,留一道课后思考题给你吧。你是否有过“从入门到放弃”的学习经历?你觉得主要原因是什么?是否可以应用这一讲的哪个方法来改进?
欢迎你把答案写到留言区,和我一起讨论。相信经过深度思考的回答,也会让你对知识的理解更加深刻。<br>
<img src="https://static001.geekbang.org/resource/image/0f/ee/0fd7588e4829d1f39f833a7yy918fdee.jpeg" alt="">