[架构之路-91]:《软件架构设计:程序员向架构师转型必备》-1-从程序员到架构师,学习本书的路径

文火冰糖的硅基工坊 文火冰糖的硅基工坊     2023-02-19     110

关键词:

第1章 从程序员到架构师

本书不是从系统培训的角度,也不是按照软件的开发流程来组织内容的和展现软件架构师在不同阶段中的职责和作用,而是立足于程序员,展现程序员走向架构师的路径。

1.1 软件业人才结构

1.1.1 金字塔型,还是橄榄型?

在上文,从两个不同的角度展现了人才的架构:一是学历,二是能力。

在大部分的软件公司,是按照能力和角色来划分成才结构的,其中,软件叫架构师、系统工程师、技术经理都是在金字塔中的高级人才区间,中间人才包括高级软件工程师等。

1.1.2 从程序员向架构师转型

在该章节中,作者认为,一个软件企业的高级人才,通常不是以外聘为主,而是以内部培养为主。

程序员成长为架构师,不仅仅是程序员(员工)自己的职责(员工需要进行专项的自我提升),

同时也是HR的职责,HR需要定期分析公司的人才储备和人才结构,有组织有计划的培养和提拔高端人才;

同时也是部门经理的职责,程序员成长为架构师,需要大量的实践,这些实践都从项目中来,部门经理需要给程序员创造条件和机会,并且有计划的提拔人才。

在一个组织内部,一个程序员要成长为架构师,如果他认为仅靠自己的努力就能够达到,这未免过于可爱和天真了,估计是机器打交道太久了。在大部分的组织中,很大一部分的机会来自于组织内部,而不仅仅是程序员自己 。

1.1.3 架构师的主要任务

  • 理需求

  • 分模块

  • 定接口

  • 明时序

  • 画愿景

  • 找沟通

1.2 本书价值

不同的人,可以采用不同的路径读本书,不一定从头按顺序开始。

1.2.1 阅读路径1:架构设计入门

一个程序员要成为初级架构师,还是要立足于原有的知识结构,向外扩展:

(1)用逻辑视图和物理视图来描述自己用代码编写的软件系统。 =》两类重要的视图。

(2)按照特定的规则来分解与组织自己用代码编写的软件系统。 =》在视图内对系统进行功能分解。

一个程序员,如果在代码基础之上,能够完成上述两个步骤,就可以说,程序员已经能够跳出代码本身,初步具备了用架构师的抽象思维来观察、阐述整个软件系统了。

当然,要成为优秀的架构师,仅仅上述两个步骤还不够,还需进一步的学习。

1.2.2 阅读路径2:领会大系统架构设计

对于小型系统,可以从软件需求,直接到软件的逻辑架构和物理架构,而不需要经过中间的概念架构。

对于一个大型的软件系统,除了逻辑架构和物理架构之外,在软件系统还没有实现之前,还需要概念架构来阐述目标软件系统。概率架构是对软件系统关键需求的抽象和汇总,在软件需求和逻辑架构之间起承前启后的作用。所谓概念架构,主要是指软件的方案设计,业务方案,告诉程序员和客户,未来的软件系统如何解决客户的业务问题,因此,有时候也称为“市场”架构。概念架构关注可行性、可实现性以及方案的技术优势等,它并不关心如何实现,也不关心采用什么样的编程语言来实现。

1.2.3 阅读路径3:从需求到架构的全过程(全面、层次、系统、流程)

任何软件都是为了满足客户的业务需求。

在有些组织,需求的收集来自于项目经理或系统工程师。而架构师根据系统工程师的输出作为自己的输入,然后构建目标系统。

然而,真正优秀的架构师,需要有客户思维,要能够根据客户模糊的需求,还有客户真实的需求,然后把客户的业务需求转换成软件架构。或者这样说,优秀的架构师,要能够根据软件的架构识别出客户的业务需求,即能够理解软件的架构背后的业务业务需求。

从需求到架构的全过程,是一些列活动的集合,需要一群人的通力合作,它不仅仅是架构师的职责,中间还包括产品经理、市场经理、系统工程师。只有所有人员的通力配合,才构建了符合功能和性能要求的整个软件系统。优秀的架构师要能够从模糊的客户需求开始,整理和构建出能够满足客户需求的目标软件系统。

1.2.4 阅读路径4:结合工作,解决实际问题

在实际工作中,一方面,架构师要设计目标系统的架构,另一方面,架构师还需要协作开发团队,能够解决目标系统中的如下的一些技术问题:

  • 系统性、全局性的技术问题

  • 性能相关的技术问题

  • 疑难杂症相关的问题

  • 在业务领域与编程实现之间的映射,根据业务领域知识,决定技术解决方案 =》备注:很多程序员知道如何编程,是编程高手,但不知道程序背后的业务逻辑,而对业务逻辑的理解,以及如何映射成代码,这是架构师必须具备的能力。

