你思考世界的方式是什么
短短几年工作里,我接触到了不少关于 面向XX
和 XX驱动
的思想,每当第一次听到它们时都会令我有种莫名的敬畏。
昨天在初探 Erlang 的时候,它的创始人 Joe Armstrong 的一句话让我印象深刻:
At the highest level of abstraction an architecture is a way of thinking about the world.
Joe Armstrong,Making reliable distributed systems in the presence of software errors
Joe 这席话让我延伸理解为,架构与其说是问题的答案,倒不如说是对问题的抽象更贴切。这种抽象,就如同面向对象的世界里一切皆为对象,在面向并发的世界里一切皆为进程。
看待问题的方式,往往就已经决定了我们解决问题的方式。我的工作中就有这样的案例。系统需要控制资源的访问,这个问题域会被抽象为,给定的资源允许(或拒绝)被访问的对象和行为是哪些,由此访问控制列表(ACL)成为了这个问题域的解决方案。换个思考方式,同样的问题域我们抽象为,哪些的对象能够对哪些资源执行哪些访问行为,这样一来解决方案就变成“授权规则”。
但所有问题的解决方式不可能只有一种,这已经不争的事实。熟悉设计模式的人都了解,每个模式都有其针对的问题域,和适用的场景。有趣的是,当问题域发生变化时,我们的思考方式却没有做适应性的变化,而且这也是我们在自身上极不容易意识到的。我们不妨谨记,当解决一个问题开始变得复杂繁琐时,这似乎就是我们该换一种方式去思考的信号啦。问题总会有最简单最直接的答案,只要我们能够感觉到现在的答案不是这样的,则极有可能是我们没有对问题进行合适的抽象(或解释)。
至此,面对自己正在着手或即将着手的问题,最好问一句:你思考世界的方式是什么?