架构设计能力的培养

今天再谈下软件开发人员如何提升自己的架构设计能力 。对于软件开发来说 , 一般3年时间是一道坎 , 编码3年基本可以逐步做出初步的设计 , 再做设计3年基本能够具备架构设计的能力 。架构设计虽然高屋建瓴 , 从顶朝下对问题域进行分解并最终解决 , 但是你会看到真正所有的能力却是来源于你日常编码 , 日常功能模块设计大量实践的积累 。
当然大部分软件开发人员即使编码多年也很难具备设计能力 , 这里面还有一个设计思维意识的转变 。比如前面文章里面谈到的编程阶段你要有自动化和复用思维 , 到了设计阶段要有分层 , 分解 , 抽象 , 聚合等思维能力 。
什么是软件开发里面的设计能力?
对于软件开发和编码来说 , 我在前面文章已经谈到过 , 简单来说就是数据结构+算法 , 那么是否你对常用的数据结构和算法都清楚了 , 就具备了设计能力?
显然答案是否定的 。
最基本的设计能力是当你面对问题域的时候 , 你知道采用什么样的数据结构或什么样的算法去解决这个问题 。这就是最基本的设计能力 。
比如一个路径搜索问题 , 别人告诉你了采用二叉树模型和算法来解决 , 你去编码实现出来 , 那么具备编码能力 。但是你自己能够对问题进行分析和建模 , 最后得出二叉树算法效率最高 , 并最终实现 , 那么具备设计能力 。
所以设计能力的难点就在于面对问题域的时候你能够快速地分析 , 并找到最合适的数据结构和算法来解决 。这个能力就是设计能力 。
架构设计能力的培养
文章图片

文章图片
那么从设计能力到架构设计能力差别又在哪里?
简单来说 , 架构设计则站的层次更高 , 你面对的是一个完整的业务系统的构建 。这个业务系统本身包括了底层技术平台的搭建 , 开源组件的选择 , 开发框架和分层设计这些非功能性的设计内容 。同时又包括了整个业务需求过来 , 你如何进行分而治之 。
即将整体的需求应该分解为几个子系统或模块 , 这些模块本身内聚哪些功能 , 暴露哪些接口 , 模块间如何协同才能够完成完整的业务 。你如何分解才能够确保分解处理的组件高内聚 , 松耦合 , 高度自治又能够通过接口集成 , 最终完成整体业务 。
分解完成的内容又能够分配给不同的设计或开发人员去做详细设计和开发 , 同时你能够拍着胸脯收你按着我的要求进行模块和接口设计 , 我能够确保最终各个模块能够组装起来 。
所以到了架构层面涉及到两个方面关键 。
其一是你可能从头搭建一个完整的开发或技术框架 , 制定分层设计 , 接口设计原则 , 规划共性的技术平台和组件 , 制定整体的开发标准和开发流程等 。
其二是你还需要懂全局业务 , 清楚完整的业务你才能够做好系统的分解 , 分解后的集成 。分解 , 集成和抽象能力我认为始终是架构设计的一个关键能力 。
当了解清楚以上内容后 , 再回头来看下 。
比如你可能认为你类似Redis , Kafka , SpingBoot等各种开源软件或框架都很熟悉 , 这不代表你具备设计能力 。但是如果你清楚面对某一个场景的时候 , 究竟应该是采用缓存实现 , 还是采用消息中间件事件机制实现 , 那么就具备设计能力 。
再比如你可能觉得常见的设计模式你详细做了学习 , 都很熟悉 , 那也不代表你具备设计能力 , 而你知道遇到某一个场景的时候应该采用哪种设计模型来解决 , 这个才叫设计能力 。
架构设计能力的培养