写点什么

架构师及其目标在软件项目中的挫折感

  • 2012-04-23
  • 本文字数:2229 字

    阅读完需:约 7 分钟

软件架构在软件项目中是否经常做得糟糕,经常被忽视了呢?这是 CodingTheArchitecture.com 的创始人兼独立咨询师 Simon Brown 在最近一篇博文中提到的一种现象。Brown 认为这是对架构的误解,是敏捷项目中随意的架构方法导致架构走到如此糟糕的境地。

Brown 说,脱离现实的象牙塔里的架构师继续损害着软件架构的声誉。很多架构师不是通过与开发团队的紧密合作设计出切实可行且深思熟虑的解决方案,相反,他们脱离开发者,交出一大堆高层规范。当软件架构师不能给项目带来直接价值时,其结果往往是架构工作被边缘化,致使一些并无准备的开发者承担软件设计的职责。Brown 认为这是架构面临的主要问题,而且敏捷项目使问题进一步恶化。他说,敏捷项目常常以快速交付之名忽视坚实的架构原则。

那些陈旧的软件架构到底是什么?许多软件开发团队认为他们并不需要软件架构师,取而代之提出了诸如“自治团队”、“YAGNI”、“演化架构”、“最后责任时刻”的术语。若他们的确需要架构师,那么他们寻找的可能是“敏捷架构师”。我并不太清楚这个词的实际含义,但是我猜它应该包含使用便签帖(Post It)代替 UML 或使用 TDD 取代架构图的意味吧。总之,我假设他们已经抛弃了仅使用高层系统隐喻的观念,并且没有把“紧急设计”作为期待一切顺利的借口。

希望仍然是有的。Brown 坚信任何项目中都有架构原则的一席之地。但是,他要求软件架构社区通过更好地工作来解释架构师的价值,为未来的架构师进行投资。InfoQ 联系到 Brown 并向他询问了一些关于架构的现状以及如何提升该角色相关的问题。

InfoQ:引用您**博文中一条评论,“架构师到底应该做什么?”**

Brown:“架构师”这一词汇所面临的主要问题是,每个人、团队或组织对它都有自己的定义。对我而言,软件架构师角色就是将技术领导力带入软件团队。我们坚信所有项目必须要有预先的设计,而其中妙处就在于如何做到“恰到好处”,简单来说,就是创建最初的高层结构,应对重大风险,确定其他团队成员认可的愿景。除了这些事先设计的工作之外,架构师的角色还要在整个交付生命周期中,在必要时刻负责并改进最初的设计。需要强调的一点是,我这里谈的是角色而非职位,该角色可由一个人承担也可有团队里的多人承担。我最近在 2012 伦敦的 QCon 大会上组织了一个研讨会,在会议上我回答了许多关于软件架构师角色的问题。读者可以从 http://www.codingthearchitecture.com/2012/03/13/photos_from_my_qcon_london_2012_tutorial.html 阅读问题小结,有意思的是我们在这里谈论的角色与许多组织里的该角色差别很大。

InfoQ:为什么您认为软件架构仍然被人们误解了呢?怎么才能更好地理解这一角色呢?

Brown:我认为软件架构被误解的原因是软件架构角色在行业中的名声太坏,另外许多关于它的科教材料都太抽象太学术化。所谓的“业务技术战略师”和“业务价值呈现”不会吸引开发者,相反大多数开发者对此望而却步。我们创建“Coding the Architecture”网站的目的就是为大家带来一种与软件开发者喜爱的务实且有效的软件架构视图。为什么?因为太多软件项目因为最基本的原因而失败,我非常喜欢看到软件架构能够简单地像软件开发角色的一部分,如此每个软件开发者都能拥有这样的基础。在我们梦想打造的自组织团队中,每个软件开发者发展成软件架构师是在正确的方向上发展中的理所当然的一步。

InfoQ:在这篇博文中,你提出了一个反问“敏捷需要架构或架构当真需要敏捷吗?”那么你自己如何回答这一问题。

Brown:所有的软件项目,不论它有多敏捷,都应该考虑“架构”,因为重要的非功能性需求和限制并未消失。所以答案是肯定的,敏捷项目需要软件架构师角色,但是不幸的是许多项目团队由于迫不及待地采用敏捷而忘记了这一点。而另一方面,传统项目的软件架构也需要从轻量级方法学习很多,而敏捷成功地展示了这一点,它告诉人么不需要为每件事做大量的前期设计。

InfoQ:你认为从开发者发展成架构师是自然而然的吗,有没有从别的方向发展过来的不同的路径。

