随想录(学习《许式伟的架构课》)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

 

    市面上关于软件架构的课程大概有这么几种,

    1、设计模式类,比如《设计模式》、《软件架构与模式》;

    2、具体技术类,比如《重构》、《代码大全》、《代码整洁之道》、《软件架构设计:大型网站技术架构与业务架构融合之道》;

    3、理论方法、玄学类,比如《软件架构》、《架构师修炼之道》、《设计模式之禅》;

    4、软件工程类,比如《软件工程》

    5、语言类,比如《thinking in uml》

    6、开发模式类,比如《敏捷开发》、《结对编程》、《极限编程》、《测试开发驱动》

 

    但是,一个公司里面的软件架构师究竟是怎么工作的,这方面的书籍还是比较少。五一假期,正好趁着有一点时间,学习了一下《许式伟的架构课》,还是有一些收获的,作成笔记,记录下。

 

A、架构师和工程师的唯一区别就是对全局的掌控能力

    工程师大部分都是学习了c、cpp、数据库、网络之后,就开始忙着做项目了。相比较架构师而言,他们在全局的把控能力上往往表现不足。一个软件的质量,也不能能仅仅依赖于工程师的个人水平,必须有架构师对全局进行把控。

 

B、架构师最需要掌握的能力是对未来的预判能力

    通常一个软件的开发,就是从产品经理拿到需求、软件架构进行需求分析和拆解,搭建架构、工程师领到任务开始产品开发。如果事情仅仅是这么简单,那么确实软件架构师的角色无足轻重。实际工作中,我们会发现软件变更的需求一直都在,这个时候,软件架构师在软件设计的时候,考虑的就不仅仅是软件架构能不能满足当前业务的发展,还关系到它能不能满足未来业务的发展。从这方面来说,对未来业务的预判能力,在当前软件设计的时候,就留下必要的软件接口,这是十分必要的。

 

C、架构设计的精髓来自于独特的架构设计

    一个好的架构设计是不断迭代的,他一定有架构师自己独特的架构设计。这种设计不仅仅表现在用了什么语言、什么编程方法和调试方法、什么设计模式,更多地表现在最小系统的考虑、软件主流程的设计、周边功能的扩展设计等等。

 

D、架构师的主要职责

    用庖丁解牛来解释架构师的主要职责是最恰当不过的。从产品过来的需求是纷繁复杂的,这个时候就需要对需求进行归类,对流程进行梳理、抽象。对这些需求进行正交分解,找出最小系统,分析出主流程,分层分块处理、设计扩展接口的方法,这才是架构师的主要职责。这个最小系统,有数据结构、有接口、有流程,这个抽丝剥茧出来的东西才是最有价值的东西。

 

E、架构和业务的关系

    架构永远是为业务服务的,没有一层不变的业务,因此也就没有一层不变的架构。当架构可以满足业务发展的时候,架构和业务就是适配的;当架构和业务脱节的时候,这个时候就要对架构进行重构。有一本书叫《重构》,这方面其实讲的挺好的。

 

F、软件工程与架构的关系

    软件开发流程是一个系统工程,软件架构只是其中的一个环节。一个好的软件开发需要包括开发、设计、测试等多个部门,如果复杂一点的嵌入式软件,客户开发还涉及到bsp、图形界面GUI、中间层、app层业务,服务器开发涉及到网络、数据库、算法调用、业务开发等多个领域。所以,软件架构很重要,但是也只是一个环节而已。不要放大这个角色的作用,也不要缩小。

 

G、最重要的沟通能力

    软件架构不是架构师一个人的职责,它是架构师为主导,通过不停沟通的方法逐渐形成的。沟通的过程中既可以发现软件架构的错误,还能让工程师提前了解软件架构的意图。因此从这方面说,沟通能力也是架构师必须掌握的硬核能力。

 

H、目前国内的实际情况

    就目前来说,软件架构师还是需要在技术上有所经营的,只有自己精通1-2个知识点,才能在团队中获得信任,这是一个必要非充分条件。

 

I、比较好的架构设计之路

    一般来说,架构设计师需要以编程语言为基础,以uml为工具,用设计模式提到的设计原则(比如单一职责原则)和设计模式(23种模式)对业务抽象处理,配合和落实软件工程方法,积极和团队沟通,复用业界成熟的架构方案,构建自己的软件流程特点,一步一个脚印满足客户的业务需求和发展。

 

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页