CategoryResourceRepost/极客时间专栏/设计模式之美/开源与项目实战:总结课/100 | 如何将设计思想、原则、模式等理论知识应用到项目中?.md
louzefeng d3828a7aee mod
2024-07-11 05:50:32 +00:00

54 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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="100 | 如何将设计思想、原则、模式等理论知识应用到项目中?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/a4/b1/a4da50a6de2554f82cd8c4f78691acb1.mp3"></audio>
上一节课,我们对整个专栏的理论知识点做了串讲复习,不知道你掌握得如何?对于上节课总结的重点内容,我希望你能多花点时间搞透彻,对于一些不那么重要的内容,我建议你把专栏当作工具资料,用到的时候随手查阅,再深入学习研究。
实际上,很多小伙伴反应,虽然理论掌握得差不多,专栏也很贴近实战,每个知识点的讲解都有结合实际的代码案例,并且最后还有集中的项目实战,但落实到自己写代码的时候,还是无法将学到的理论知识很好地应用到其中。今天,我们就再聊一聊,如何将设计思想、原则、模式等理论知识应用到实际的项目开发中。
话不多说,让我们正式开始今天的学习吧!
## 吃透理论、先把书读厚再把书读薄
把理论知识灵活地应用到实践的前提是,对理论有透彻、无盲点的理解。如果我们对理论知识掌握得似懂非懂,在实际软件开发中,遇到跟专栏中讲过的问题类似,我们可以照葫芦画瓢去解决,但是,如果问题背景稍有改变,我们就会比较难联想到对应的理论知识,更难灵活地应用理论去解决。
要想透彻理解专栏中的每个知识点,一个是要多看几遍,二是要有死磕精神。虽然这两个方法可能已经是老生常谈了,听起来也没有什么高大上的,但从我自身的学习经验来讲,它们确实很有用。
**书读百遍其义自见。**有的时候,对某个知识点,如果看一遍看不懂,你就硬着头皮多看几遍,或者隔几天再回过头来看一遍,你会发现原来很多看不懂的地方,自然而然就懂了。
**慢就是快,快就是慢。**专栏涉及的内容很多,但我们花一年把所有的知识点学透彻,实际上是件一劳永逸的事情。这个过程虽然看似漫长,但收益却很多。对比而言,如果你只是为了追求结课速度,花一两个月、甚至一两个礼拜,把课程学完。这看似很快,但实际上收获会很少。
**先把书读厚,再把书读薄。**反复地学、持续地看。先把书读厚,等到你把所有的知识点都理解透彻,并且在脑子里建立起清晰的知识体系之后,你会发现,实际上专栏的内容也就那么点东西,并不难记忆。前提是你先要花时间把书读厚,然后才能做到把书读薄。
虽然这里我们讲到书读百遍其义自见,也讲到死磕精神,但是,我必须强调一下,有的时候,对于某个知识点,我们看了很多遍、死磕了很长时间,如果还是没法透彻理解,我们也不要过于钻牛角尖,非得“现在立刻马上就要”把它拿下。我们可以先把这个知识点放一放,先看看后面的内容,隔一段时间,让知识沉淀、消化一下,再回过头来看也是可以的。
## 在实战中反复学习、模仿和借鉴
很多人说,理论的知识学了就忘,忘了是不是就等于白学了呢?实际上不是的,起码对于我们这个专栏的内容来说,并非如此。在专栏中,几乎每个知识点,我都结合具体的案例和代码来讲解,目的就是为了让你在实战中学习。所以,你学习的重点不是理论知识,而是跟随我的思维逻辑,学习如何分析代码问题,解决代码问题。通过专栏,经过上百个代码案例的剖析学习,即便理论知识你有可能会忘记,但这种潜移默化的能力锻炼,是不会丢掉的。
对于新手来说,最好的学习方法之一就是“模仿”。我之前在《数据结构和算法之美》专栏中,也曾经讲过,如果你是一名算法或者编程初学者,自己编写代码实现各种数据结构和算法,可能会比较困难。在这种情况下,你就可以先从“照抄”开始,把所有的代码都抄一遍或者抄几遍,然后再慢慢地过渡到自己去默写。
对于我们这个专栏来说如果你项目经验不多要想把理论一下子就灵活地应用到项目中实际上这个要求也有点过高了。同样你也可以先从模仿开始对于项目中遇到的跟专栏中相似的开发场景你可以借鉴专栏中的设计思路、代码实现。实际上除了专栏中的案例之外我们还有很多借鉴的来源比如我们前面剖析过的经典开源项目Spring、MyBatis还有项目中大牛同事写的代码等等。
有人为了刷LeetCode、刷算法题会积累一些算法模板对于相似的问题套用算法模板来快速解决。同样的我们也可以积累设计模板、代码模板对于相似的功能需求我们可以套路设计模板、代码模板来解决。比如在前面讲到的限流框架、灰度组件中加载配置文件这样一个常用功能的设计和实现我们就可以抽象成模板。对于其他项目中类似的功能需求直接套用就可以不用从零开始设计和实现了。
## 刻意思考、刻意训练、追求极致
要想把理论知识应用到项目中,并且做到润物细无声、融会贯通、无招胜有招,我们需要经过漫长的刻意思考和刻意训练。
拿到一个功能需求的时候我们先去思考一下如何设计而不是上来就写代码。写代码时我们也要时刻思考代码是否遵循了经典的设计思想、设计原则比如是否足够可扩展、是否满足SOLID原则、可读性如何等等。
写完代码之后我们再思考一下代码是否有进一步优化的空间。做Code Review的时候看到别人的优秀的代码我们就去思考一下有哪些值得借鉴的地方。
总之,在平时的开发中,我们要刻意的去做这种跟代码质量、代码设计相关的思考训练。时间长了,这种思考就能成为习惯和本能反应,慢慢地,你的代码能力也就不自觉地提高了。
刻意训练的过程在前期会比较痛苦。为了尽可能写出高质量的代码,为了刻意训练在代码中应用理论知识,原本半天就能写好的代码,可能需要好几天才能完成。在最开始的时候,我建议你把专栏中讲到的经典的设计思想、原则、模式,打印出来贴在电脑旁,每次写代码的时候,对照着每个知识点,一个一个去审视代码。
跟前面讲到的花很多时间把理论知识搞透彻的道理一样,刻意训练虽然在前期需要投入更多的时间和精力,但也是一件一劳永逸的事情。等到训练到一定程度之后,你就会发现,在不依赖这个知识点列表的情况下,你开始不自主地考虑代码质量问题、设计问题,不经意写出的代码,就完全符合高质量代码的要求了,而且,写出好的代码并不会花费更多的时间了。相反,如果不愿意为刻意训练付出时间和精力,每次写代码都马马虎虎,代码质量永远都提高不了,也永远都达不到灵活应用理论知识到项目中。
我经常说多花点心思和时间把一段代码写好、优化到极致比写十段凑活能用的代码对提高代码能力更有效。实际上这就好比刷LeetCode算法题对于一些经典算法的经典题目我们一定要刻意地多花点时间搞清楚死磕一下。虽然死磕的过程很痛苦可能会花掉你很多时间但一旦搞明白之后其他类似的题目都可以很快解决。相反如果看到不会的问题连思考都不思考就去看答案那做十道题也还是没有太多长进看到题目不看答案还是写不出来。
## 课堂讨论
关于如何将设计思想、原则、模式等理论知识应用到项目中,除了我分享的这些经验之外,你还有哪些经验可以分享给大家呢?另外,经过这么长的学习和训练,在自己参与的项目中,你是否开始关注代码质量问题,代码能力是否有提升了呢?
欢迎留言和我分享你的想法,如果有收获,也欢迎你把这篇文章分享给你的朋友。