你思考世界的方式是什么

短短几年工作里,我接触到了不少关于“面向XX”和“XX驱动”的思想,每当第一次听到它们时都会令我有种莫名的敬畏。

昨天在初探Erlang的时候,它的创始人Joe Armstrong的一句话让我印象深刻1

At the highest level of abstraction an architecture is “a way of thinking about the world.”

Joe这席话让我延伸理解为,架构与其说是问题的答案,倒不如说是对问题的抽象更贴切。这种抽象,就如同面向对象的世界里一切皆为对象,在面向并发的世界里一切皆为进程。 

看待问题的方式,往往就已经决定了我们解决问题的方式。我的工作中就有这样的案例。系统需要控制资源的访问,这个问题域会被抽象为,给定的资源允许(或拒绝)被访问的对象和行为是哪些,由此访问控制列表(ACL)成为了这个问题域的解决方案。换个思考方式,同样的问题域我们抽象为,哪些的对象能够对哪些资源执行哪些访问行为,这样一来解决方案就变成“授权规则”。

但所有问题的解决方式不可能只有一种,这已经不争的事实。熟悉设计模式的人都了解,每个模式都有其针对的问题域,和适用的场景。有趣的是,当问题域发生变化时,我们的思考方式却没有做适应性的变化,而且这也是我们在自身上极不容易意识到的。我们不妨谨记,当解决一个问题开始变得复杂繁琐时,这似乎就是我们该换一种方式去思考的信号啦。问题总会有最简单最直接的答案,只要我们能够感觉到现在的答案不是这样的,则极有可能是我们没有对问题进行合适的抽象(或解释)。

至此,面对自己正在着手或即将着手的问题,最好问一句:“你思考世界的方式是什么”。

  


  1. 《Making reliable distributed systems in the presence of sodware errors》,Joe Armstrong,2003   它的中文版名为《面对软件错误构建可靠的分布式系统》,由段先德先生于2007年翻译,访问这里可以获取。

architectureerlangComment(0)