阿里毕玄:聊聊系统设计的套路

简介: 系统设计我一直觉得是远比Java编程技能更难多了的培训,很容易变成务虚课,全是一堆理论。从和学员的互动中学习到了很多,对系统设计的一些方法论进行抽象总结,所以我和这些捧场的学员们说其实是我们一起在共创系统设计的课程 。

作者:毕玄   
文章来源:微信公众号HelloJava

几个公众号转了我三年前写的我在系统设计上犯过的14个错,阅读量远比当年我发的时候高多了,感谢呀,那篇确实算得上心血之作了,哈哈,正好最近我在内部在做一个系统设计培训的尝试,有了更多感受,在这篇文章里再来写写。

系统设计我一直觉得是远比Java编程技能更难多了的培训,很容易变成务虚课,全是一堆理论,然并卵(想想一堆没怎么做过系统设计的人讲系统设计的课,这纯粹是开玩笑),所以以前从来不敢尝试做这方面的培训,不过今年由于一些情况,决定大胆尝试下,就在内部搞了个民间的培训,结果还真有不少同学捧场,在开始上这门课后,我觉得收获最大的搞不好是我自己,整理思路,从和学员的互动中学习到了很多,能更好的对系统设计的一些方法论进行抽象总结,所以我和这些捧场的学员们说其实是我们一起在共创系统设计的课程 。

我给系统设计培训定的目标是:

  1. 通过这堂课掌握一个思考框架,知道做系统设计的套路,系统设计不是简单的上来就画画框什么,必须按照一定的套路才能更好的进行系统设计;
  2. 拓宽知识面,系统设计中非常重要的是考虑的全面性,以更好的进行权衡取舍,所以能不能借助系统设计培训来拓宽知识面非常重要。

而要达到这样的效果,怎么去上这堂课挑战其实是不小的:

  1. 想要传达的思考框架到底是什么?怎么样变成不是纯粹的理论,务虚的传达,从而让大家能更好的掌握并真正的去运用这个思考框架?

以前真的没仔细的思考过系统设计的思考框架的问题,其实吧很多的系统设计的模板就是一个思考框架,但在不理解的情况下,是很难应用好的。

回顾了下自己做过的几个系统的设计,发现现在自己在做系统设计的时候确实是会按照一个套路去做,这个套路就是:

系统设计的目的->系统设计的目标->围绕目标的核心设计->围绕核心设计形成的设计原则->各子系统,模块的详细设计。

1). 系统设计的目的

是指做这个系统设计的目的到底是什么,很多人在做系统设计时,是搞不清为什么要做一个新系统的设计,或者为什么要做一个系统的重构/演进的设计,如果搞不清楚这个目的,后面的系统设计上是很容易形成偏差的,导致本来是为了解决一个问题,要去做新的系统或重构/升级旧的系统,但最后完全脱离了初心。

另外,还有很重要的一点是,一个大架构师是需要给很多人讲解系统设计的,只有理解并讲清了系统设计的目的,团队才能更好的去实现。

2). 系统设计的目标

围绕上面的目的,能不能形成一些可衡量的目标,从而确保最终系统实现和最初的目的不要出现太大的偏差,相信很多人都经历过最终的系统实现和系统设计偏差极大的现象,主要的原因基本都是没有制定衡量系统设计的目标,并在系统设计上让系统能透出这些目标的情况。

3). 围绕目标的核心设计

这步最重要的就是通过设计如何去实现上面的目标,这个环节中技术的专业、视野、全面的考虑、权衡取舍的主观原则、解题的思路,这是形成最后的核心设计的关键。

在核心设计的这个阶段中,会产生一些新的衡量设计最后实现情况的目标,这些也都要增加到系统设计中,确保最后的实现和设计的偏差度是可视的。

4). 围绕核心设计形成的设计原则

有了上面的核心设计后,可以真正的形成一些设计原则,确保后面的子系统/模块的详细设计中能够遵循,并在详细设计中体现出来,这样才能让整个大的系统设计的一致性。

