今日再谈谈软件开发人员如何提高架构设计能力。对软件开发而言,一般3年是一道坎,3年的编码基本上可以逐步做出初步的设计,3年的设计基本上可以具备架构设计的能力。尽管架构设计是高屋建瓴,从顶向下对问题区域进行分解,最终解决,但你会看到,真正的能力都来自于你的日常编码,日常功能模块设计的大量实践积累。
当然,大多数软件开发人员即使编码多年,也很难有设计能力,这也是设计思维意识的转变。例如,在前面文章中提到的编程阶段,你应该有自动化和复用思维,在设计阶段,你应该有分层、分解、抽象、聚合等思维能力。
软件开发中的设计能力是什么?
就软件开发和编码而言,我在前面的文章中已经提到过,简单来说就是数据结构+算法,那么你是否对常用的数据结构和算法都很清楚,有设计能力?
很明显,答案是否定的。
最基本的设计能力是当你面对问题领域时,你知道用什么样的数据结构或算法来解决这个问题。这是最基本的设计能力。
例如一条路径搜索问题,别人告诉你用二叉树模型和算法来解决,你去编码实现了,那么就具备了编码能力。但可以自己分析和建模问题,最终得出二叉树算法效率最高,最终实现,然后具备设计能力。
因此,设计能力的难点在于,当你面对问题时,你可以快速分析,找到最合适的数据结构和算法来解决。这就是设计能力。
从设计能力到结构设计能力有什么区别?
简言之,架构设计则站得更高,你面临的是一个完整的业务系统建设。该业务系统本身包括底层技术平台的构建、开源组件的选择、开发框架和分层设计等非功能设计内容。与此同时,它也包括了整个业务需求的到来,你如何进行分而治之。
将整体需求分解为几个子系统或模块,这些模块本身聚集了哪些功能,暴露了哪些接口,模块之间如何协作才能完成完整的业务。如何分解才能保证分解后的组件高度聚集、松耦合、高度自主,最终通过界面集成完成整个业务。
分解后的内容可以分配给不同的设计或开发人员进行详细的设计和开发。同时,你可以拍拍胸部,按照我的要求设计模块和界面。我可以确保每个模块最终都可以组装。
因此,结构层面涉及两个关键方面。
首先,你可以从零开始构建一个完整的开发或技术框架,制定分层设计,界面设计原则,规划共同的技术平台和组件,制定总体的开发标准和流程等等。
第二,你还需要了解体业务,了解完整的业务,才能做好系统分解和分解后的整合。我认为分解、整合和抽象总是架构设计的关键能力。
了解以上内容后,回头看看
例如,您可能会认为您熟悉Redis、Kafka、SpingBoot等各种开源软件或框架,这并不意味着您具备设计能力。但如果你清楚地知道在面对某个场景时,到底是应该使用缓存,还是应该使用消息中间件事件机制,那么你就具备了设计能力。
例如,你可能认为你已经详细学习了常见的设计模式,并不意味着你有设计能力你遇到某个场景时,你知道应该使用什么样的设计模型来解决它。这叫做设计能力。
因此,培养设计能力有两种方法
首先,你做了大量的编码,在整个过程中走了弯路,你发现需要抽象或复用,才能提高你的开发效率,也让软件具有可扩展性,你只要懂得这种反思和复盘,就一定能提高你的设计能力。假如您在开发过程中做了大量的粘贴、复制动作,而且没有触发您的思考,那么显然很难培养您的设计能力。
设计能力往往始于编码和编程思维
第一,自动去除重复的东西,第二,通过参数抽象把类似的东西变成可重复使用的方法或函数,在抽象之后实现自动化。第二,自动化之后,你会发现如何更好地应对变化,为了应对变化,你做了更多的抽象或界面设计,在这个过程中逐渐积累设计能力。这个步骤你会发现你的问题是某个设计模式来解决的。
二是编码积累到一定数量后,可以阅读软件架构设计的书籍,首先形成设计的完整思路和方法论,也可以阅读设计模式的书籍,对设计模式有一个完整的了解,可以比较分析日常编码实践的内容和设计模式。这样遇到类似的问题,可以少走自己探索的弯路。
但以上也只解决了设计能力问题
没有解决结构思维水平的问题,结构思维的核心是全球能力,是高抽象和建模能力,明确业务,理解技术的相互联系能力。
当然,大多数架构设计师更热衷于开发框架、技术平台、开源组件选择等。,而忽略了如何从一个业务需求中提出来。通过系统分析,你可以知道整个业务系统应该如何划分模块,如何设计界面,如何设计整个数据模型和数据库来支持业务。同时,你也可以思考你需要遵循什么样的开发框架和模式,分层架构思完成某个功能模块的开发。
这件事实际上难,大多数人都没有这种能力。
但为什么很多人的结构设计还是做得很好,简单来说,整个信息化和因特网发展到今天,各种业务系统、电商平台、因特网应用你基本上都能找到类似的结构参考和原型,你只需参考别人的做法就可以了。
例如,如果你想成为一个电子商务平台,你应该如何分解每个子系统,或者你是否建立每个中间能力中心,这些都是标准的方法。你不需要创新。你只需要参考别人的实践来做。
但如果你面对一项全新的业务,你就要去规划和构建整个业务系统的结构设计,模块划分,我相信大多数结构设计师都不能做到这一点。这一能力已不再是简单的你技术多牛,而是考察全局思维和系统观,考察的是分解与集成、分类与抽象、问题分析与解决、模式匹配、这些能力,统筹我常说的思维能力。
如果一个人真的有能力独立分析和解决问题,有系统思维,你会发现他不仅做好了结构设计,还做了很多其他的事情。就是这个道理。
因此,为了具备这方面的能力,您可以首先熟悉相关的业务领域知识,或者查看与目标相似的完整软件架构设计书籍,领域驱动建模书籍,传统的RUP统一软件过程方法论等等。看一看完整的业务需求是如何通过流程分析、用例建模、对象建模、界面设计逐渐落地的。
请注意,在这一过程中,像UML这样的建模设计语言是很好的辅助,但核心这些建模工具或语言也只是帮助你抽象或形式化地表达你的内容,整个建模的核心还是系统分析思路。这一点始于原始需求输入,如何逐步形成一个完整的构架设计思路,才是关键。