写点什么

谦卑的架构师

  • 2013-12-28
  • 本文字数:2297 字

    阅读完需:约 8 分钟

Johannes Brodwall 是一位程序员、解决方案架构师、用户组与会议组织者、会议演讲者与布道师。Johannes 一直在不遗余力地将敏捷原则应用到大型软件项目中,不过他真正感兴趣的是与全世界的程序员分享更多关于编程的有趣经验。目前,Johannes 就职于 Exilesoft,担任首席科学家一职。近日,Johannes 撰写了题为谦卑的架构师一文,探讨了架构师所应该遵循的几个原则,在程序员群体中引起了很大的反响。

谦卑并不是软件架构师一个非常常见的特质。我曾与一些可怕的架构师共事过,最近也与一位非常棒的架构师合作过。基于此,我根据每个架构师都喜欢的方式将我过去的经验汇聚起来,以规则集的形式写出来,与大家一起分享并讨论。

规则 0:不要愚蠢地做出假设

看起来有些架构师会觉得一旦让开发者自行处理某些事情,那么他们就会像猴子那样杂乱无序。根据我的经验,这种情况其实是很少会出现的。只有一种情况会让开发者做傻事,那就是他们在心里默默抵触架构师。如果遵循着这条原则,那么其他的都将是细节问题。

规则 1:你可能是错误的

在审查某人的设计想法时,我更倾向于以坦诚布公的方式询问问题。也许我觉得开发者忽略掉了某个关键的事实,比如说并发等。对于这种情况有几种不同的方式:

  • 架构师:你不能那样做,因为它破坏了编码规范。
  • 架构师:你不能那样做,因为当同时有几个用户时是不安全的。
  • 架构师:你想过它是如何处理几个用户的情况的么?
  • 架构师:你提出的解决方案是如何处理几个用户的情况的?

亲爱的架构师们:请对这些方式评级,按照从最差到最好的方式排序(提示:这是个很简单的事,不过很多架构师却还是做不好)。

规则 2:对技术保持谨慎的态度

每种技术都是有代价的,而很多技术所带来的好处是非常有限的。下面是我使用过的一些代价要远远高于所带来的好处的一个技术列表(如果不知道也没关系,关键在于数量):JavaServer Pages、Java Server Faces、JAX-WS、Hibernate、Spring、EJB、Oracle SOA Server、IBM WebSphere、Wicket、Google Web Toolkit、Adobe Flex、JBoss jBPM、JMS(所有实现)与 JBoss。下面是我非常喜欢使用的一个技术列表:JUnit、Jetty、Joda-time 与 Java 标准版。

看看下面的对话吧:

  • 架构师:你应该使用技术 X。
  • 我:我看过技术 X,不过不清楚怎样通过它来解决业务问题。
  • 架构师:你的意思是?
  • 我:这是我们需要做的事情。。。这是技术 X 所能解决的问题。。。我不知道他们之间是如何匹配的。
  • 架构师:那你的建议是什么呢?
  • 我:我觉得可以通过普通的 Java 来解决这个问题。事实上,昨天晚上我已经做了一个很不错的概念验证。
  • 架构师:太酷了,我们就这么干吧。

规则 3:一致性并不如你所想象的那么重要

我总听到有人这么说:

架构师:没错,我知道这种方式看起来很笨拙,不过你必须这么做。你也看到了,如果不这么做,那么系统就会变得不一致,也难以维护。

好吧,我确实很少接触维护方面的工作,不过我知道在处理任何系统时,最困难的部分在于理解系统的业务逻辑。系统 X(有自己的一套业务逻辑)与系统 Y(有另一套业务逻辑)是否是一致的并不那么重要。如果说系统 X 非常复杂的原因在于它为了保持与系统 Y 的一致性而增加了很多层次,那我真的要抓狂了。不同的上下文有不同的权衡。还记得规则 0 吗,开发者在给定的上下文进行开发,那么他就会为该上下文创建一个很好的解决方案。另外,我还从来没有见过规模不大的系统非常复杂,等系统逐步变大时就变得更好维护了。如果程序员感到不爽的原因只是因为有些代码的花括号使用的是一种风格,而另外一些代码则采用了其他风格,那么我也真的要崩溃了。

规则 4:至底向上的一致性要优于自上而下的一致性

我有一种方式可以实现系统中更多的一致性:

  • 创建一个参考应用,并使用易于遵循的架构。如果这件事干得好,那么开发者们就会始终记得不要偏离这个架构。除非他们不想,否则这么做就没问题。
  • 培育一种互助的文化。能够看到彼此代码的开发者要比那些只看到自己代码的具有更好的一致性。结对编程、代码审查以及技术分享讲座都有助于这种文化的培育。

规则 5:跨系统的重用是次要的优化

