- 推荐序一:架构师真正要学会的事情
- 推荐序二
- 译者序 2.0
- 序
- 关于本书
- Part Ⅰ 什么是软件架构
- 第 1 章 什么是架构
- 第 2 章 架构的种类
- 第 3 章 软件架构是什么
- 第 4 章 敏捷软件架构是什么
- 第 5 章 架构对上设计
- 第 6 章 软件架构重要吗
- 第 7 章 问题
- Part Ⅱ 软件架构的角色
- 第 8 章 软件架构的角色
- 第 9 章 软件架构师应该编码吗
- 第 10 章 软件架构师应该是建造大师
- 第 11 章 从开发者到架构师
- 第 12 章 拓展 T
- 第 13 章 软技能
- 第 14 章 软件架构不是接力运动
- 第 15 章 软件架构要引入控制吗
- 第 16 章 小心鸿沟
- 第 17 章 未来的软件架构师在哪里
- 第 18 章 每个人都是架构师,除非他们有其他身份
- 第 19 章 软件架构咨询师
- 第 20 章 问题
- Part Ⅲ 设计软件
- 第 21 章 架构驱动力
- 第 22 章 质量属性(非功能需求)
- 第 23 章 处理非功能需求
- 第 24 章 约束
- 第 25 章 原则
- 第 26 章 技术不是实现细节
- 第 27 章 更多分层等于更高复杂度
- 第 28 章 协同设计是一把双刃剑
- 第 29 章 软件架构是对话的平台
- 第 30 章 SharePoint 项目也需要软件架构
- 第 31 章 问题
- Part Ⅳ 可视化软件
- 第 32 章 沟通障碍
- 第 33 章 对草图的需要
- 第 34 章 无效的草图
- 第 35 章 C4:语境、容器、组件和类
- 第 36 章 语境图
- 第 37 章 容器图
- 第 38 章 组件图
- 第 39 章 是否包含技术选择
- 第 40 章 你会那样编码吗
- 第 41 章 软件架构和编码
- 第 42 章 你不需要 UML 工具
- 第 43 章 有效的草图
- 第 44 章 C4 的常见问题
- 第 45 章 问题
- Part Ⅴ 为软件生成文档
- 第 46 章 代码不会讲述完整的故事
- 第 47 章 软件文档即指南
- 第 48 章 语境
- 第 49 章 功能性概览
- 第 50 章 质量属性
- 第 51 章 约束
- 第 52 章 原则
- 第 53 章 软件架构
- 第 54 章 外部接口
- 第 55 章 代码
- 第 56 章 数据
- 第 57 章 基础设施架构
- 第 58 章 部署
- 第 59 章 运营和支持
- 第 60 章 决策日志
- 第 61 章 问题
- Part Ⅵ 开发生命周期中的软件架构
- 第 62 章 敏捷和架构的冲突:神话还是现实
- 第 63 章 量化风险
- 第 64 章 风险风暴
- 第 65 章 恰如其分的预先设计
- 第 66 章 初识软件架构
- 第 67 章 问题
- Part Ⅶ 金融风险系统
- 第 68 章 金融风险系统
- Part Ⅷ 附录:技术部落 的软件指南
第 9 章 软件架构师应该编码吗
既然我创建了一个叫作编码架构的网站1,我猜这个问题的答案就不出人意料了。在我理想的世界观中,软件架构师应该编码。曾经有人告诉我,优秀架构师的重要特征是抽象思维能力,也可以理解成不把所有时间都耗在细节里的能力。这没错,但你画的那些框框线线终归要形成代码。
1http://www.codingthearchitecture.com
编写代码
我的建议是让编码成为你作为软件架构师角色的一部分,只要把自己当作软件开发团队的一份子就行了。换句话说,你有一顶软件架构的帽子和一顶编写代码的帽子。你不见得要成为团队里写代码最厉害的,但参与到实践和交付流程的好处非常大。毕竟,“知”和“行”还是不同的。
团队欣闻你要贡献代码,通常会受到鼓励,确保你的设计能落到实处。如果没有,那么一旦你站在开发者的角度明白了这个问题,很快就能体会到那种痛苦。
创建能实际实现的软件架构,这样做的好处显而易见,除此之外,贡献代码还能帮助你和团队建立起融洽的关系,有助于缩短存在于很多软件团队的架构师和开发者之间的距离。引用瑞秋·戴维斯(Rachel Davies)和丽兹·赛德利(Liz Sedley)在《敏捷教练:如何打造优秀的敏捷团队》2一书中说的话:
2http://pragprog.com/book/sdcoach/agile-coaching
如果你了解如何编程,往往会忍不住对开发者该如何编写代码提出建议。小心,因为你可能在浪费时间:如果你没有参与项目的编程,开发者多半会无视你的编码经验。他们还会认为你越权,影响了他们的工作,所以尽量别在这方面指指点点。
构建原型、框架和基础
当你被看作开发团队的一员时,软件架构的角色可能会轻松得多,然而有时这却不太可能。晋升或被指定为软件架构师带来的一个问题在于,你可能会发现自己不能像期望的那样写很多代码。这可能因为时间压力,因为你有很多“架构”工作要做,或者只是公司政策不允许你写代码,我见过这样的情况。如果是这样的话,对软件系统中有疑问的概念构建原型和证明是一个很好的参与方式。这让你可以和团队建立起融洽的关系,也是评估你的架构是否管用的好办法。
作为替代,你可以帮助建立团队可用的框架和基础。试着抵挡住构建好这些东西再交给团队的诱惑,因为这样可能会适得其反。软件开发非常容易赶潮流,所以小心别构建出一个东西却被团队当作毫无价值的过时破烂!
进行代码评审
显然没有什么能代替给真正的项目编码,我也不推荐把代码评审作为一个长期的战略,但参与(或做)代码评审至少能让你了解新技术及其应用。对于你没有经验的技术,挑剔或参与讨论可能会损害你的名声。我记得自己曾不得不向一个从未写过一行Java代码的架构师解释自己的Java代码。那很无聊。
实验并与时俱进
你需要保持一定水平的技术知识,才能称职地用它来进行方案设计。但是,如果无法对交付做出贡献,作为架构师的你要如何维持编码技能?
在工作之外你往往有更多的空间来维持编码技能,从贡献开源项目,到不断尝试你感兴趣的最新语言、框架、API。书、博客、播客、会议和聚会都能达到这个目的。但有时候你必须跳出代码。这些事我当然都做过,乘坐公共交通工具长途通勤的一个好处是你有时间去玩技术。当然了,前提是你经过一天的辛勤工作还不犯困的话!
软件架构师和雇主之间的矛盾
我很幸运,我的软件架构角色中有相当部分的实践元素,大多数我参与的项目都有我的代码。我坚定地认为,机会是自己创造的。我仍然动手实践的原因可以这样表述:它是这个角色的重要组成部分。对我来说这很简单。设计软件时,编码是必不可少的,因为我需要熟悉最新的技术,搞清楚我设计的哪些东西能工作。另外,我得承认编码很有趣。
可惜,许多组织似乎认为编码是软件开发过程中最容易的部分,因此他们通常让另一个国家的其他人来做这件事,以为这样能省钱。好的代码在这样的组织看来也是“低价值”的。组织中软件架构师的资历和编码工作的价值就脱节了,矛盾由此产生。
以我的经验,小组织不会发生这种事,因为需要人手时每个人都要参与进来。是的,那些大型组织里的矛盾最严重。我曾在一个中等规模的咨询公司工作过一段时间,我的职位等级把我归入管理团队,但我仍会写代码。在某些方面,顶着“行政经理”的头衔,又能每天写代码,真是了不起的成绩!但有时这也让人很不舒服,因为其他经理经常会试图在其组织架构图里加上我的名字。
陷入这种情况是很麻烦的,只有你自己能摆脱它。无论你是在一个正在发生这种事的组织,还是想要离开是非之地,都要搞清楚你对软件架构师这个角色的看法,并准备好坚守自己的立场。
你不必放弃编码
说到这一点,我会经常被问及“如果软件架构师打算在公司的职业道路上有所作为,是否还能继续编码”,也就不奇怪了。这真是羞耻,尤其是如果这些人真的很喜欢他们所做的技术。
对此我的态度绝对是肯定的,你可以继续写代码。对我来说,听到人们说“好吧,为了成为架构师或在职业道路上更进一步,我明白自己不得不放弃编码了”,是相当令人沮丧的。有很多组织是这样的,肯定有很多人被告知组织中的高级职位不需要写代码。
软件架构师在满足非功能性需求、进行技术质量保证、确保软件符合其用途等方面,要承担很大的责任。这是一个领导的角色,编码(以身作则)是保证项目成功最好的方式之一。此外,如果软件架构师不保持技术能力,谁来培养更多未来的软件架构师?
不要把全部时间都用于编码
重申一下我的建议,软件架构师不必放弃编码。无论你怎么做,在不断变化的世界中,编码是一个保持技术能力的好办法。很多人认为软件架构是一种“后技术”的职业选择,但除了丰富的经验和更宽的知识面,它还需深厚的技术能力,需要能够回答设计是否真的管用这类问题的T形人才。把这归为“实现细节”是不可接受的。只是别把时间都花在编码上。如果你花全部时间写代码,那软件架构角色的其他部分由谁来扮演?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论