设计模式之美
王争
前 Google 工程师,《数据结构与算法之美》专栏作者
123425 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 113 讲
设计模式与范式:行为型 (18讲)
设计模式之美
15
15
1.0x
00:00/10:43
登录|注册

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

讲述:冯永吉大小:8.59M时长:10:43
优化代码
理解程度提高
反复学习
思考总结输出
查找资料
主动思考
代码质量问题思考
重构
单元测试
深入研究
整体知识框架
新年学习计划
师傅领进门,修行靠个人
个人努力
落实执行
学会把代码写到极致
多读几遍更有收获
主动学习而非被动学习
建立代码质量意识
建立完善的知识体系
设计模式
重构技巧
编码规范
设计思想
设计原则
面向对象
教你如何编写高质量代码
课堂讨论
总结
学习方法
《设计模式之美》专栏内容
春节加餐 | 王争:如何学习《设计模式之美》专栏?

该思维导图由 AI 生成,仅供参考

你好,我是王争。今天是春节,首先祝你在新的一年,学业进步,工作顺利。放假期间,也不要忘记学习啊!
到此为止,咱们的《设计模式之美》快要更新过半了。很多小伙伴反馈的问题我都看到了。这里我也来讲一下,到底该如何学习《设计模式之美》专栏,才能做到事半功倍、有的放矢?
《设计模式之美》专栏相对于我的另一个专栏《数据结构与算法之美》来说,内容看似更容易,实际上却更难。为什么这么说呢?
从我写作的角度来说,《设计模式之美》要更加有难度。因为《数据结构与算法之美》的知识点都比较明确,一篇讲一个数据结构或算法。我只需要把原理、实现讲清楚,再举个实战的例子就基本大功告成了。
但是,《设计模式之美》中的知识点就没那么明确了。每个知识点到底该如何讲,并没有太多的参考。特别是专栏的前一部分,设计原则和思想,我在写专栏的时候参考了大量的书籍和资料。不瞒你说,大部分现有资料都讲得很浅,而且“互相借鉴”的痕迹也很明显。如果你之前对设计原则、思想、模式有所了解,或者看过挺多相关的书籍,应该能发现,我的专栏跟其他书籍的讲解还是有比较大的区别,这其中融入了我很多自己的思考和见解,这也是我的专栏与其他书籍区别最大的地方。
相对应的,从你学习的角度来说,《设计模式之美》也更有难度。它的难跟算法的难还不大一样。算法是原理难、实现难,最后才是应用难。而设计模式正好相反,原理、实现都挺简单的,基本上你一看就会觉得懂了,但是真正的能把它用到项目中,还是比较难的。对于很多人来说,你问他个具体的设计原则、思想、模式的原理和实现,他都能回答得头头是道,但是,在实际的项目开发中,写出来的代码质量还是很差。这种情况出现的原因还是相关的知识点都过于抽象,通俗点讲就是有点“假大空”,不够具体、不太能落地,导致理论和实践容易脱节。
所以,有些小伙伴总感觉《设计模式之美》学起来比《数据结构与算法之美》要简单,容易看懂,实际上这是种错觉。如果你也有这种感觉,那你要警醒了,因为你可能并没有真正读懂专栏的精髓。说了这么多,接下来我就讲讲,我为什么说你可能没有体会到文章的精髓,以及到底该如何来学习这个专栏。

1. 建立完善的知识体系

你可能已经注意到,虽然这个专栏的名字叫《设计模式之美》,但专栏内容并不局限于此。实际上,整个专栏是围绕着教你如何编写高质量代码来设计的。
在整个专栏中,我试图给你建立完善的知识体系,所以,从内容上来讲,涵盖了编写高质量代码的方方面面,比如面向对象、设计原则、设计思想、编码规范、重构技巧、设计模式。虽然在有限的 100 篇文章、50 万字内,我可能没法儿把每一个知识点都讲解得无比详细、全面,但我整理的这份知识框架,相当于给你指出了一个深入研究的方向,你可以按图索骥,积累起来会更快。先建立整体的知识框架,再慢慢深入、各个攻破,这也是学习任何一门新技术、新知识最有效的方法。
所以,这里给你布置一个小任务,闭上眼睛,想一想整个专栏都会讲哪些内容?已经讲过的设计原则和思想,都讲了哪些内容?你能想起来多少?

2. 建立代码质量意识

