红米手机|为什么说每个程序员都要尽早掌握设计模式相关知识?

红米手机|为什么说每个程序员都要尽早掌握设计模式相关知识?

分享下前 Google 工程师「王争」对于这个话题的思考 。

大家好 , 我是王争 。
我相信 , 很多程序员都已经意识到基础知识的重要性 , 觉得要夯实基础 , 才能走得更远 , 但同时对于如何将基础知识转化成开发“生产力”仍然有些疑惑 。 所以 , 你可能看了很多基础的书籍 , 比如操作系统、组成原理、编译原理等 , 但还是觉得很迷茫 , 觉得在开发中用不上 , 起码在平时的CRUD业务开发中用不上 。 实际上 , 这些基础的知识确实很难直接转化成开发“生产力” 。 但是 , 它能潜移默化地、间接地提高你对技术的理解 。
【红米手机|为什么说每个程序员都要尽早掌握设计模式相关知识?】不过 , 我觉得 , 设计模式和操作系统、组成原理、编译原理等这些基础学科是不一样的 。 它虽然也算是一门基础知识 , 但是它和数据结构、算法更像是一道儿的 , 相比那些更加基础的学科 , 设计模式能更直接地提高你的开发能力 。 我在开篇词里也说了 , 如果说数据结构和算法是教你如何写出高效代码 , 那设计模式讲的是如何写出可扩展、可读、可维护的高质量代码 , 所以 , 它们跟平时的编码会有直接的关系 , 也会直接影响到你的开发能力 。
不过 , 你可能还是会觉得设计模式是把屠龙刀 , 看起来很厉害 , 但平时的开发根本用不上 。 基于这种观点 , 接下来 , 我们就具体地聊一聊 , 我们为什么要学习设计模式?
1. 应对面试中的设计模式相关问题学习设计模式和算法一样 , 最功利、最直接的目的 , 可能就是应对面试了 。
不管你是前端工程师、后端工程师 , 还是全栈工程师 , 在求职面试中 , 设计模式问题是被问得频率比较高的一类问题 。 特别是一些像BAT、TMD这样的大公司 , 比较重视候选人的基本功 , 经常会拿算法、设计模式之类的问题来考察候选人 。
所以 , 我在求职面试的时候 , 都会提前准备、温习一遍设计模式 。 尽管并不是每次面试都会被问到 , 但一旦被问到 , 如果回答得不好 , 就是一个败笔 , 这场面试基本上也就凉凉了 。 所以 , 为了保证万无一失 , 摆脱一旦被问到答不出来的窘境 , 对于设计模式这种大概率被问到的问题 , 我都会未雨绸缪 , 提前准备一下 。
当然 , 我并不是临时抱佛脚 。 我平时就比较重视设计模式相关知识的积累 , 所以底子比较好 , 只需要在每次面试前花很短的时间 , 重新温习一下 , 便可以自信满满地去面试 , 而不是心里老是担心被问到 , 影响正常的面试发挥 。
所以 , 如果你也不想让设计模式相关问题成为你面试中的短板 , 那跟着我把专栏中的知识点都搞清楚 , 以后面试再遇到设计模式相关的问题 , 就不会惧怕了 , 甚至还会成为你面试中的亮点 。
2. 告别写被人吐槽的烂代码我们经常说 , “Talk is cheap , show me the code 。 ”实际上 , 代码能力是一个程序员最基础的能力 , 是基本功 , 是展示一个程序员基础素养的最直接的衡量标准 。 你写的代码 , 实际上就是你名片 。
尽管我已经工作近十年 , 但我一直没有脱离编码一线 , 现在每天也都在坚持写代码、review指导同事写代码、重构遗留系统的烂代码 。 这些年的工作经历中 , 我见过太多的烂代码 , 比如命名不规范、类设计不合理、分层不清晰、没有模块化概念、代码结构混乱、高度耦合等等 。 这样的代码维护起来非常费劲 , 添加或者修改一个功能 , 常常会牵一发而动全身 , 让你无从下手 , 恨不得将全部的代码删掉重写!