5). 各子系统/模块的详细设计

这个部分我倒觉得难度不会太大,毕竟有了前面的铺垫,就是解好一个更小范围的题,程序员群体在解题能力上通常是不错的,所以我一直觉得数学功底好是程序员的基本,数学就是典型的解题的学科。

ps: 这就是做分享/培训的好处,借机仔细整理自己的碎片,从而形成体系。

关于怎么更好的让大家能掌握并运用这个思考框架,我的想法就是在讲每个步骤的时候讲讲自己当年在这些步骤上犯的错,实际的经验,这样我觉得也许大家以后在做系统设计时就能想起,所以我觉得系统设计这种培训绝对是需要具备大量实际经验的架构师才能做。

在运用部分,采取的方法就是通过互动,让大家按照同样的思考框架来讲自己的所负责的系统,通过互动来更好的彼此对齐,并借此逐渐变成习惯。

上面只是对每个步骤的简单的阐述,后面会再来细节的写写上面的每个步骤内的点。

2 . 知识面拓宽这个倒还好,讲一个全站的系统架构就好,这样可以让知识面从业务架构、到基础技术架构、到涉及到基础设施的部署架构等。

相关文章
|
Java 程序员
收藏!阿里毕玄16篇文章,深度讲解Java开发、系统设计、职业发展
阿里毕玄结合自己的经历深度讲解Java开发、系统设计、职业发展等问题,快来一键收藏吧。
35433 1
|
算法
MATLAB求解线性方程组的八种方法
求解线性方程分为两种方法--直接法和迭代法 常见的方法一共有8种 直接法 Gauss消去法 Cholesky分解法 迭代法 Jacobi迭代法 Gauss-Seidel迭代法 超松弛迭代法 共轭梯度法 Bicg迭代法 Bicgstab迭代法
1414 1
|
Web App开发 前端开发 JavaScript
27 个前端动画库让你的交互更加炫酷
很多时候我们在开发前端页面时都会做一些动画效果来提升用户体验度和页面美观度,所以今天就来给大家推荐几个好用的JavaScript动画库,希望对各位小伙伴有所帮助!
3332 0
|
7月前
|
监控 安全 物联网
基于蓝牙BLE技术的蓝牙人员定位系统解决方案从原理到应用详解
蓝牙人员定位系统基于BLE技术,实现低成本、低功耗的米级精准定位。系统由信标、标签、网关和服务器构成,支持多源融合与开放平台集成,广泛应用于智慧工厂的报警管理、智能考勤、巡检及电子围栏等场景,提升安全与管理效率。
基于蓝牙BLE技术的蓝牙人员定位系统解决方案从原理到应用详解
|
2月前
|
SQL 人工智能 运维
【Skills专题】polardbx-sql :一句话帮你设计8亿行单表的 PolarDB-X 分区方案
PolarDB-X Skills 是专为AI代码智能体打造的数据库技能库,聚焦分布式分区设计。将PolarDB-X内核知识封装成可调用Skill,支持自然语言输入,自动生成精准、可执行的分区方案与DDL,覆盖SQL编写、运维及开发全场景。 更多精彩内容可关注“PolarDB”公众号
|
Cloud Native IDE Java
阿里云spring脚手架如何接入
阿里云spring脚手架如何接入
1324 2
|
存储 算法 Java
【JVM】垃圾释放方式:标记-清除、复制算法、标记-整理、分代回收
【JVM】垃圾释放方式:标记-清除、复制算法、标记-整理、分代回收
527 2
|
安全 Unix Linux
Linux优点
【8月更文挑战第8天】Linux优点
436 1
|
人工智能 自然语言处理 前端开发
|
前端开发 Java Spring
请求映射掌握:探讨Spring MVC中@RequestMapping注解的妙用
请求映射掌握:探讨Spring MVC中@RequestMapping注解的妙用
603 1
请求映射掌握:探讨Spring MVC中@RequestMapping注解的妙用

热门文章

最新文章