重用会导致耦合。如果系统 X 与系统 Y 重用了某些功能,系统 X 需要修改某个功能,这就会影响到系统 Y。至少,系统 X 的开发团队必须要对重用的功能创建一个私有的分支,这意味着该功能实际上并不会再被重用了。更糟糕的是,被重用的功能的某个改变会导致系统 Y 出现 Bug。在进行跨系统重用时,你所重用的应该是要么稳定的(比如说,Java SE 平台,或是某个非常稳定的功能),要么是策略性的。根据策略重用,我指的是集成了信息而不仅仅是复制功能的服务。换句话说,重用要么是使用,要么是集成。重复是你的朋友。

规则 6:分清规则与教条

任何编码标准都需要有原则,原因有 3:

  • 不安全:代码的 Bug 只会在某些情况下才能显现出来
  • 费解的:我不理解接下来的事情
  • 异端:某些人不喜欢某些代码风格

如果有一条规则说到“所有属性都必须要有 JavaDoc 注释”,那么你认为这是个安全问题、让人费解的问题还是异端呢?看看下面这个代码示例:

复制代码
/**
* Contains the name value of the object
*/
private String name;

如果规则这样说到“左花括号不能另起一行”,那么这条规则呢“花括号的风格应该保持一致”?这是个什么问题呢?我们应该将更多的精力放在编写恰当的代码上,而不是被这些该死的一致性搞得心烦意乱。

规则 7:请保持谦卑的态度

在从事软件开发的这些年中,我看到软件架构师的所作所为带来的更多是损害而非帮助。作为一个专业的角色,我认为如果能将这些架构师从团队中剔除出去将会节省不少开支。如果你所从事的职业给团队带来的弊大于利,那么你有两个选择:一是不断改进自己,二是寄希望于没人会注意到你。

2013-12-28 04:475834
用户头像

发布了 88 篇内容, 共 271.0 次阅读, 收获喜欢 9 次。

关注

评论

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

微服务中台技术之视频处理

小江

架构 ffmpeg 视频处理 电商系统

微博评论高性能高可用计算架构

李大虾

#架构实战营 「架构实战营」

从“半部电台”到“云监工” 天翼云助力红色电信启航新征程

天翼云开发者社区

云管平台提供的功能一般包括哪些?采购需求主要是什么?

行云管家

云计算 企业上云 云管平台 云管理

AI+生物计算:用计算机视觉技术理解细胞生命

百度大脑

对话|鲜丰水果:“看不见”的门店数字化

阿里云云效

云计算 阿里云 云原生 持续交付 数字化运维

图数据库实操:用 Nebula Graph 破解成语版 Wordle 谜底

NebulaGraph

数据库 开源 图数据库 分布式图数据库

缓存最关心的问题是什么

华为云开发者联盟

Java 缓存 堆内存 缓存命中率 回收策略

OpenVSCode云端IDE加入Rainbond一体化开发体系

北京好雨科技有限公司

源码详解数据结构Linked List

华为云开发者联盟

Java ArrayList 框架 linkedlist 双向链表

天翼云中南数字产业园落地长沙“天心数谷”初具雏形

天翼云开发者社区

全运会开幕!天翼云全力打造“智慧赛事”

天翼云开发者社区

云原生技术赋能ISV实现应用现代化

York

云原生

昇腾CANN论文上榜CVPR,全景图像生成算法交互性再增强!

Geek_32c4d0

昇腾

Java培训JVM 高频面试题

@零度

JVM JAVA开发

Rust基本概念

Shine

读书笔记 rust

为什么要进行企业知识管理,这三个重点问题要明确

小炮

【C语言】猜数字小游戏

謓泽

3月月更

测试在项目流程中的那些事儿

有道技术团队

液冷数据中心如何构建,蓝海大脑液冷技术保驾护航

GPU算力

液冷服务器

2. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml

MASA技术团队

沈阳飞桨领航团Meetup邀请你来,探索AI如何赋能智慧城市

百度大脑

在页面中直接嵌入vue-sfc的方法

CRMEB

4个迭代,从批量交付到持续交付转型

阿里云云效

云计算 阿里云 云原生 研发团队 研发

它来了,它来了!开源圈 KOL 的江湖对谈第二季要来了!

OpenTEKr

开源 程序员人生 开源社区 开源软件 优秀开源项目

创新的力量天翼云推动科技创新技术实践落地

天翼云开发者社区

【堡垒机】2022年云堡垒机品牌排名大比拼!

行云管家

云计算 网络安全 堡垒机 企业安全

web前端培训Node.js和JavaScript的关系

@零度

JavaScript node.js 前端开发

观点丨新经济 DTC 转型,一个简单而强大的数据平台至关重要

PingCAP

VuePress 博客之 SEO 优化(二)重定向

冴羽

Vue 前端 vuepress SEO 重定向

加密市场普跌 虎符交易所平台币HOO却能连续2个月逆势上涨

区块链前沿News

Hoo 虎符交易所 平台币

谦卑的架构师_架构_张龙_InfoQ精选文章