实际上,建立正确的技术认知和技术观,比单纯学技术、学知识点更重要。
我举个例子,专栏中讲到单元测试的时候,并没有讲跟某个测试框架相关的技术点。因为我觉得这些很容易通过看文档学习,而我也不可能写得比文档更全面、更权威。实际上,通过那节课,我想要让你了解的是单元测试的好处,让你真正意识到单元测试的重要性,从心底认可这件事。还有,我在讲到重构的时候,也一直在强调要建立持续重构意识。整个专栏也都是在传递给你代码质量的重要性,让你意识到好代码和差代码的差别在哪里。
在学完专栏的时候,如果某些原则、思想、模式你记不大清了,那也没关系,只要你能在写代码的时候,能不由自主地去思考代码质量,有意识地去打磨代码,对代码质量有所追求了,那就说明你入门了,也就达到了我们专栏学习的目的。至于具体的知识点,随着时间的推移有所忘记,实际上并不碍事,多看几遍,多实践实践就好了。
这里,我也问你一个问题,你可以想一想,你写代码或者读别人代码的时候,是否开始思考代码质量问题呢?如果还没有,那再给你布置一个任务,在今后的一个月内,写代码前、中、后,都思考一下代码的扩展性、可读性、可维护性、可测试性等代码质量问题,看看自己编写的代码是否符合这些质量要求,有没有需要继续优化重构的地方。

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

“师傅领进门,修行靠个人”,这句话说得特别好。同样听一个老师讲课,一个班级里面总有人会考 90 分,甚至满分,也会总会有人考不及格。差距在哪里呢?道理很简单,那就是你有没有用心学习。
类比到我们的专栏学习中,如果你只是走马观花地看一遍、跟听小说一样听一遍,收获肯定是甚微的,也就会出现常说的“过不几天就忘了”的情况。因为这是一种被动学习方法,左耳朵进右耳朵出,脑子里怎么会留住东西呢?相反,如果你能学会主动学习、主动思考,遇到不会的、理解不了的知识点,自己主动去思考一下、查查资料,或者跟同事讨论一下,试着把专栏里的内容自己总结一下,认真思考每一个课后题,这样的学习效果要比被动学习强好几倍。
关于这一点,我也给你留个作业:找一篇你觉得还没有透彻理解的文章,花上一天的时间,把里面的代码自己实现一遍,把文章的重点内容自己思考、整理,输出成文章。你可以看看,这样是否要比单纯看一遍收获更多呢?

4. 多读几遍更有收获

《设计模式之美》专栏的内容都不难理解,每篇文章仅有四五千字,十几分钟的音频,但是,多读几遍你就会发现,每读一遍都会有不同的收获。
如果你只是看一遍、听一遍,怎么能达到像我一样对知识点的理解程度呢?我自己在写专栏的时候,可是查阅了大量的文章和资料。有的时候,一篇文章我要写好几天,这期间有长时间、高强度的阅读、思考和揣摩。你如果都不愿意花跟我一样多的时间,怎么能期望跟我有一样的水平呢?
一个人的认知和理解能力是受限于他的经历和经验的。如果你刚毕业不久,开发经验不多,看专栏的时候,难免会抓不住重点或者理解得不够透彻。那该怎么办呢?我的建议是,千万不要把学习专栏看成一蹴而就的事情,看完一遍就丢在一边了,而是要反反复复进行学习。看一遍理论之后,你可以在项目中尝试着实践一下,然后回过头来再看一遍,直到没有新的知识点可以汲取为止。这个过程可能需要持续很长时间,可能是 1 年、2 年甚至是 3 年、5 年,但只有这样,你才能积累出真正的能力、建立真正的竞争壁垒,而不只是学一些快餐知识、填补眼前的焦虑。
在《数据结构与算法之美》专栏中,我也说过,你要做一个长一点的学习计划。实际上,学习《设计模式之美》专栏也是如此,毕竟这两门课都是比较基础的,而且跟我们平时的开发比较相关,多花点时间在基础的知识上,收益要远大于学习很多花哨的新技术、新框架。
关于这一点,我再给你布置一个作业:找专栏中一篇文章,反复读上 10 遍(当然是带着思考去读哈)。你看看是不是比只读一遍要理解得更透彻?是不是之前不能理解的地方自然就理解了呢?是不是每次读的时候都有新的收获?

