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

第1章 从程序员到架构师

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

(1)第一步拓展与蜕变:对现有代码进行基本架构抽象 =》 逻辑架构+物理架构+模块划分

(2)第二步拓展与蜕变:对现有大系统代码进行关键功能的架构抽象 =》 关键性架构,概念架构

(3)第三步拓展与脱变:从无到有构建目标系统 =》这是最难的,从需求到架构,全面设计5+1模型

(4)第四步拓展与脱变:从架构师到解决难题、解决核心问题、解决性能问题推动者领导者

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:领会大系统架构设计 =》程序员=》大系统架构

这种方式:在已有系统上,由初级系统架构师转型大系统架构师。

对于小型系统或在已有的软件系统之上转型架构,可以从软件需求,直接到软件的逻辑架构物理架构,而不需要经过中间的概念架构

对于一个大型的软件系统,除了逻辑架构和物理架构之外,在软件系统还没有实现之前,还需要概念架构来阐述目标软件系统。

概念架构(Conceptal Arch)是对软件系统关键需求(不是全部需求)的抽象和汇总,在软件需求和逻辑架构之间起承前启后的作用。

所谓概念架构,主要是指软件的方案设计,业务方案,告诉程序员和客户,未来的软件系统如何解决客户的关键性业务问题,因此,有时候也称为“市场”架构,而忽略软件系统的附属性、基础性、修饰性、扩展性功能。

概念架构关注可行性、可实现性以及方案的技术优势等,它并不关心如何实现,也不关心采用什么样的编程语言来实现。

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

这种方式:由在别人架构好的系统上架构师转型能够架构自己的软件系统的架构师!!!

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

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

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

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

优秀的架构师要能够与需求人员一起,从模糊的客户需求开始,整理和构建出能够满足客户需求的目标软件系统。

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

这种方式:适合架构师不仅仅架构系统,还要能够解决系统中难题!!!

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

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

  • 性能相关的技术问题

  • 疑难杂症相关的问题

  • 在业务领域与编程实现之间的映射:根据业务领域知识,决定技术解决方案 =》备注:很多程序员知道如何编程,是编程高手,是计算机领域的专家,但不知道程序背后的业务逻辑,而对业务逻辑的理解,以及如何映射成代码,这是架构师必须具备的能力。对业务领域知识的缺乏,是很多程序员向业务领域架构师突破所面临的厚厚的壁垒!!!如通信系统的架构师,需要熟悉通信的业务知识,而不仅仅熟悉业务知识。

1.2.5 需求建模

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

(1)小型系统

有个需求列表就可以了,绘制简单的需求规格说明书即可,如下图所示:

(2)对于中型软件系统

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

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

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

(3)大型系统

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

业务流程图包括:

  • 数据流程图

  • 行为、动作流程图

  • 时序图

  • 状态图

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

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

定义:官方

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

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

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

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

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

类比:房地产

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

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

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

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

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

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

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

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文火冰糖的硅基工坊

你的鼓励是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值