对于业务领域知识的理解和归档,复杂度不同的目标软件系统,有不同的要求。

小型系统,有个需求列表就可以了,绘制简单的需求规格说明书即可。

对于中型软件系统,需要对需求进一步的细化,过于空洞的中型目标,软件开发人员不会知道如何实现。

景文档与需求列表的主要区别是,愿景文档更加的详细,展现的内容更多、视角更全,形式更多样。

需求列表通过excel就可以完成,景文档通常是word文档。

大型系统,相对于中型系统,增加了流程图,流程图的作用是描述复杂系统的内部的动态流程,包括:

  • 数据流程图

  • 行为、动作流程图

流程图是反应了“时间”对系统行为的影响。

补充:业务需求、用户需求、功能需求的区别

定义:官方

在产品的需求里面,经常有这三个概念:业务需求、用户需求、功能需求

但往往,我们很容易搞混,不清楚他们之间的关系和差异,我们先引用一下比较官方的解释:

业务需求( Business requirement )表示组织或客户高层次目标。业务需求通常来自项目投资人、购买产品的客户、实际用户的管理者、市场营销部门或产品策划部门。业务需求描述了组织为什么要开发一个系统,即组织希望达到的业务或战略目标。简单的说,就是赚钱的模式,如何赚钱。

用户需求( user requirement )描述的是使用该系统用户的目标,或用户要求系统必须能完成的任务。用例、场景描述和事件――响应表都是表达用户需求的有效途径。也就是说用户需求描述了用户能使用系统来做些什么。

功能需求( functional requirement )规定开发人员必须在产品中实现的软件功能,用户利用这些功能来完成任务,满足业务需求。

类比:房地产

这个解释其实还是蛮明确的,其实理解这三者的关键点,是要先认清楚每个需求针对的对象来源不一样:

业务需求——对应的是组织或者客户,实质就是业务的营销方,赚钱方;你也可以类比房地产市场的开发商

用户需求——对应的是使用产品的用户;你也可以类买房的人

功能需求——对应的是产品,即产品要具备怎样的功能,才能满足相应的业务需求和用户需求;类比房地产市场,也就是房子本身,针对的是房子的设计方、陈建方、开发方。

类比成房地产三个角色后,你发现,开发商通常的诉求是想多赚钱,买房的人诉求是买到物有所值,甚至物超所值的房子;但不管二者怎么想,最终都是需要通过房子来实现,必须建设的房子的属性达到某个标准才能满足二者的诉求。

所以,这么一看,你就明白了,其实这三者之间的关系是:

业务需求和用户需求,只有经过需求分析的转化,变成产品的功能需求后,才能得到实现。

做这个转换的是产品经理或系统工程师。

[架构之路-90]:《软件架构设计:程序员向架构师转型必备》-1-总结

前言软件行业技术开发从业人员众多,但具备若干年开发经验的普通的开发人员往往面临个人发展的瓶颈,即如何从普通开发人员转型成高层次的系统架构师和技术管理人员。想成为一名架构师,应当具备全面的知识... 查看详情

[架构之路-100]:《软件架构设计:程序员向架构师转型必备》-10-细化架构设计

...司:有财务、研发、有销售、有生产等部门一样。10.2程序员向架构师转型的关键突破——学会系统思考目标软件就是一个系统所谓系统思考,就是整体的视角参看整个系统,从不同的视角、不同的用户、不同的层面... 查看详情

[架构之路-95]:《软件架构设计:程序员向架构师转型必备》-5-需求分析之需求列表(功能需求质量需求约束条件)

前言:在业务需求分析领域,主要完成三个输出:需求列表:功能需求、质量需求、约束条件=》第5章用例图=》第6章概念架构=》第7章上述工作,通常是由需求分析工程师或系统工程师SE完成,也... 查看详情

[架构之路-96]:《软件架构设计:程序员向架构师转型必备》-6-需求与用户用例usercase/senario建模

第6章需求与用户用例UserCase建模备注:严格意义上讲,用户用例属于需求分析领域,不属于架构设计。用户用例是架构设计最重要的输入参考之一。UserCase和UserSenario是非常重要的描述需求的重要手段6.1常用的4种用例... 查看详情

[架构之路-103]:《软件架构设计:程序员向架构师转型必备》-13-软件架构如何分层(四层架构)

第13章如何分层13.1分层架构13.1.1常见模式:展现层、业务层、数据层13.1.2案例一则13.1.3常见模式:UI层、SI层、PD层、DM层13.1.4案例一则13.2分层架构实践技巧13.2.1设计思想:分层架构的“封装外部交互”思想备注:... 查看详情

[架构之路-90]:《软件架构设计:程序员向架构师转型必备》-0-总结

