软件架构的主要目的是希望能重用以前的代码和设计,从而提高开发效率;在保持系统稳定的前提下,扩充功能和性能。
如何提高系统设计能力
一般而言,开发人员在从事开发3年后基本可以逐步做出初步设计,再做设计3年基本能够具备架构设计的能力。架构设计虽然高屋建瓴,从顶朝下对问题进行分解并最终解决,但是你会看到真正所有能力却是来源于你日常的编码和日常功能模块设计的大量实践积累。
当然大部分软件开发人员并一定能够在其中具备软件设计能力,这涉及到思维意识的转变问题。比如前面提到的架构要具备自动化和复用,在设计阶段要有分层、分解、抽象、聚合等思维能力。
比如一个边缘设备日志收集上报云端功能,别人告诉你采用MQ去接收日志上报到云端,你去编码实现,那么具备的是编码能力,但是你自己能够对问题进行分析和建模,参考比较各种方案后,得出采用Kafka去接收并上报日志到云端,效率最高,并最终实现,那么就是具备了设计能力。
因此在日常的编码工作中,需要刻意去培养这方面的软件设计能力。
在架构设计领域,需要站在更高的层次,你面对的是一个完整的业务系统的构建。这个业务系统包括了底层技术框架的搭建,开源组件的选择,开发框架和分层设计这些非功能性的设计内容,同时考虑如何对各种业务进行分而治之。
架构设计能力的培养,偶觉得可以从如下几个方面进行:
1.务实技术基础
想要造高楼,基础必须要扎实,这里以Java为例,需要务实的基础有:Java基础、高并发、JVM优化、设计模式、数据库和索引。
现在有很多好的视频网站,能找到视频教程,比如哔哩哔哩,视频教程有个好处就是可以快进,回退,并且看起来比较轻松,偶喜欢看书,书看的比较仔细推荐书籍有:《On Java》(新版Java编程思想)、《Java并发编程的艺术》、《深入理解Java虚拟机》、《高性能Mysql》、《HeadFirst设计模式》。。。。。。
一边看书,一边实战、一边记录写成博客系列教程,同时又能锻炼自己的文笔和口才,说不定还能收获一批粉丝,打造自己的个人IP,扩大自己的影响力,如果写的好的话,还能转成收费专栏,还能有一部分收入。
2.培养软件设计能力
设计能力往往就是从编码和编程思维开始的。
首先是将重复的东西自动化掉,其次是将相似的东西通过参数抽象变成可复用的方法或函数,在抽象后来实现自动化。其次就是自动化后你会发现如何更好应对变化,为了应对变化你做了更多的抽象或接口设计,在这个过程中逐步积累设计能力。这一个步骤你会发现你的就是某种设计模式来解决的问题。
其二就是编码积累到一定量后,你可以看软件架构设计的书籍,先形成设计的完整思路和方法论,也可以看设计模式类的书籍,对设计模式有一个完整的了解,能够将日常编码实践的内容和设计模式进行对比分析。这样再遇到类似的问题,你可以少走自己探索的弯路等。
但是以上也仅仅解决了设计能力的问题。
没有解决架构思维层面的问题,架构思维的核心是全局能力,是高度的抽象和建模能力,是既要清楚业务,又要懂得技术的相互衔接能力。
当然大部分架构设计人员更加热衷于开发框架,技术平台,开源组件选择等,而忽视了如何从一个业务需求的提出,你能够通过系统分析,得出整个业务系统应该如何划分模块,如何设计接口,如何设计整体数据模型和数据库来支撑业务,同时你也能够想清楚你需要遵循什么样的开发框架和模式以及分层架构来完成某一个功能模块的开发。
这个事情实际相当有难度,大部分人员不具备这个能力。
但是为何很多人架构设计还是做得不错,简单来说整个信息化和互联网发展到今天,各种业务系统,电商平台,互联网应用你基本都可以找到类似的架构参考和原型,你只需要参考别人的做法去做即可。
比如你要做一个电商平台,具体应该如何分解各个子系统,或者是否建立各个中台能力中心,这些都有标准的做法,不需要你再去创新,你只需要参考别人实践去做即可。
但是如果你面对一个全新业务,你要去规划和构建整个业务系统的架构设计,模块划分,偶相信大部分架构设计人员都无法做好这件事情。这个能力已经不是简单的你技术多牛,而是考察的全局思维和系统观,考察的是分解和集成,分类和抽象,问题分析和解决,模式匹配能力,这些能力统筹偶经常谈到的思维能力。
如果一个人真正具备这种独立分析和解决问题的能力,具备系统思维的能力,你会发现他不仅架构设计做得好,其它很多事情都能够很好的完成。就是这个道理。
所以要具备这方面的能力,你可以先熟悉相关的业务域知识,也可以看看完整的类似面向对象的软件架构设计书籍,领域驱动建模书籍,传统的类似RUP统一软件过程方法论等。看看完整的业务需求如何通过流程分析,用例建模,对象建模,接口设计逐步落地。
3.培养创新和激情
创新并不只是想出一个新颖的点子,创新是把点子转换成经济力量的工作,按照Joseph Tidd、John Bessant、Keith Pavitt 的理论,创新分为产品创新、过程创新、位置创新、范式创新。
- 产品创新:改变一个单位提供的东西(产品或者服务)
- 过程创新:改变产品或者服务生成或配送的方式
- 位置创新:改变引入某产品或者服务的前后关系
- 范式创新:改变单位所做业务的基础精神模型
为了能够创新,需要找到一定的边界,这能够让你有学习、适应和恢复的空间,而不必过多的关注其中产生的错误,如此让灵感变成为现实的创新产品。
保持激情能够让你感觉是在做自己的事,而不是别人让你做事,要在架构师工作中发现激情、保持激情,当激情被别人浇灭的时候,要学会重启激情,把难事做好,尽心尽力投入,用激情作为前进的动力,同时坚持锻炼,这样才能一直在架构师的路途上不断走下去,成为一名出色的架构师。
以上内容分享自华为云社区《【云驻共创】怎么提高自己的系统设计和架构理论水平》,作者:阿提说说。