CategoryResourceRepost/极客时间专栏/设计模式之美/不定期加餐/春节特别加餐 | 王争:如何学习《设计模式之美》专栏?.md
louzefeng d3828a7aee mod
2024-07-11 05:50:32 +00:00

76 lines
10 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<audio id="audio" title="春节特别加餐 | 王争:如何学习《设计模式之美》专栏?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/f9/b3/f9bd9f1a6c1425c60aa72a9b92ddf9b3.mp3"></audio>
你好,我是王争。今天是春节,首先祝你在新的一年,学业进步,工作顺利。放假期间,也不要忘记学习啊!
到此为止,咱们的《设计模式之美》快要更新过半了。很多小伙伴反馈的问题我都看到了。这里我也来讲一下,到底该如何学习《设计模式之美》专栏,才能做到事半功倍、有的放矢?
**《设计模式之美》专栏相对于我的另一个专栏《数据结构与算法之美》来说,内容看似更容易,实际上却更难。**为什么这么说呢?
从我写作的角度来说,《设计模式之美》要更加有难度。因为《数据结构与算法之美》的知识点都比较明确,一篇讲一个数据结构或算法。我只需要把原理、实现讲清楚,再举个实战的例子就基本大功告成了。
但是,《设计模式之美》中的知识点就没那么明确了。每个知识点到底该如何讲,并没有太多的参考。特别是专栏的前一部分,设计原则和思想,我在写专栏的时候参考了大量的书籍和资料。不瞒你说,大部分现有资料都讲得很浅,而且“互相借鉴”的痕迹也很明显。如果你之前对设计原则、思想、模式有所了解,或者看过挺多相关的书籍,应该能发现,我的专栏跟其他书籍的讲解还是有比较大的区别,这其中融入了我很多自己的思考和见解,这也是我的专栏与其他书籍区别最大的地方。
相对应的,从你学习的角度来说,《设计模式之美》也更有难度。它的难跟算法的难还不大一样。算法是原理难、实现难,最后才是应用难。而设计模式正好相反,原理、实现都挺简单的,基本上你一看就会觉得懂了,但是真正的能把它用到项目中,还是比较难的。对于很多人来说,你问他个具体的设计原则、思想、模式的原理和实现,他都能回答得头头是道,但是,在实际的项目开发中,写出来的代码质量还是很差。这种情况出现的原因还是相关的知识点都过于抽象,通俗点讲就是有点“假大空”,不够具体、不太能落地,导致理论和实践容易脱节。
所以,有些小伙伴总感觉《设计模式之美》学起来比《数据结构与算法之美》要简单,容易看懂,实际上这是种错觉。如果你也有这种感觉,那你要警醒了,因为你可能并没有真正读懂专栏的精髓。说了这么多,接下来我就讲讲,我为什么说你可能没有体会到文章的精髓,以及到底该如何来学习这个专栏。
## 1.建立完善的知识体系
你可能已经注意到,虽然这个专栏的名字叫《设计模式之美》,但专栏内容并不局限于此。实际上,整个专栏是围绕着教你如何编写高质量代码来设计的。
在整个专栏中我试图给你建立完善的知识体系所以从内容上来讲涵盖了编写高质量代码的方方面面比如面向对象、设计原则、设计思想、编码规范、重构技巧、设计模式。虽然在有限的100篇文章、50万字内我可能没法儿把每一个知识点都讲解得无比详细、全面但我整理的这份知识框架相当于给你指出了一个深入研究的方向你可以按图索骥积累起来会更快。先建立整体的知识框架再慢慢深入、各个攻破这也是学习任何一门新技术、新知识最有效的方法。
所以,这里给你布置一个小任务,闭上眼睛,想一想整个专栏都会讲哪些内容?已经讲过的设计原则和思想,都讲了哪些内容?你能想起来多少?
## 2.建立代码质量意识
实际上,建立正确的技术认知和技术观,比单纯学技术、学知识点更重要。
我举个例子,专栏中讲到单元测试的时候,并没有讲跟某个测试框架相关的技术点。因为我觉得这些很容易通过看文档学习,而我也不可能写得比文档更全面、更权威。实际上,通过那节课,我想要让你了解的是单元测试的好处,让你真正意识到单元测试的重要性,从心底认可这件事。还有,我在讲到重构的时候,也一直在强调要建立持续重构意识。整个专栏也都是在传递给你代码质量的重要性,让你意识到好代码和差代码的差别在哪里。
在学完专栏的时候,如果某些原则、思想、模式你记不大清了,那也没关系,只要你能在写代码的时候,能不由自主地去思考代码质量,有意识地去打磨代码,对代码质量有所追求了,那就说明你入门了,也就达到了我们专栏学习的目的。至于具体的知识点,随着时间的推移有所忘记,实际上并不碍事,多看几遍,多实践实践就好了。
这里,我也问你一个问题,你可以想一想,你写代码或者读别人代码的时候,是否开始思考代码质量问题呢?如果还没有,那再给你布置一个任务,在今后的一个月内,写代码前、中、后,都思考一下代码的扩展性、可读性、可维护性、可测试性等代码质量问题,看看自己编写的代码是否符合这些质量要求,有没有需要继续优化重构的地方。
## 3.主动学习而非被动学习
“师傅领进门修行靠个人”这句话说得特别好。同样听一个老师讲课一个班级里面总有人会考90分甚至满分也会总会有人考不及格。差距在哪里呢道理很简单那就是你有没有用心学习。
类比到我们的专栏学习中,如果你只是走马观花地看一遍、跟听小说一样听一遍,收获肯定是甚微的,也就会出现常说的“过不几天就忘了”的情况。因为这是一种被动学习方法,左耳朵进右耳朵出,脑子里怎么会留住东西呢?相反,如果你能学会主动学习、主动思考,遇到不会的、理解不了的知识点,自己主动去思考一下、查查资料,或者跟同事讨论一下,试着把专栏里的内容自己总结一下,认真思考每一个课后题,这样的学习效果要比被动学习强好几倍。
关于这一点,我也给你留个作业:找一篇你觉得还没有透彻理解的文章,花上一天的时间,把里面的代码自己实现一遍,把文章的重点内容自己思考、整理,输出成文章。你可以看看,这样是否要比单纯看一遍收获更多呢?
## 4.多读几遍更有收获
《设计模式之美》专栏的内容都不难理解,每篇文章仅有四五千字,十几分钟的音频,但是,多读几遍你就会发现,每读一遍都会有不同的收获。
如果你只是看一遍、听一遍,怎么能达到像我一样对知识点的理解程度呢?我自己在写专栏的时候,可是查阅了大量的文章和资料。有的时候,一篇文章我要写好几天,这期间有长时间、高强度的阅读、思考和揣摩。你如果都不愿意花跟我一样多的时间,怎么能期望跟我有一样的水平呢?
一个人的认知和理解能力是受限于他的经历和经验的。如果你刚毕业不久开发经验不多看专栏的时候难免会抓不住重点或者理解得不够透彻。那该怎么办呢我的建议是千万不要把学习专栏看成一蹴而就的事情看完一遍就丢在一边了而是要反反复复进行学习。看一遍理论之后你可以在项目中尝试着实践一下然后回过头来再看一遍直到没有新的知识点可以汲取为止。这个过程可能需要持续很长时间可能是1年、2年甚至是3年、5年但只有这样你才能积累出真正的能力、建立真正的竞争壁垒而不只是学一些快餐知识、填补眼前的焦虑。
在《数据结构与算法之美》专栏中,我也说过,你要做一个长一点的学习计划。实际上,学习《设计模式之美》专栏也是如此,毕竟这两门课都是比较基础的,而且跟我们平时的开发比较相关,多花点时间在基础的知识上,收益要远大于学习很多花哨的新技术、新框架。
关于这一点我再给你布置一个作业找专栏中一篇文章反复读上10遍当然是带着思考去读哈。你看看是不是比只读一遍要理解得更透彻是不是之前不能理解的地方自然就理解了呢是不是每次读的时候都有新的收获
## 5.学会把代码写到极致
我经常说写100段烂代码都不如写1段好代码对代码能力的提高大。实际上这个道理也可以应用到任何学习工作中堆量只需要时间但并不是每个人都能把事情做到极致而能把一件事情做到极致的人往往也能把其他很多事情做到极致。这也是为什么很多人在某一行业做得很好跨行去做另一个看似不相干的事情也同样能做得非常好。牛人往往都是能把一件事情做到极致的人。如果所有的事情都只能做到一般好那你注定也只能做一个平凡的人。
关于这一点,我也布置一个作业给你:找一段你觉得写得很烂的代码,花上一个礼拜的时间,反复思考如何优化,把它优化到足够好。
## 总结
说了这么多说实话我知道这些道理很多人都知道。但是能真正落实执行并且执行到位的人不多。就光我说的这几个作业估计能100%完成的也没有几个人。
你说人和人之间的差距在哪里?就在这里。
不要期望我的专栏有什么杀手锏可以教给你不要期望看了我的专栏之后不费力气就能成为代码高手。还是那句话师傅领进门修行靠个人。我能做的就是尽量地将知识讲得通俗、透彻把我的经验尽可能地传授给你而这些只占1%剩下99%都要靠你自己去努力。
如果说成为代码高手是万里长征,那我只能给你指明方向,告诉你如何去走。剩下的万里长征没人能替你去走,需要你一步一步、踏踏实实,自己去走完。
## 课堂讨论
最后,你可以在留言区讲一讲自己的**新年学习计划**。
如果有收获,欢迎收藏这篇文章,并把它分享给你的朋友。