5. 学会把代码写到极致

我经常说,写 100 段烂代码都不如写 1 段好代码,对代码能力的提高大。实际上,这个道理也可以应用到任何学习工作中,堆量只需要时间,但并不是每个人都能把事情做到极致,而能把一件事情做到极致的人,往往也能把其他很多事情做到极致。这也是为什么,很多人在某一行业做得很好,跨行去做另一个看似不相干的事情也同样能做得非常好。牛人往往都是能把一件事情做到极致的人。如果所有的事情都只能做到一般好,那你注定也只能做一个平凡的人。
关于这一点,我也布置一个作业给你:找一段你觉得写得很烂的代码,花上一个礼拜的时间,反复思考如何优化,把它优化到足够好。

总结

说了这么多,说实话,我知道这些道理很多人都知道。但是,能真正落实执行,并且执行到位的人不多。就光我说的这几个作业,估计能 100% 完成的也没有几个人。
你说人和人之间的差距在哪里?就在这里。
不要期望我的专栏有什么杀手锏可以教给你,不要期望看了我的专栏之后不费力气就能成为代码高手。还是那句话,师傅领进门,修行靠个人。我能做的就是尽量地将知识讲得通俗、透彻,把我的经验尽可能地传授给你,而这些只占 1%,剩下 99% 都要靠你自己去努力。
如果说成为代码高手是万里长征,那我只能给你指明方向,告诉你如何去走。剩下的万里长征没人能替你去走,需要你一步一步、踏踏实实,自己去走完。

课堂讨论

最后,你可以在留言区讲一讲自己的新年学习计划
如果有收获,欢迎收藏这篇文章,并把它分享给你的朋友。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

王争在《设计模式之美》专栏中分享了学习方法和建议。他强调了主动学习的重要性,鼓励读者进行思考、总结和实践。王争提出了闭卷思考专栏内容、思考代码质量问题以及主动实现和输出文章内容的作业,以提高学习效果。他指出多次阅读专栏内容能带来不同的收获,并建议读者在项目中实践所学知识。此外,王争强调了写好代码的重要性,并鼓励读者花时间思考如何优化糟糕的代码。他强调了实践和持续学习的重要性,指出成为代码高手需要长期的努力和实践。王争的观点和建议能够帮助读者更好地理解和应用专栏内容,提高学习效果。整体而言,本文强调了主动学习、多次阅读、实践和持续优化的重要性,为读者提供了实用的学习建议。

2020-01-2579人觉得很赞给文章提建议

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《设计模式之美》
新⼈⾸单¥98
立即购买
unpreview
登录 后留言

