写点什么

谦卑的架构师

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

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

关注

评论

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

杭州等保测评公司有哪些?分别叫什么?如何能查到?

行云管家

等保 等级保护 等保测评 杭州

Tapdata PDK 生态共建计划启动!MongoDB、Doris、OceanBase、PolarDB等十余家厂商首批加入

MongoDB中文社区

如何通过Password Vault的XSS漏洞窃取用户密码信息

喀拉峻

网络安全 XSS

在Rainbond上部署高可用Apollo集群

北京好雨科技有限公司

AliPLC 智能丢包补偿算法,提升弱网环境的通话质量

阿里云CloudImagine

音视频 音频 视频云 音频算法 丢包补偿

24小时无人洗车加盟!就自助洗车加盟

共享电单车厂家

自助洗车机多少钱 自助洗车加盟 24小时无人洗车加盟

@所有高校师生,2022全国大学生物联网设计竞赛火热开启,限量礼品等你来拿!

HarmonyOS开发者

HarmonyOS 物联网设计竞赛

crontab命令详细介绍教程,快来围观

CRMEB

PHP项目微信提现功能代码详解

CRMEB

在Linux环境下安装SQLserver2017

春风十里

数据库 Linux SqlServer

“转型·破局” 看数字化会员如何重塑企业竞争力

科技热闻

想开一家24小时的自助洗车店要多少钱

共享电单车厂家

自助洗车机多少钱 24小时自助洗车店 开自助洗车店多少钱

百度荣获 “2021年中国网络安全产业联盟数据安全工作委员会突出贡献奖”

百度开发者中心

零信任访问控制下企业ABAC的实施问题

极客天地

无人自助洗车机多少钱一台?不是自动

共享电单车厂家

自助洗车机多少钱 自助洗车加盟 无人自助洗车机

jackson学习之六:常用类注解

程序员欣宸

4月月更

RDP是什么意思?有什么用?

行云管家

运维 网络协议 RDP

“囤菜新宠”预制菜,会是生鲜电商的破局点吗?

易观分析

如何设计帮助中心才能真正地帮助客户解决问题?

小炮

帮助中心

SAE 联合乘云至达与谱尼测试携手共同抗疫

阿里巴巴云原生

Docker 实战教程之从入门到提高(一)

汪子熙

Docker Kubernetes 容器 镜像 4月月更

自助洗车设备全套多少钱?有了解的吗

共享电单车厂家

自助洗车机价格 自助洗车加盟 自助洗车设备多少钱

6元自助洗车怎么样?想加盟自助洗车

共享电单车厂家

自助洗车加盟 6元自助洗车 自助洗车怎么样

eBPF Cilium实战(2) - 底层网络可观测性

北京好雨科技有限公司

Docker Kubernetes PaaS cilium

俄乌战争下的国产数据库替换思考-墨天轮

墨天轮

数据库 oracle 达梦 gbase8a

不再单调!快来自定义你的专属背景~

优麒麟

Linux 开源 操作系统 优麒麟 用户登录

ETL 和数仓建模的设计思路!

五分钟学大数据

4月月更

重磅!百度安全参编的国家标准《信息安全技术 术语》正式发布

百度开发者中心

盘点近期虎符交易所上线的项目

区块链前沿News

虎符交易所

大咖说|阿里巴巴副总裁陈龙:数字技术将在绿色低碳转型中发挥关键作用

大咖说

阿里巴巴 数字化 碳中和

易周金融观点 | 数字人民币试点扩大带动增量场景需求

易观分析

金融 数字化人民币

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