Brown:这又是一个只能回答“看情况”的问题。有一些软件开发者对职业的爱好是受编码驱使的,他们喜欢在这个层面上保持创造力。而另外一些人则喜欢在更广阔的范围内迎接软件设计的挑战。我所认识的最好的架构师都有深厚的技术功底,而且在其成为“技术大牛”之后才转做架构师的。对技术的理解非常关键,而退一步从“全局”去理解软件及其部署环境背后的驱动力同样重要。一个好的软件架构师要二者兼备,这解释了为什么并非每个软件开发者的下一步发展方向都是架构师的问题。另外,还要消除一个神秘观念,事实上,成为软件架构师并不意味着放弃编码。

InfoQ:你如何在一个组织中“培养”架构师?

Brown:很不幸,许多公司里都没有这回事。大多数的情况是,软件架构师或者被扔进泥潭任凭他们在那里挣扎,因为他们得不到帮助和支撑,或者他们被推向管理岗位。如果组织鼓励角色间的协作,鼓励已经在架构师职位的人去指导或带领其他人,那么培养软件架构师的技能就变得非常简单。整个软件团队都要采用软件架构,为何不让他们参与进来并影响它呢?此外,组织还可以组织一些内部“架构实战营”,这样人们就可以实践从头开始设计软件。说到底,有多少软件架构师能够这样有系统地实践架构呢?

您可以访问 http://www.codingthearchitecture.com/2012/01/05/contextualising_just_enough_up_front_design.html 获取更多关于软件架构实践的更多指导。


查看英文原文: Frustration with the Role and Purpose of Architects on Software Projects

2012-04-23 21:534688
用户头像

发布了 184 篇内容, 共 88.8 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

每次启动项目的服务,电脑竟然乖乖的帮我打开了浏览器,100行源码揭秘!

若川

JavaScript 前端 前端开发 Node

有关 Java 9 的 String

HoneyMoose

linux检测系统是否被入侵(上)

入门小站

Linux

初学者也能看懂的 Vue2 源码中那些实用的基础工具函数

若川

JavaScript Vue 前端 前端开发

攻防演练中蓝队针对攻击方式复盘总结

穿过生命散发芬芳

6月月更 攻防演练

在线JSON转PlainText工具

入门小站

工具

每次新增页面复制粘贴?100多行源码的 element-ui 新增组件功能告诉你减少重复工作

若川

JavaScript Vue 前端 Element Element UI

云厂商为什么都在冲这个KPI?

脑极体

50行代码串行Promise,koa洋葱模型原来是这么实现?

若川

JavaScript 前端 Node Jest koa2

本周二晚19:00战码先锋第8期直播丨如何多方位参与OpenHarmony开源贡献

OpenHarmony开发者

OpenHarmony

Java 中的 String Pool 简介

HoneyMoose

Docker 化 Vue2 应用开发

devpoint

Docker Docker 镜像 6月月更

SpringBoot-入门

zarmnosaj

6月月更

Java Core「18」JCF 及常见问题

Samson

学习笔记 Java core 6月月更

【使用Python实现算法】01 语言特性

★忆先★

Python 算法 算法题

熊市慢慢,Bit.Store提供稳定Staking产品助你穿越牛熊

BlockChain先知

企业架构师面试的100个问题

涛哥 数字产品和业务架构

企业架构师

剑指 Offer 65. 不用加减乘除做加法

未见花闻

6月月更

深入理解 Jetpack Compose SlotTable 系统

fundroid

android Compose android jetpack SlotTable gap buffer

云原生运维文章计划

boaker

运维 云原生

新手向:前端程序员必学基本技能——调试JS代码

若川

JavaScript 前端 前端开发 调试 Node

自定义MySQL连接池

FunTester

于文文、胡夏等明星带你玩转派对 皮皮APP点燃你的夏日

联营汇聚

信通院举办“业务与应用安全发展论坛” 天翼云安全能力再获认可

极客天地

flutter系列之:flutter中的变形金刚Transform

程序那些事

flutter 程序那些事 6月月更

为什么 Vue2 this 能够直接获取到 data 和 methods,源码揭秘

若川

JavaScript Vue 前端 前端开发 源码解析

Java中数组参考指南

okokabcd

Java’

Flutter SliverAppBar全解析,你要的效果都在这了!

yechaoa

flutter android 6月月更 SliverAppBar

从22行有趣的源码库中,我学到了 callback promisify 化的 Node.js 源码实现

若川

JavaScript node.js 前端 前端开发 Node

K8S学习笔记--《容器化的应用:会了这些你就是Docker高手》

IT蜗壳-Tango

IT蜗壳教学 6月月更

不得利用算法从事垄断行为:防范利用算法和大数据进行杀熟

石头IT视角

架构师及其目标在软件项目中的挫折感_研发效能_Richard Seroter_InfoQ精选文章