全部留言(75)

  • 最新
  • 精选
  • 辣么大
    leetcode每天一题(已连续46天) github今年commit累计总天数超过300(争取持续连击)
    2020-01-25
    5
    102
  • iamjohnnyzhuang
    最近半年来看了不少极客时间的课程,通过这段时间的学习,在3~4月时成功跳槽拿到今日头条、阿里巴巴offer,非常感谢争哥,感谢极客时间各位老师 🙏 总结了一个个人感觉还不错的学习方法: 1)第一遍粗读了解该是什么 2)第二遍精读,同时做笔记、画脑图 3)通过脑图,就有了完整的、系统的知识网络,复习知识网络。 4)复习过程有任何不清楚的点再回去读文章 5)工作时要有使用意识,比如写Java 各种容器类要有意识为什么这么用底层时什么意思,写架构时多考虑用什么设计模式,多考虑我怎么写是否符合设计原则 6)代码一定一定要注意美感,IDEA 黄色的 warning 以及 静态代码扫描 注意理解问题并且修复
    2020-03-30
    4
    66
  • 叫我天才好了
    2020年学习计划: 1.跟着争哥的设计模式更新学习,并且回忆自己工作中那些还可以重构和完善的代码,虽然好多都是老东家的代码了,不过在新公司的代码一定要认真的、反复的保证完美。 2.把Spring课程跟着更新听下去,今年还要把买的两本Spring的书看完,跟着书练习一遍。 3.把MySQL搞定,书和课程。 4.2020年看完买来的关于专业知识的书,把大学必修的计算机基础的计算机网络、计算机组成原理、数据结构(争哥的课已经看完,准备看书+课程二刷+自己实现课程代码+LeetCode刷题)、操作系统都拿下。 5.不再焦虑,我只是一个刚工作1年多的萌新,焦虑太多也提升不了自己,还不如自律起来多学习多思考来得快。越努力,越幸运。 最后总结:加油吧,各位极客时间的小伙伴们!
    2020-02-02
    3
    45
  • 李小四
    设计模式_春节特辑: 公司的一个实习生问我,你觉得技术好是什么意思: 我说:基础好!!! 年度计划:自己的项目(app+server)上线~ # 问题1:闭上眼睛,想到的内容: 真的是盲想。。。 - 设计原则: - 开闭原则 - 单一职责原则 - Kiss原则 - YGNNI - DRY原则 - 。。。 - 几个重要的设计思想: - 高内聚,松耦合 - 面向对象与面向过程的理念区别 - 继承与组合的取舍 - 实际的工作中,不要死板地遵守某一个(组)原则,要整体地取舍地考虑。 # 问题2:建立代码质量意识, 有思考,但之前没有从这么多的方面考虑(扩展性,可读性,可维护性,可测试性), 尤其是可测试性。 # 问题3:主动学习,找一篇还没有透彻理解的文章,理解后输出文章。 其实留言只是第一步,更好的方式一定是输出。我计划是“高内聚,松耦合”那一节。 # 问题4:多读几遍 10遍到是没有过,但专栏文章平均读3遍,可能是因为一遍真的看不懂吧。 # 问题5:找一段你觉得写得很烂的代码,花上一个礼拜的时间,反复思考如何优化,把它优化到足够好。 关于这个作业,我准备把项目中一个耿耿于怀的模块改了。 上面的这些作业,我希望自己是那个100%完成的人。
    2020-01-29
    26
  • Jxin
    1.其实专栏名称改为《码出高效》更合适些(阿里的《码出高效》可以改名《面试基础知识点》)。 2.19年给自己定的目标恰巧就是写出高质量代码,虽然现阶段造不了飞机,但就算是做茶壶也要做展览台的艺术品,而非街头摊子的劣质品。 3.栏主这个专栏,涵盖好几本书的内容。个中的文字描述令人惊叹,自愧不如。19年底也算是借着这个专栏把自己关于高质量代码的知识体系梳理了一遍。万分感谢。 4.就个人拙见,关于码出高效,技术相关其实还少了运行监控这块的东西,落地到代码,包括各种日志的输出原则,系统和业务健康指标的选择等等。非技术的,还有产品思维和精益思想需要学习,我们的目标是更高效的产出业务价值,这本身就很难逃过对业务背景必要的学习。而建模抽象,需求优先级排序以及需求设计都需要产品知识的支撑,技术,产品对于业务开发本就是一体两面的东西。 新年计划: 1.决定公司内部分享《码出高效》一整套的课程(文档,ppt,视频,github项目),过年都在筹备。面向对象和设计原则这两块就以栏主的内容为基础来写,毕竟目前我没本事写得更好也没必要去另起炉灶(会著名出处的)。
    2020-01-27
    1
    22
  • 吴小智
    文章没有一句废话,都说到心坎里了。学习,永远都是自己的事。自己加油,中国也加油。
    2020-01-26
    15
  • zliweijk
    这个时势最好就是宅在家学习
    2020-01-25
    2
    8
  • 山顶的洞
    2011年参加工作,一直是小兵。总结原因 1,基础薄弱,导致缺乏自信,没勇气挑战。 2,没有找准努力方向。东看看,西看看。久而久之,养成了一种行为模式。 3,做事情没有恒心。比如算法,是自己的一块心病,就是没勇气突破,害怕困难。 4,认真。凡事就怕认真。反之,自己做事很不认真。
    2020-03-25
    7
  • batman
    缺的就是这1%的方向,剩下 99% 都要靠你自己去努力,老师的肺腑之言记住了!
    2020-01-30
    7
  • javaadu
    今年上半年自己的第一个目标就是完成设计模式之美的100天学习打卡活动。跟着老师学习的过程,再结合实际的工作项目,最近一个月感觉收获很大
    2020-01-25
    5
收起评论
大纲
固定大纲
1. 建立完善的知识体系
2. 建立代码质量意识
3. 主动学习而非被动学习
4. 多读几遍更有收获
5. 学会把代码写到极致
总结
课堂讨论
显示
设置
留言
75
收藏
99+
沉浸
阅读
分享
手机端
快捷键
回顶部