如何 0 成本启动全员 AI 技能提升?戳> 了解详情
写点什么

谦卑的架构师

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

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

关注

评论

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

活着

GongTeng95

危与机并存 保险业如何走好线上线下业务并举转型之路?

博睿数据

运维 监控 保险 AIOPS 系统

Python基础知识(二)

Python基础

一次压缩引发堆外内存过高的教训

AI乔治

Java kafka JVM

在线游戏,如何把握住1个亿以上的DAU?

博睿数据

运维 监控 AIOPS 系统 用户体验

架构师训练营结业作业

superman

实践案例丨云连接CC实现跨区域多VPC与线下IDC Server互联

华为云开发者联盟

云服务 IDC

UML练习1-食堂就餐卡系统设计

博古通今小虾米

UML

2020年7月云主机性能评测报告

博睿数据

云计算 测试 公有云 评测 排行榜

架构师训练营大作业

叮叮董董

网上赌博输了怎么办?上岸戒赌是唯一的选择

jdxj

网上赌博输了怎么办 网上赌博玩快三输了怎办 网上玩快三输了怎么回血 网赌输了怎么戒赌

python——自定义序列类

菜鸟小sailor 🐕

Spring Cloud 微服务实践(1) - 用Initializr初始化

xiaoboey

Spring Cloud Eureka Gateway Hoxton

算法大赛评委亲授通关秘籍,报名倒计时!

易观大数据

Spring Cloud 微服务实践(0) - 开篇闲话

xiaoboey

微服务 Spring Cloud Spring Boot Spring Framework

高速路二维码报警定位系统开发,二维码报警定位功能

13530558032

大数据下单集群如何做到2万+规模?

华为云开发者联盟

大数据 集群

一次旅途

GongTeng95

USDT支付系统开发技术方案,数字货币承兑商支付

13530558032

Java 基础语法

InfoQ_34a83d636158

关于手机里的IP地址,你不得不知道的“秘密”

脑极体

不想搞Java了,4年经验去面试10分钟结束,现在Java面试为何这么难

Java架构师迁哥

血的教训!千万别在生产使用这些 redis 指令

redis 学习 编程 程序员

Electronjs

Neil

Java 大前端 Electron 客户端开发

Spring Cloud 微服务实践(2) - Gateway重试机制

xiaoboey

maven Spring Cloud Gateway modules 重试

LeetCode题解:622. 设计循环队列,使用数组,JavaScript,详细注释

Lee Chen

大前端 LeetCode

直播倒计时|30分钟带你解锁“技术写作”新技能

有只小耳朵

技术 写作 直播 技术创作 RTC征文大赛

如何进步神速

Sean

学习 个人成长

数字货币量化交易,量化对冲搬砖系统开发

13530558032

CentOS 7 安装 Python 3.7

wong

Python

2020年8月北京BGP机房网络质量评测报告

博睿数据

测试 机房 评测 排行榜 IDC

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