Skip to content

春节特别加餐 | 王争:如何学习《设计模式之美》专栏?

《设计模式之美》专栏相对于另一个专栏《数据结构与算法之美》来说,内容看似更容易,实际上却更难。

从学习的角度来说,《设计模式之美》更有难度。它的难跟算法的难还不大一样。算法是原理难、实现难,最后才是应用难。设计模式正好相反,原理、实现都挺简单的,基本上你一看就会觉得懂了,但是真正的能把它用到项目中,还是比较难的

对于很多人来说,你问他个具体的设计原则、思想、模式的原理和实现,他都能回答得头头是道,但是,在实际的项目开发中,写出来的代码质量还是很差。这种情况出现的原因还是相关的知识点都过于抽象,通俗点讲就是有点“假大空”,不够具体、不太能落地,导致理论和实践容易脱节。

1. 建立完善的知识体系

实际上,整个专栏是围绕着教你如何编写高质量代码来设计的

作者在整个专栏中,试图给你建立完善的知识体系,所以,从内容上来讲,涵盖了编写高质量代码的方方面面,比如面向对象、设计原则、设计思想、编码规范、重构技巧、设计模式。

虽然没法把每一个知识点都讲解得无比详细、全面,但整理的这份知识框架,相当于给你指出了一个深入研究的方向,你可以按图索骥,积累起来会更快。先建立整体的知识框架,再慢慢深入、各个攻破,这也是学习任何一门新技术、新知识最有效的方法。

Question

想一想整个专栏都会讲哪些内容?已经讲过的设计原则和思想,都讲了哪些内容?你能想起来多少?

2. 建立代码质量意识

Tips

实际上,建立正确的技术认知和技术观,比单纯学技术、学知识点更重要。

专栏中讲到单元测试的时候,并没有讲跟某个测试框架相关的技术点。因为这些很容易通过看文档学习,而作者也不可能写得比官方文档更全面、更权威。实际上,通过那节课,作者想要让你了解的是单元测试的好处,让你真正意识到单元测试的重要性,从心底认可这件事。

还有,在讲到重构的时候,也一直在强调要建立持续重构意识。整个专栏也都是在传递给你代码质量的重要性,让你意识到好代码和差代码的差别在哪里。

在学完专栏的时候,如果某些原则、思想、模式你记不大清了,那也没关系,只要你能在写代码的时候,能不由自主地去思考代码质量,有意识地去打磨代码,对代码质量有所追求了,那就说明你入门了,也就达到了我们专栏学习的目的。至于具体的知识点,随着时间的推移有所忘记,实际上并不碍事,多看几遍,多实践实践就好了。

Question

以想一想,你写代码或者读别人代码的时候,是否开始思考代码质量问题呢?如果还没有,请在今后的一个月内,写代码前、中、后,都思考一下代码的扩展性、可读性、可维护性、可测试性等代码质量问题,看看自己编写的代码是否符合这些质量要求,有没有需要继续优化重构的地方。

3. 主动学习而非被动学习

“师傅领进门,修行靠个人”,这句话说得特别好。

在专栏学习中,如果你只是走马观花地看一遍、跟听小说一样听一遍,收获肯定是甚微的,也就会出现常说的“过不几天就忘了”的情况。因为这是一种被动学习方法,左耳朵进右耳朵出,脑子里怎么会留住东西呢?

相反,如果你能学会主动学习、主动思考,遇到不会的、理解不了的知识点,自己主动去思考一下、查查资料,或者跟同事讨论一下,试着把专栏里的内容自己总结一下,认真思考每一个课后题,这样的学习效果要比被动学习强好几倍。

Question

找一篇你觉得还没有透彻理解的文章,花上一天的时间,把里面的代码自己实现一遍,把文章的重点内容自己思考、整理,输出成文章。你可以看看,这样是否要比单纯看一遍收获更多呢?

4. 多读几遍更有收获

《设计模式之美》专栏的内容,多读几遍就会发现,每读一遍都会有不同的收获。作者自己在写专栏的时候,查阅了大量的文章和资料。有的时候,一篇文章要写好几天,这期间有长时间、高强度的阅读、思考和揣摩。

一个人的认知和理解能力是受限于他的经历和经验的。

如果你刚毕业不久,开发经验不多,看专栏的时候,难免会抓不住重点或者理解得不够透彻。那该怎么办呢?建议千万不要把学习专栏看成一蹴而就的事情,看完一遍就丢在一边了,而是要反反复复进行学习。看一遍理论之后,你可以在项目中尝试着实践一下,然后回过头来再看一遍,直到没有新的知识点可以汲取为止。这个过程可能需要持续很长时间,可能是 1 年、2 年甚至是 3 年、5 年,但只有这样,你才能积累出真正的能力、建立真正的竞争壁垒,而不只是学一些快餐知识、填补眼前的焦虑。

Tips

《数据结构与算法之美》专栏、《设计模式之美》专栏这两门课,都是比较基础的,而且跟平时的开发比较相关,多花点时间在基础的知识上,收益要远大于学习很多花哨的新技术、新框架。

Question

找专栏中一篇文章,反复读上 10 遍(当然是带着思考去读)。看看是不是比只读一遍要理解得更透彻?是不是之前不能理解的地方自然就理解了呢?是不是每次读的时候都有新的收获?

5. 学会把代码写到极致

写 100 段烂代码都不如写 1 段好代码,对代码能力的提高大。

实际上,这个道理也可以应用到任何学习工作中,堆量只需要时间,但并不是每个人都能把事情做到极致,而能把一件事情做到极致的人,往往也能把其他很多事情做到极致。这也是为什么,很多人在某一行业做得很好,跨行去做另一个看似不相干的事情也同样能做得非常好。牛人往往都是能把一件事情做到极致的人。如果所有的事情都只能做到一般好,那你注定也只能做一个平凡的人。

Question

找一段你觉得写得很烂的代码,花上一个礼拜的时间,反复思考如何优化,把它优化到足够好。

总结

道理很多人都知道。但是,能真正落实执行,并且执行到位的人不多。人和人之间的差距在哪里?就在这里。

不要期望专栏有什么杀手锏可以教给你,不要期望看了专栏之后不费力气就能成为代码高手。还是那句话,师傅领进门,修行靠个人。作者能做的就是尽量地将知识讲得通俗、透彻,把经验尽可能地传授给你,而这些只占 1%,剩下 99% 都要靠你自己去努力。如果说成为代码高手是万里长征,那作者只能给你指明方向,告诉你如何去走。剩下的万里长征没人能替你去走,需要你一步一步、踏踏实实,自己去走完。