...路径。今天分享的这份资料主要包含:软件开发普通程序员向系统架构师转型的一些思路、方法和工程实践。也包括转型过程中意识形态的转变、技术体系的掌握、系统工程学的拓展及各项软技能的提升等内容。本书深入剖... 查看详情

[架构之路-93]:《软件架构设计:程序员向架构师转型必备》-3-软件架构设计中的视图view

前言:同一个软件系统,从不同的视角View,得到不同的视觉和感受。所有的视角得到的视觉感受综合而成了整个系统的架构。有些视角是用眼睛看,有些视角是耳朵听,有些视角用探测器探。不同的人,... 查看详情

[架构之路-94]:《软件架构设计:程序员向架构师转型必备》-4-软件架构设计的通用过程

第4章软件架构设计的通用过程本文给出了进行架构设计的通用过程,每个步骤过程的详细方法,在后续的章节中单独探讨。4.1架构设计的实践脉络/步骤4.1.1架构设计的三大原则:看需求、把方向、细设计(1)... 查看详情

[架构之路-94]:《软件架构设计:程序员向架构师转型必备》-4-软件架构设计的通用过程

第4章软件架构设计的通用过程本文给出了进行架构设计的通用过程,每个步骤过程的详细方法,在后续的章节中单独探讨。4.1架构设计的实践脉络/步骤4.1.1架构设计的三大原则:看需求、把方向、细设计(1)... 查看详情

[架构之路-92]:《软件架构设计:程序员向架构师转型必备》-2-解析软件架构的概念

...;很难统一。本文是按照作者个人的理解,来展现一个程序员如何向架构师演进的路径。第2章解析软件架构概念程序员要转向架构的第一道门槛就是:什么是架构?在众多定义中,如何立足自身的实际情况和起点&#... 查看详情

[架构之路-102]:《软件架构设计:程序员向架构师转型必备》-12-粗粒度“软件架构的功能模块”划分,架构师必备基础技能

第12章粗粒度“功能模块”划分备注:(1)功能划分的基本原则:高内聚、低耦合每个子系统、子模块可以独立设计(2)划分方法功能化水平切分垂直切分分层接口12.1功能树12.1.1什么是功能树同一层次的... 查看详情

[架构之路-105]:《软件架构设计:程序员向架构师转型必备》-15-模块划分的综合技术与4步骤法

15.模块划分的综合技术与4步骤法本章把前面切分模块的各种方法都综合了起来,模块划分的综合技术与4步骤法。15.1像专家一样思考15.1.1自顶向下vs.自底向上,垂直切分vs.水平切分15.1.2横切竖割,并不矛盾15.2模块划... 查看详情

[架构之路-92]:《软件架构设计:程序员向架构师转型必备》-2-解析软件架构的概念

...;很难统一。本文是按照作者个人的理解,来展现一个程序员如何向架构师演进的路径。第2章解析软件架构概念程序员要转向架构的第一道门槛就是:什么是架构?在众多定义中,如何立足自身的实际情况和起点&#... 查看详情

[架构之路-101]:《软件架构设计:程序员向架构师转型必备》-11-原型设计与架构评估与提前验证

11.架构评估与提前验证所谓架构验证,就是在架构还没有实施之前,通过原型的方法,提前评估和验证设计的架构是否合理、是否可行。软件原型模型又叫软件快速原型模型,它指的是在执行实际软件的开发之前&... 查看详情

架构师之路系列文章

目录文章目录目录企业数字化转型架构师之路业务架构应用架构API经济数据库设计设计模式系统架构分布式系统RPC远程调用分布式消息队列分布式任务队列微服务架构ServiceComb部署架构高可靠、高可用、高并发、高性能、高可扩... 查看详情

[架构之路-99]:《软件架构设计:程序员向架构师转型必备》-9-确定关键性需求与决定系统架构的因素

第9章确定关键性需求与决定系统架构的因素9.1概念架构是什么9.1.1概念架构是直指目标的设计思想、重大选择9.1.2案例1:汽车电子AUTOSAR——跨平台复用NA9.1.3案例2:腾讯QQvideo架构——高性能NA9.1.4案例3:微软MFC架构—... 查看详情

[架构之路-98]:《软件架构设计:程序员向架构师转型必备》-8-确定关键性需求与决定系统架构的因素

第8章确定关键性需求是什么决定了软件系统的架构?!没有大的争议的是:需求决定了软件系统的架构!那么什么样的需求对软件系统的架构影响最大?8.1众说纷纭——什么决定了架构8.1.1用例驱动论:功... 查看详情

[架构之路-106]:《软件架构设计:程序员向架构师转型必备》-16-常见的十余种软件分层架构

1.软件架构体系1.1.系统与子系统系统:泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。关联:系统是由一群有关联的个体组成的,没有关联的个体堆在一起不... 查看详情