HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

谦卑的架构师

  • 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:475586
用户头像

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

关注

评论

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

夯实领军者地位 奶酪业务协同发展领先赛道

科技新消息

易观分析:海外业务亮眼,研发+IP运营助力中手游持续增长

易观分析

IP 中手游

压测做的不对,等于白做

基调听云

性能测试 压测 全链路压测

java培训浅谈程序员怎么避免面试过程中碰壁

@零度

面试 JAVA开发

打造中国优质奶源基地 筑牢高质量发展基石

科技新消息

61%!产品+渠道创新 蒙牛冰淇淋业绩收录有史高增长

科技新消息

大数据培训程序员面试屡次碰壁怎么办

@零度

面试 大数据开发

PolarDB-X 正式发布2.1.0版本,Paxos 重磅开源

阿里云数据库开源

数据库 阿里云 开源 分布式 PolarDB-X

天翼云新一代V5云主机,Kvm之生,Xen之死!

天翼云开发者社区

爆款国民冰淇淋原来是这样“凝冻”出来的

科技新消息

人工智能融合赋能平台,赋能智慧城市智能化升级

脑极体

Linux 管道操作符详解

CRMEB

专属云资源包计算规格探秘

天翼云开发者社区

天翼云分布式缓存服务(Redis)的应用场景(干货)

天翼云开发者社区

国内20家优秀一线低代码平台推荐,经典收藏

J2PaaS低代码平台

低代码 开发工具 低代码平台 J2PaaS低代码

领域驱动设计入门与实践[下]

LigaAI

团队管理 DDD 领域驱动设计思想 LigaAI

天翼云分布式缓存服务(Redis)的几个核心概念

天翼云开发者社区

把一整个生态圈藏进大沙漠 看蒙牛如何在每一滴奶中藏进玄机

科技新消息

【课程汇总】OpenHarmony全场景Demo数字管家系列课(附链接)

OpenHarmony开发者

OpenHarmony 数字管家

GPU时代来临!

Finovy Cloud

人工智能 gpu GPU服务器

程序员不好招了吗,web前端培训应该怎么学习

@零度

前端开发

蒙牛2021年报:数智化大脑为乳业插上腾飞翅膀

科技新消息

整机生产制造头部厂商雷神科技加入龙蜥社区

OpenAnolis小助手

Linux 开源 整机

每周更新 | Verilog测试用例及波形展示图功能上线

ShowMeBug

芝士就是力量!蒙牛2021年报笑出大大的CHEESE

科技新消息

洞见科技荣获隐私计算新势力奖!创始人姚明出席华夏时报「2022智能数据论坛」

洞见科技

隐私计算 数据智能

手绘模型图带你认识Kafka服务端网络模型

华为云开发者联盟

kafka 多线程 网络模型 Reactor多线程 Processor

制造业企业数据平台建设最佳实践分享

华为云开发者联盟

数字化转型 数据平台 制造业 华为工业云平台 数据应用

墨天轮访谈 | 腾讯张铭:带你揭秘王者荣耀背后的游戏数据库 TcaplusDB

墨天轮

数据库 TcaplusDB 国产数据库

再论ORACLE上云通用技术方案

天翼云开发者社区

实施知识管理过程中存在的问题(内附解决方案)

小炮

知识管理

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